Merge branch 'master' of /home/carl/git/dvdomatic
authorCarl Hetherington <cth@carlh.net>
Mon, 15 Apr 2013 11:53:05 +0000 (12:53 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 15 Apr 2013 11:53:05 +0000 (12:53 +0100)
ChangeLog
src/lib/film.cc
src/lib/film.h
src/lib/writer.cc
src/wx/film_editor.cc
src/wx/film_editor.h
test/test.cc

index 833aa085da7db137c70e73198e624c765c6aa05c..a414cf32ddc76bc6fcf39d3dc64be687efdb0423 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-04-13  Carl Hetherington  <cth@carlh.net>
+
+       * Use film-name-derived names for MXFs in DCPs (#54).
+
 2013-04-10  Carl Hetherington  <cth@carlh.net>
 
        * Version 0.83 released.
index bd11c1eb577376b8fbf50c04c7ce47d448919da9..a42b874e856d3470e9d7526bc8d5b6b53a9cd771 100644 (file)
@@ -93,6 +93,7 @@ Film::Film (string d, bool must_exist)
        , _scaler (Scaler::from_id ("bicubic"))
        , _trim_start (0)
        , _trim_end (0)
+       , _trim_type (CPL)
        , _dcp_ab (false)
        , _use_content_audio (true)
        , _audio_gain (0)
@@ -163,6 +164,7 @@ Film::Film (Film const & o)
        , _scaler            (o._scaler)
        , _trim_start        (o._trim_start)
        , _trim_end          (o._trim_end)
+       , _trim_type         (o._trim_type)
        , _dcp_ab            (o._dcp_ab)
        , _content_audio_stream (o._content_audio_stream)
        , _external_audio    (o._external_audio)
@@ -232,18 +234,46 @@ Film::info_dir () const
 }
 
 string
-Film::video_mxf_dir () const
+Film::internal_video_mxf_dir () const
 {
        boost::filesystem::path p;
        return dir ("video");
 }
 
 string
-Film::video_mxf_filename () const
+Film::internal_video_mxf_filename () const
 {
        return video_state_identifier() + ".mxf";
 }
 
+string
+Film::dcp_video_mxf_filename () const
+{
+       return filename_safe_name() + "_video.mxf";
+}
+
+string
+Film::dcp_audio_mxf_filename () const
+{
+       return filename_safe_name() + "_audio.mxf";
+}
+
+string
+Film::filename_safe_name () const
+{
+       string const n = name ();
+       string o;
+       for (size_t i = 0; i < n.length(); ++i) {
+               if (isalnum (n[i])) {
+                       o += n[i];
+               } else {
+                       o += "_";
+               }
+       }
+
+       return o;
+}
+
 string
 Film::audio_analysis_path () const
 {
@@ -428,6 +458,14 @@ Film::write_metadata () const
        f << "scaler " << _scaler->id () << endl;
        f << "trim_start " << _trim_start << endl;
        f << "trim_end " << _trim_end << endl;
+       switch (_trim_type) {
+       case CPL:
+               f << "trim_type cpl\n";
+               break;
+       case ENCODE:
+               f << "trim_type encode\n";
+               break;
+       }
        f << "dcp_ab " << (_dcp_ab ? "1" : "0") << endl;
        if (_content_audio_stream) {
                f << "selected_content_audio_stream " << _content_audio_stream->to_string() << endl;
@@ -541,6 +579,12 @@ Film::read_metadata ()
                        _trim_start = atoi (v.c_str ());
                } else if ( ((!version || version < 2) && k == "dcp_trim_end") || k == "trim_end") {
                        _trim_end = atoi (v.c_str ());
+               } else if (k == "trim_type") {
+                       if (v == "cpl") {
+                               _trim_type = CPL;
+                       } else if (v == "encode") {
+                               _trim_type = ENCODE;
+                       }
                } else if (k == "dcp_ab") {
                        _dcp_ab = (v == "1");
                } else if (k == "selected_content_audio_stream" || (!version && k == "selected_audio_stream")) {
@@ -1096,6 +1140,16 @@ Film::set_trim_end (int t)
        signal_changed (TRIM_END);
 }
 
+void
+Film::set_trim_type (TrimType t)
+{
+       {
+               boost::mutex::scoped_lock lm (_state_mutex);
+               _trim_type = t;
+       }
+       signal_changed (TRIM_TYPE);
+}
+
 void
 Film::set_dcp_ab (bool a)
 {
index adc4b0eec65137c22a2c2b6318dd65b6bdb8b090..dd0a83d94e473f5da6d5b9e98d1378e247c0c3eb 100644 (file)
@@ -64,10 +64,13 @@ public:
        std::string info_dir () const;
        std::string j2c_path (int f, bool t) const;
        std::string info_path (int f) const;
-       std::string video_mxf_dir () const;
-       std::string video_mxf_filename () const;
+       std::string internal_video_mxf_dir () const;
+       std::string internal_video_mxf_filename () const;
        std::string audio_analysis_path () const;
 
+       std::string dcp_video_mxf_filename () const;
+       std::string dcp_audio_mxf_filename () const;
+
        void examine_content ();
        void analyse_audio ();
        void send_dcp_to_tms ();
@@ -109,6 +112,11 @@ public:
 
        bool have_dcp () const;
 
+       enum TrimType {
+               CPL,
+               ENCODE
+       };
+
        /** Identifiers for the parts of our state;
            used for signalling changes.
        */
@@ -125,6 +133,7 @@ public:
                SCALER,
                TRIM_START,
                TRIM_END,
+               TRIM_TYPE,
                DCP_AB,
                CONTENT_AUDIO_STREAM,
                EXTERNAL_AUDIO,
@@ -210,6 +219,11 @@ public:
                return _trim_end;
        }
 
+       TrimType trim_type () const {
+               boost::mutex::scoped_lock lm (_state_mutex);
+               return _trim_type;
+       }
+
        bool dcp_ab () const {
                boost::mutex::scoped_lock lm (_state_mutex);
                return _dcp_ab;
@@ -342,6 +356,7 @@ public:
        void set_scaler (Scaler const *);
        void set_trim_start (int);
        void set_trim_end (int);
+       void set_trim_type (TrimType);
        void set_dcp_ab (bool);
        void set_content_audio_stream (boost::shared_ptr<AudioStream>);
        void set_external_audio (std::vector<std::string>);
@@ -387,6 +402,7 @@ private:
        void examine_content_finished ();
        void analyse_audio_finished ();
        std::string video_state_identifier () const;
+       std::string filename_safe_name () const;
 
        /** Complete path to directory containing the film metadata;
         *  must not be relative.
@@ -422,6 +438,7 @@ private:
        int _trim_start;
        /** Frames to trim off the end of the DCP */
        int _trim_end;
+       TrimType _trim_type;
        /** true to create an A/B comparison DCP, where the left half of the image
            is the video without any filters or post-processing, and the right half
            has the specified filters and post-processing.
index 2d7ee9ba317f32d1246142064b09890bb25cadb5..c6ce4711d6890fd2e2b92d8585d003ab23da5cdb 100644 (file)
@@ -65,8 +65,8 @@ Writer::Writer (shared_ptr<Film> f)
        
        _picture_asset.reset (
                new libdcp::MonoPictureAsset (
-                       _film->video_mxf_dir (),
-                       _film->video_mxf_filename (),
+                       _film->internal_video_mxf_dir (),
+                       _film->internal_video_mxf_filename (),
                        _film->dcp_frame_rate (),
                        _film->format()->dcp_size ()
                        )
@@ -80,7 +80,7 @@ Writer::Writer (shared_ptr<Film> f)
                _sound_asset.reset (
                        new libdcp::SoundAsset (
                                _film->dir (_film->dcp_name()),
-                               N_("audio.mxf"),
+                               _film->dcp_audio_mxf_filename (),
                                _film->dcp_frame_rate (),
                                m.dcp_channels (),
                                dcp_audio_sample_rate (_film->audio_stream()->sample_rate())
@@ -267,12 +267,12 @@ Writer::finish ()
        /* 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());
-       to /= N_("video.mxf");
+       to /= _film->dcp_video_mxf_filename ();
 
        boost::system::error_code ec;
        boost::filesystem::create_hard_link (from, to, ec);
@@ -285,7 +285,7 @@ Writer::finish ()
        /* And update the asset */
 
        _picture_asset->set_directory (_film->dir (_film->dcp_name ()));
-       _picture_asset->set_file_name (N_("video.mxf"));
+       _picture_asset->set_file_name (_film->dcp_video_mxf_filename ());
 
        if (_sound_asset) {
                _sound_asset->set_entry_point (_film->trim_start ());
@@ -339,8 +339,8 @@ Writer::check_existing_picture_mxf ()
 {
        /* Try to open the existing MXF */
        boost::filesystem::path p;
-       p /= _film->video_mxf_dir ();
-       p /= _film->video_mxf_filename ();
+       p /= _film->internal_video_mxf_dir ();
+       p /= _film->internal_video_mxf_filename ();
        FILE* mxf = fopen (p.string().c_str(), N_("rb"));
        if (!mxf) {
                return;
index 62eecb70c4758b4104f88e54373c9d80b8a62780..a21782a6f9da188530d9e4b472461e8cf363f19e 100644 (file)
@@ -156,11 +156,6 @@ FilmEditor::make_film_panel ()
        _frame_rate_description->SetFont(font);
        ++r;
        
-       video_control (add_label_to_grid_bag_sizer (grid, _film_panel, _("Original Size"), wxGBPosition (r, 0)));
-       _original_size = new wxStaticText (_film_panel, wxID_ANY, wxT (""));
-       grid->Add (video_control (_original_size), wxGBPosition (r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
-       ++r;
-       
        video_control (add_label_to_grid_bag_sizer (grid, _film_panel, _("Length"), wxGBPosition (r, 0)));
        _length = new wxStaticText (_film_panel, wxID_ANY, wxT (""));
        grid->Add (video_control (_length), wxGBPosition (r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
@@ -181,6 +176,11 @@ FilmEditor::make_film_panel ()
        }
        ++r;
 
+       video_control (add_label_to_grid_bag_sizer (grid, _film_panel, _("Trim method"), wxGBPosition (r, 0)));
+       _trim_type = new wxChoice (_film_panel, wxID_ANY);
+       grid->Add (video_control (_trim_type), wxGBPosition (r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+       ++r;
+
        _dcp_ab = new wxCheckBox (_film_panel, wxID_ANY, _("A/B"));
        video_control (_dcp_ab);
        grid->Add (_dcp_ab, wxGBPosition (r, 0));
@@ -208,45 +208,49 @@ FilmEditor::make_film_panel ()
        for (list<int>::const_iterator i = dfr.begin(); i != dfr.end(); ++i) {
                _dcp_frame_rate->Append (std_to_wx (boost::lexical_cast<string> (*i)));
        }
+
+       _trim_type->Append (_("encode all frames and play the subset"));
+       _trim_type->Append (_("encode only the subset"));
 }
 
 void
 FilmEditor::connect_to_widgets ()
 {
-       _name->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (FilmEditor::name_changed), 0, this);
-       _use_dci_name->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilmEditor::use_dci_name_toggled), 0, this);
-       _edit_dci_button->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::edit_dci_button_clicked), 0, this);
-       _format->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::format_changed), 0, this);
-       _content->Connect (wxID_ANY, wxEVT_COMMAND_FILEPICKER_CHANGED, wxCommandEventHandler (FilmEditor::content_changed), 0, this);
-       _trust_content_header->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilmEditor::trust_content_header_changed), 0, this);
-       _left_crop->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::left_crop_changed), 0, this);
-       _right_crop->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::right_crop_changed), 0, this);
-       _top_crop->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::top_crop_changed), 0, this);
-       _bottom_crop->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::bottom_crop_changed), 0, this);
-       _filters_button->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::edit_filters_clicked), 0, this);
-       _scaler->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::scaler_changed), 0, this);
-       _dcp_content_type->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::dcp_content_type_changed), 0, this);
-       _dcp_frame_rate->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::dcp_frame_rate_changed), 0, this);
-       _best_dcp_frame_rate->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::best_dcp_frame_rate_clicked), 0, this);
-       _dcp_ab->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilmEditor::dcp_ab_toggled), 0, this);
-       _still_duration->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::still_duration_changed), 0, this);
-       _trim_start->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::trim_start_changed), 0, this);
-       _trim_end->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::trim_end_changed), 0, this);
-       _with_subtitles->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilmEditor::with_subtitles_toggled), 0, this);
-       _subtitle_offset->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::subtitle_offset_changed), 0, this);
-       _subtitle_scale->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::subtitle_scale_changed), 0, this);
-       _colour_lut->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::colour_lut_changed), 0, this);
-       _j2k_bandwidth->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::j2k_bandwidth_changed), 0, this);
-       _subtitle_stream->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::subtitle_stream_changed), 0, this);
-       _audio_stream->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::audio_stream_changed), 0, this);
-       _audio_gain->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::audio_gain_changed), 0, this);
+       _name->Connect                 (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED,         wxCommandEventHandler (FilmEditor::name_changed), 0, this);
+       _use_dci_name->Connect         (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED,     wxCommandEventHandler (FilmEditor::use_dci_name_toggled), 0, this);
+       _edit_dci_button->Connect      (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED,       wxCommandEventHandler (FilmEditor::edit_dci_button_clicked), 0, this);
+       _format->Connect               (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED,      wxCommandEventHandler (FilmEditor::format_changed), 0, this);
+       _content->Connect              (wxID_ANY, wxEVT_COMMAND_FILEPICKER_CHANGED,   wxCommandEventHandler (FilmEditor::content_changed), 0, this);
+       _trust_content_header->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED,     wxCommandEventHandler (FilmEditor::trust_content_header_changed), 0, this);
+       _left_crop->Connect            (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::left_crop_changed), 0, this);
+       _right_crop->Connect           (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::right_crop_changed), 0, this);
+       _top_crop->Connect             (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::top_crop_changed), 0, this);
+       _bottom_crop->Connect          (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::bottom_crop_changed), 0, this);
+       _filters_button->Connect       (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED,       wxCommandEventHandler (FilmEditor::edit_filters_clicked), 0, this);
+       _scaler->Connect               (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED,      wxCommandEventHandler (FilmEditor::scaler_changed), 0, this);
+       _dcp_content_type->Connect     (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED,      wxCommandEventHandler (FilmEditor::dcp_content_type_changed), 0, this);
+       _dcp_frame_rate->Connect       (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED,      wxCommandEventHandler (FilmEditor::dcp_frame_rate_changed), 0, this);
+       _best_dcp_frame_rate->Connect  (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED,       wxCommandEventHandler (FilmEditor::best_dcp_frame_rate_clicked), 0, this);
+       _dcp_ab->Connect               (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED,     wxCommandEventHandler (FilmEditor::dcp_ab_toggled), 0, this);
+       _still_duration->Connect       (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::still_duration_changed), 0, this);
+       _trim_start->Connect           (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::trim_start_changed), 0, this);
+       _trim_end->Connect             (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::trim_end_changed), 0, this);
+       _trim_type->Connect            (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED,      wxCommandEventHandler (FilmEditor::trim_type_changed), 0, this);
+       _with_subtitles->Connect       (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED,     wxCommandEventHandler (FilmEditor::with_subtitles_toggled), 0, this);
+       _subtitle_offset->Connect      (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::subtitle_offset_changed), 0, this);
+       _subtitle_scale->Connect       (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::subtitle_scale_changed), 0, this);
+       _colour_lut->Connect           (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED,      wxCommandEventHandler (FilmEditor::colour_lut_changed), 0, this);
+       _j2k_bandwidth->Connect        (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::j2k_bandwidth_changed), 0, this);
+       _subtitle_stream->Connect      (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED,      wxCommandEventHandler (FilmEditor::subtitle_stream_changed), 0, this);
+       _audio_stream->Connect         (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED,      wxCommandEventHandler (FilmEditor::audio_stream_changed), 0, this);
+       _audio_gain->Connect           (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::audio_gain_changed), 0, this);
        _audio_gain_calculate_button->Connect (
                wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::audio_gain_calculate_button_clicked), 0, this
                );
-       _show_audio->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::show_audio_clicked), 0, this);
-       _audio_delay->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::audio_delay_changed), 0, this);
-       _use_content_audio->Connect (wxID_ANY, wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (FilmEditor::use_audio_changed), 0, this);
-       _use_external_audio->Connect (wxID_ANY, wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (FilmEditor::use_audio_changed), 0, this);
+       _show_audio->Connect           (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED,       wxCommandEventHandler (FilmEditor::show_audio_clicked), 0, this);
+       _audio_delay->Connect          (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED,     wxCommandEventHandler (FilmEditor::audio_delay_changed), 0, this);
+       _use_content_audio->Connect    (wxID_ANY, wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (FilmEditor::use_audio_changed), 0, this);
+       _use_external_audio->Connect   (wxID_ANY, wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (FilmEditor::use_audio_changed), 0, this);
        for (int i = 0; i < MAX_AUDIO_CHANNELS; ++i) {
                _external_audio[i]->Connect (
                        wxID_ANY, wxEVT_COMMAND_FILEPICKER_CHANGED, wxCommandEventHandler (FilmEditor::external_audio_changed), 0, this
@@ -682,12 +686,6 @@ FilmEditor::film_changed (Film::Property p)
                setup_frame_rate_description ();
                break;
        case Film::SIZE:
-               if (_film->size().width == 0 && _film->size().height == 0) {
-                       _original_size->SetLabel (wxT (""));
-               } else {
-                       s << _film->size().width << " x " << _film->size().height;
-                       _original_size->SetLabel (std_to_wx (s.str ()));
-               }
                setup_scaling_description ();
                break;
        case Film::LENGTH:
@@ -720,6 +718,9 @@ FilmEditor::film_changed (Film::Property p)
        case Film::TRIM_END:
                checked_set (_trim_end, _film->trim_end());
                break;
+       case Film::TRIM_TYPE:
+               checked_set (_trim_type, _film->trim_type() == Film::CPL ? 0 : 1);
+               break;
        case Film::AUDIO_GAIN:
                checked_set (_audio_gain, _film->audio_gain ());
                break;
@@ -898,6 +899,7 @@ FilmEditor::set_film (shared_ptr<Film> f)
        film_changed (Film::SCALER);
        film_changed (Film::TRIM_START);
        film_changed (Film::TRIM_END);
+       film_changed (Film::TRIM_TYPE);
        film_changed (Film::DCP_AB);
        film_changed (Film::CONTENT_AUDIO_STREAM);
        film_changed (Film::EXTERNAL_AUDIO);
@@ -944,6 +946,7 @@ FilmEditor::set_things_sensitive (bool s)
        _dcp_frame_rate->Enable (s);
        _trim_start->Enable (s);
        _trim_end->Enable (s);
+       _trim_type->Enable (s);
        _dcp_ab->Enable (s);
        _colour_lut->Enable (s);
        _j2k_bandwidth->Enable (s);
@@ -1400,3 +1403,9 @@ FilmEditor::setup_scaling_description ()
 
        _scaling_description->SetLabel (d);
 }
+
+void
+FilmEditor::trim_type_changed (wxCommandEvent &)
+{
+       _film->set_trim_type (_trim_type->GetSelection () == 0 ? Film::CPL : Film::ENCODE);
+}
index 7123620d3753156b0d37382f4945b3fa0f123f7a..e2a4d583641eb9ae23ea5d76afc0262b602be20e 100644 (file)
@@ -65,6 +65,7 @@ private:
        void format_changed (wxCommandEvent &);
        void trim_start_changed (wxCommandEvent &);
        void trim_end_changed (wxCommandEvent &);
+       void trim_type_changed (wxCommandEvent &);
        void dcp_content_type_changed (wxCommandEvent &);
        void dcp_ab_toggled (wxCommandEvent &);
        void scaler_changed (wxCommandEvent &);
@@ -169,8 +170,6 @@ private:
        wxChoice* _dcp_frame_rate;
        wxButton* _best_dcp_frame_rate;
        wxStaticText* _frame_rate_description;
-       /** The Film's original size */
-       wxStaticText* _original_size;
        /** The Film's length */
        wxStaticText* _length;
        /** The Film's audio details */
@@ -180,6 +179,7 @@ private:
 
        wxSpinCtrl* _trim_start;
        wxSpinCtrl* _trim_end;
+       wxChoice* _trim_type;
        /** Selector to generate an A/B comparison DCP */
        wxCheckBox* _dcp_ab;
 
index d1bb400f98f2d557946b0032656264046c632972..6fad0986b4c8728c0d2f7fcdbf6e3a9de7ecbc75 100644 (file)
@@ -504,7 +504,7 @@ BOOST_AUTO_TEST_CASE (have_dcp_test)
        BOOST_CHECK (f.have_dcp());
 
        p /= f.dcp_name();
-       p /= "video.mxf";
+       p /= f.dcp_video_mxf_filename();
        boost::filesystem::remove (p);
        BOOST_CHECK (!f.have_dcp ());
 }