projects
/
dcpomatic.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge master.
[dcpomatic.git]
/
src
/
lib
/
writer.cc
diff --git
a/src/lib/writer.cc
b/src/lib/writer.cc
index 6df1a1f210d92d52dd99aeb67d3289941b71b989..cbb84a94019bc0a97fc67abf14e05545ccaf4675 100644
(file)
--- a/
src/lib/writer.cc
+++ b/
src/lib/writer.cc
@@
-18,20
+18,24
@@
*/
#include <fstream>
*/
#include <fstream>
+#include <cerrno>
#include <libdcp/picture_asset.h>
#include <libdcp/sound_asset.h>
#include <libdcp/picture_frame.h>
#include <libdcp/reel.h>
#include <libdcp/dcp.h>
#include <libdcp/picture_asset.h>
#include <libdcp/sound_asset.h>
#include <libdcp/picture_frame.h>
#include <libdcp/reel.h>
#include <libdcp/dcp.h>
+#include <libdcp/cpl.h>
#include "writer.h"
#include "compose.hpp"
#include "film.h"
#include "writer.h"
#include "compose.hpp"
#include "film.h"
-#include "
format
.h"
+#include "
ratio
.h"
#include "log.h"
#include "dcp_video_frame.h"
#include "dcp_content_type.h"
#include "player.h"
#include "audio_mapping.h"
#include "log.h"
#include "dcp_video_frame.h"
#include "dcp_content_type.h"
#include "player.h"
#include "audio_mapping.h"
+#include "config.h"
+#include "job.h"
#include "i18n.h"
#include "i18n.h"
@@
-45,8
+49,9
@@
using boost::shared_ptr;
int const Writer::_maximum_frames_in_memory = 8;
int const Writer::_maximum_frames_in_memory = 8;
-Writer::Writer (shared_ptr<
Film> f
)
+Writer::Writer (shared_ptr<
const Film> f, shared_ptr<Job> j
)
: _film (f)
: _film (f)
+ , _job (j)
, _first_nonexistant_frame (0)
, _thread (0)
, _finish (false)
, _first_nonexistant_frame (0)
, _thread (0)
, _finish (false)
@@
-69,30
+74,26
@@
Writer::Writer (shared_ptr<Film> f)
_picture_asset.reset (
new libdcp::MonoPictureAsset (
_picture_asset.reset (
new libdcp::MonoPictureAsset (
- _film->video_mxf_dir (),
- _film->video_mxf_filename (),
- _film->dcp_frame_rate (),
- _film->
format()->dcp_size (
)
+ _film->
internal_
video_mxf_dir (),
+ _film->
internal_
video_mxf_filename (),
+ _film->dcp_
video_
frame_rate (),
+ _film->
container()->size (_film->full_frame ()
)
)
);
_picture_asset_writer = _picture_asset->start_write (_first_nonexistant_frame > 0);
)
);
_picture_asset_writer = _picture_asset->start_write (_first_nonexistant_frame > 0);
- AutomaticAudioMapping m (_film->audio_channels ());
+ _sound_asset.reset (
+ new libdcp::SoundAsset (
+ _film->dir (_film->dcp_name()),
+ _film->dcp_audio_mxf_filename (),
+ _film->dcp_video_frame_rate (),
+ _film->dcp_audio_channels (),
+ _film->dcp_audio_frame_rate()
+ )
+ );
- if (m.dcp_channels() > 0) {
- _sound_asset.reset (
- new libdcp::SoundAsset (
- _film->dir (_film->dcp_name()),
- N_("audio.mxf"),
- _film->dcp_frame_rate (),
- m.dcp_channels (),
- dcp_audio_sample_rate (_film->audio_frame_rate())
- )
- );
-
- _sound_asset_writer = _sound_asset->start_write ();
- }
+ _sound_asset_writer = _sound_asset->start_write ();
_thread = new boost::thread (boost::bind (&Writer::thread, this));
}
_thread = new boost::thread (boost::bind (&Writer::thread, this));
}
@@
-202,6
+203,10
@@
try
}
}
lock.lock ();
}
}
lock.lock ();
+
+ if (_film->length ()) {
+ _job->set_progress (float(_full_written + _fake_written + _repeat_written) / _film->time_to_video_frames (_film->length()));
+ }
++_last_written_frame;
}
++_last_written_frame;
}
@@
-257,26
+262,21
@@
Writer::finish ()
_thread = 0;
_picture_asset_writer->finalize ();
_thread = 0;
_picture_asset_writer->finalize ();
-
- if (_sound_asset_writer) {
- _sound_asset_writer->finalize ();
- }
-
+ _sound_asset_writer->finalize ();
+
int const frames = _last_written_frame + 1;
int const frames = _last_written_frame + 1;
- int const duration = frames - _film->trim_start() - _film->trim_end();
- _picture_asset->set_entry_point (_film->trim_start ());
- _picture_asset->set_duration (duration);
+ _picture_asset->set_duration (frames);
/* Hard-link the video MXF into the DCP */
boost::filesystem::path from;
/* Hard-link the video MXF into the DCP */
boost::filesystem::path from;
- from /= _film->video_mxf_dir();
- from /= _film->video_mxf_filename();
+ from /= _film->
internal_
video_mxf_dir();
+ from /= _film->
internal_
video_mxf_filename();
boost::filesystem::path to;
to /= _film->dir (_film->dcp_name());
boost::filesystem::path to;
to /= _film->dir (_film->dcp_name());
- to /=
N_("video.mxf"
);
+ to /=
_film->dcp_video_mxf_filename (
);
boost::system::error_code ec;
boost::filesystem::create_hard_link (from, to, ec);
boost::system::error_code ec;
boost::filesystem::create_hard_link (from, to, ec);
@@
-289,12
+289,8
@@
Writer::finish ()
/* And update the asset */
_picture_asset->set_directory (_film->dir (_film->dcp_name ()));
/* And update the asset */
_picture_asset->set_directory (_film->dir (_film->dcp_name ()));
- _picture_asset->set_file_name (N_("video.mxf"));
-
- if (_sound_asset) {
- _sound_asset->set_entry_point (_film->trim_start ());
- _sound_asset->set_duration (duration);
- }
+ _picture_asset->set_file_name (_film->dcp_video_mxf_filename ());
+ _sound_asset->set_duration (frames);
libdcp::DCP dcp (_film->dir (_film->dcp_name()));
libdcp::DCP dcp (_film->dir (_film->dcp_name()));
@@
-304,7
+300,7
@@
Writer::finish ()
_film->dcp_name(),
_film->dcp_content_type()->libdcp_kind (),
frames,
_film->dcp_name(),
_film->dcp_content_type()->libdcp_kind (),
frames,
- _film->dcp_frame_rate ()
+ _film->dcp_
video_
frame_rate ()
)
);
)
);
@@
-317,7
+313,9
@@
Writer::finish ()
)
));
)
));
- dcp.write_xml ();
+ libdcp::XMLMetadata meta = Config::instance()->dcp_metadata ();
+ meta.set_issue_date_now ();
+ dcp.write_xml (meta);
_film->log()->log (String::compose (N_("Wrote %1 FULL, %2 FAKE, %3 REPEAT; %4 pushed to disk"), _full_written, _fake_written, _repeat_written, _pushed_to_disk));
}
_film->log()->log (String::compose (N_("Wrote %1 FULL, %2 FAKE, %3 REPEAT; %4 pushed to disk"), _full_written, _fake_written, _repeat_written, _pushed_to_disk));
}
@@
-343,10
+341,11
@@
Writer::check_existing_picture_mxf ()
{
/* Try to open the existing MXF */
boost::filesystem::path p;
{
/* Try to open the existing MXF */
boost::filesystem::path p;
- p /= _film->video_mxf_dir ();
- p /= _film->video_mxf_filename ();
- FILE* mxf = fopen (p.string().c_str(),
N_("rb")
);
+ p /= _film->
internal_
video_mxf_dir ();
+ p /= _film->
internal_
video_mxf_filename ();
+ FILE* mxf = fopen (p.string().c_str(),
"rb"
);
if (!mxf) {
if (!mxf) {
+ _film->log()->log (String::compose ("Could not open existing MXF at %1 (errno=%2)", p.string(), errno));
return;
}
return;
}