- dcp::AtmosAsset in (input_file);
- shared_ptr<dcp::AtmosAssetReader> reader = in.start_read ();
- dcp::AtmosAsset out (
- in.edit_rate(),
- in.first_frame(),
- in.max_channel_count(),
- in.max_object_count(),
- in.atmos_id(),
- in.atmos_version()
- );
- shared_ptr<dcp::AtmosAssetWriter> writer = out.start_write (output_file.get());
- for (int64_t i = 0; i < in.intrinsic_duration(); ++i) {
- shared_ptr<const dcp::AtmosFrame> f = reader->get_frame (i);
- writer->write (f->data(), f->size());
+ switch (*type) {
+ case Type::ATMOS:
+ {
+ dcp::AtmosAsset in (input_file);
+ add_key (in, decrypted_kdm);
+ dcp::AtmosAsset out (
+ in.edit_rate(),
+ in.first_frame(),
+ in.max_channel_count(),
+ in.max_object_count(),
+ in.atmos_version()
+ );
+ auto writer = out.start_write(output_file.get());
+ copy (in, writer, ignore_hmac);
+ break;
+ }
+ case Type::PICTURE:
+ {
+ dcp::MonoPictureAsset in (input_file);
+ add_key (in, decrypted_kdm);
+ dcp::MonoPictureAsset out (in.edit_rate(), dcp::Standard::SMPTE);
+ auto writer = out.start_write(output_file.get(), dcp::PictureAsset::Behaviour::MAKE_NEW);
+ copy (in, writer, ignore_hmac);
+ break;
+ }