Merge master branch.
authorCarl Hetherington <cth@carlh.net>
Wed, 23 Jan 2013 20:15:13 +0000 (20:15 +0000)
committerCarl Hetherington <cth@carlh.net>
Wed, 23 Jan 2013 20:15:13 +0000 (20:15 +0000)
14 files changed:
1  2 
src/lib/dcp_video_frame.h
src/lib/ffmpeg_decoder.cc
src/lib/film.cc
src/lib/film.h
src/lib/filter_graph.cc
src/lib/format.cc
src/lib/image.cc
src/lib/imagemagick_decoder.cc
src/lib/server.cc
src/lib/subtitle.cc
src/lib/util.cc
src/wx/film_editor.cc
src/wx/film_editor.h
src/wx/film_viewer.cc

index 1d434505abef04a1c7efee3d8e946ca2d07b7a26,c0eff3f358a2581565266c4b37695577e1831a76..e988b663a80493158b552a959d8b8ec09010fea3
@@@ -39,17 -39,18 +39,16 @@@ class Subtitle
  class EncodedData
  {
  public:
-       /** @param s Size of data, in bytes.
 -      /** @param d Data (will not be freed by this class, but may be by subclasses)
 -       *  @param s libdcp::Size of data, in bytes.
--       */
 -      EncodedData (uint8_t* d, int s)
 -              : _data (d)
 -              , _size (s)
 -      {}
++      /** @param s Size of data, in bytes */
 +      EncodedData (int s);
 +
 +      EncodedData (std::string f);
  
 -      virtual ~EncodedData () {}
 +      virtual ~EncodedData ();
  
        void send (boost::shared_ptr<Socket> socket);
 -      void write (boost::shared_ptr<const EncodeOptions>, SourceFrame);
 +      void write (boost::shared_ptr<const Film>, int) const;
 +      void write_hash (boost::shared_ptr<const Film>, int) const;
  
        /** @return data */
        uint8_t* data () const {
Simple merge
diff --cc src/lib/film.cc
index c91a8047133dc0e14a1ff0cc47f0a946ada72e9e,5a11b0ca969ec5bfb262168158fb3be52e52514f..ae9edbfdb0a93a954a6e7c13bc967738598430e4
@@@ -155,9 -155,8 +155,8 @@@ Film::Film (Film const & o
        , _crop              (o._crop)
        , _filters           (o._filters)
        , _scaler            (o._scaler)
 -      , _dcp_trim_start    (o._dcp_trim_start)
 -      , _dcp_trim_end      (o._dcp_trim_end)
 +      , _trim_start        (o._trim_start)
 +      , _trim_end          (o._trim_end)
-       , _reel_size         (o._reel_size)
        , _dcp_ab            (o._dcp_ab)
        , _content_audio_stream (o._content_audio_stream)
        , _external_audio    (o._external_audio)
@@@ -388,11 -411,8 +387,8 @@@ Film::write_metadata () cons
                f << "filter " << (*i)->id () << "\n";
        }
        f << "scaler " << _scaler->id () << "\n";
 -      f << "dcp_trim_start " << _dcp_trim_start << "\n";
 -      f << "dcp_trim_end " << _dcp_trim_end << "\n";
 +      f << "trim_start " << _trim_start << "\n";
 +      f << "trim_end " << _trim_end << "\n";
-       if (_reel_size) {
-               f << "reel_size " << _reel_size.get() << "\n";
-       }
        f << "dcp_ab " << (_dcp_ab ? "1" : "0") << "\n";
        if (_content_audio_stream) {
                f << "selected_content_audio_stream " << _content_audio_stream->to_string() << "\n";
@@@ -504,12 -523,10 +500,10 @@@ Film::read_metadata (
                        _filters.push_back (Filter::from_id (v));
                } else if (k == "scaler") {
                        _scaler = Scaler::from_id (v);
 -              } else if (k == "dcp_trim_start") {
 -                      _dcp_trim_start = atoi (v.c_str ());
 -              } else if (k == "dcp_trim_end") {
 -                      _dcp_trim_end = atoi (v.c_str ());
 +              } else if ( ((!version || version < 2) && k == "trim_start") || k == "trim_start") {
 +                      _trim_start = atoi (v.c_str ());
 +              } else if ( ((!version || version < 2) && k == "trim_end") || k == "trim_end") {
 +                      _trim_end = atoi (v.c_str ());
-               } else if (k == "reel_size") {
-                       _reel_size = boost::lexical_cast<uint64_t> (v);
                } else if (k == "dcp_ab") {
                        _dcp_ab = (v == "1");
                } else if (k == "selected_content_audio_stream" || (!version && k == "selected_audio_stream")) {
@@@ -1065,31 -1083,11 +1059,11 @@@ Film::set_trim_end (int t
  {
        {
                boost::mutex::scoped_lock lm (_state_mutex);
 -              _dcp_trim_end = t;
 +              _trim_end = t;
        }
 -      signal_changed (DCP_TRIM_END);
 +      signal_changed (TRIM_END);
  }
  
- void
- Film::set_reel_size (uint64_t s)
- {
-       {
-               boost::mutex::scoped_lock lm (_state_mutex);
-               _reel_size = s;
-       }
-       signal_changed (REEL_SIZE);
- }
- void
- Film::unset_reel_size ()
- {
-       {
-               boost::mutex::scoped_lock lm (_state_mutex);
-               _reel_size = boost::optional<uint64_t> ();
-       }
-       signal_changed (REEL_SIZE);
- }
  void
  Film::set_dcp_ab (bool a)
  {
diff --cc src/lib/film.h
index e10abfa4bbed2127e14627a4282786b1c9e3dc3f,d3530b81772ac43f117d2d4f2734778c9d0d28c9..60646b0c8d78adc52f6fa8da0740d704926ac1c9
@@@ -121,9 -114,8 +121,8 @@@ public
                CROP,
                FILTERS,
                SCALER,
 -              DCP_TRIM_START,
 -              DCP_TRIM_END,
 +              TRIM_START,
 +              TRIM_END,
-               REEL_SIZE,
                DCP_AB,
                CONTENT_AUDIO_STREAM,
                EXTERNAL_AUDIO,
                return _scaler;
        }
  
 -      SourceFrame dcp_trim_start () const {
 +      int trim_start () const {
                boost::mutex::scoped_lock lm (_state_mutex);
 -              return _dcp_trim_start;
 +              return _trim_start;
        }
  
 -      SourceFrame dcp_trim_end () const {
 +      int trim_end () const {
                boost::mutex::scoped_lock lm (_state_mutex);
 -              return _dcp_trim_end;
 +              return _trim_end;
        }
  
-       boost::optional<uint64_t> reel_size () const {
-               boost::mutex::scoped_lock lm (_state_mutex);
-               return _reel_size;
-       }
-       
        bool dcp_ab () const {
                boost::mutex::scoped_lock lm (_state_mutex);
                return _dcp_ab;
        void set_bottom_crop (int);
        void set_filters (std::vector<Filter const *>);
        void set_scaler (Scaler const *);
 -      void set_dcp_trim_start (int);
 -      void set_dcp_trim_end (int);
 +      void set_trim_start (int);
 +      void set_trim_end (int);
-       void set_reel_size (uint64_t);
-       void unset_reel_size ();
        void set_dcp_ab (bool);
        void set_content_audio_stream (boost::shared_ptr<AudioStream>);
        void set_external_audio (std::vector<std::string>);
@@@ -453,11 -434,9 +445,9 @@@ private
        /** Scaler algorithm to use */
        Scaler const * _scaler;
        /** Frames to trim off the start of the DCP */
 -      int _dcp_trim_start;
 +      int _trim_start;
        /** Frames to trim off the end of the DCP */
 -      int _dcp_trim_end;
 +      int _trim_end;
-       /** Approximate target reel size in bytes; if not set, use a single reel */
-       boost::optional<uint64_t> _reel_size;
        /** 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.
Simple merge
Simple merge
index 0a51add002cf7787c919a9c29a03e36237a72200,feda09ec578bb41baeda31f033c7b770d650a45a..9223fdc5d0019cdfecbe2a2e20930c8546a7c426
@@@ -96,15 -95,11 +96,15 @@@ Image::components () cons
  }
  
  shared_ptr<Image>
- Image::scale (Size out_size, Scaler const * scaler, bool result_aligned) const
 -Image::scale (libdcp::Size out_size, Scaler const * scaler, bool aligned) const
++Image::scale (libdcp::Size out_size, Scaler const * scaler, bool result_aligned) const
  {
        assert (scaler);
 +      /* Empirical testing suggests that sws_scale() will crash if
 +         the input image is not aligned.
 +      */
 +      assert (aligned ());
  
 -      shared_ptr<Image> scaled (new SimpleImage (pixel_format(), out_size, aligned));
 +      shared_ptr<Image> scaled (new SimpleImage (pixel_format(), out_size, result_aligned));
  
        struct SwsContext* scale_context = sws_getContext (
                size().width, size().height, pixel_format(),
   *  @param scaler Scaler to use.
   */
  shared_ptr<Image>
- Image::scale_and_convert_to_rgb (Size out_size, int padding, Scaler const * scaler, bool result_aligned) const
 -Image::scale_and_convert_to_rgb (libdcp::Size out_size, int padding, Scaler const * scaler, bool aligned) const
++Image::scale_and_convert_to_rgb (libdcp::Size out_size, int padding, Scaler const * scaler, bool result_aligned) const
  {
        assert (scaler);
 +      /* Empirical testing suggests that sws_scale() will crash if
 +         the input image is not aligned.
 +      */
 +      assert (aligned ());
  
-       Size content_size = out_size;
+       libdcp::Size content_size = out_size;
        content_size.width -= (padding * 2);
  
 -      shared_ptr<Image> rgb (new SimpleImage (PIX_FMT_RGB24, content_size, aligned));
 +      shared_ptr<Image> rgb (new SimpleImage (PIX_FMT_RGB24, content_size, result_aligned));
  
        struct SwsContext* scale_context = sws_getContext (
                size().width, size().height, pixel_format(),
@@@ -530,19 -503,12 +530,19 @@@ FilterBufferImage::stride () cons
        return _buffer->linesize;
  }
  
- Size
libdcp::Size
  FilterBufferImage::size () const
  {
-       return Size (_buffer->video->w, _buffer->video->h);
+       return libdcp::Size (_buffer->video->w, _buffer->video->h);
  }
  
 +bool
 +FilterBufferImage::aligned () const
 +{
 +      /* XXX? */
 +      return true;
 +}
 +
  RGBPlusAlphaImage::RGBPlusAlphaImage (shared_ptr<const Image> im)
        : SimpleImage (im->pixel_format(), im->size(), false)
  {
Simple merge
Simple merge
Simple merge
diff --cc src/lib/util.cc
Simple merge
index bbaeb17c467d22d20010bd140dbb630406eb7326,72f2d48071316beeec6c7c2a0fc27d7974763642..4e99bcd960da73a6ce9fe99b40c065ab7c98baf4
@@@ -202,10 -189,8 +189,8 @@@ FilmEditor::connect_to_widgets (
        _dcp_content_type->Connect (wxID_ANY, wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler (FilmEditor::dcp_content_type_changed), 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);
 -      _dcp_trim_start->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::dcp_trim_start_changed), 0, this);
 -      _dcp_trim_end->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::dcp_trim_end_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);
-       _multiple_reels->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilmEditor::multiple_reels_toggled), 0, this);
-       _reel_size->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::reel_size_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);
@@@ -677,21 -634,12 +636,12 @@@ FilmEditor::film_changed (Film::Propert
        case Film::SCALER:
                checked_set (_scaler, Scaler::as_index (_film->scaler ()));
                break;
 -      case Film::DCP_TRIM_START:
 -              checked_set (_dcp_trim_start, _film->dcp_trim_start());
 +      case Film::TRIM_START:
 +              checked_set (_trim_start, _film->trim_start());
                break;
 -      case Film::DCP_TRIM_END:
 -              checked_set (_dcp_trim_end, _film->dcp_trim_end());
 +      case Film::TRIM_END:
 +              checked_set (_trim_end, _film->trim_end());
                break;
-       case Film::REEL_SIZE:
-               if (_film->reel_size()) {
-                       checked_set (_multiple_reels, true);
-                       checked_set (_reel_size, _film->reel_size().get() / 1e9);
-               } else {
-                       checked_set (_multiple_reels, false);
-               }
-               setup_reel_control_sensitivity ();
-               break;
        case Film::AUDIO_GAIN:
                checked_set (_audio_gain, _film->audio_gain ());
                break;
@@@ -813,9 -761,8 +763,8 @@@ FilmEditor::set_film (shared_ptr<Film> 
        film_changed (Film::CROP);
        film_changed (Film::FILTERS);
        film_changed (Film::SCALER);
 -      film_changed (Film::DCP_TRIM_START);
 -      film_changed (Film::DCP_TRIM_END);
 +      film_changed (Film::TRIM_START);
 +      film_changed (Film::TRIM_END);
-       film_changed (Film::REEL_SIZE);
        film_changed (Film::DCP_AB);
        film_changed (Film::CONTENT_AUDIO_STREAM);
        film_changed (Film::EXTERNAL_AUDIO);
@@@ -858,10 -805,8 +807,8 @@@ FilmEditor::set_things_sensitive (bool 
        _scaler->Enable (s);
        _audio_stream->Enable (s);
        _dcp_content_type->Enable (s);
 -      _dcp_trim_start->Enable (s);
 -      _dcp_trim_end->Enable (s);
 +      _trim_start->Enable (s);
 +      _trim_end->Enable (s);
-       _multiple_reels->Enable (s);
-       _reel_size->Enable (s);
        _dcp_ab->Enable (s);
        _colour_lut->Enable (s);
        _j2k_bandwidth->Enable (s);
index 323aead95fb3affef35e62385b66e7facd28a09a,8a900f1e4bedf05bf325183739d96e0b34383ec5..7272315fcfedc88af94bf8bc9b9f3f977057652e
@@@ -63,10 -63,8 +63,8 @@@ private
        void content_changed (wxCommandEvent &);
        void trust_content_header_changed (wxCommandEvent &);
        void format_changed (wxCommandEvent &);
 -      void dcp_trim_start_changed (wxCommandEvent &);
 -      void dcp_trim_end_changed (wxCommandEvent &);
 +      void trim_start_changed (wxCommandEvent &);
 +      void trim_end_changed (wxCommandEvent &);
-       void multiple_reels_toggled (wxCommandEvent &);
-       void reel_size_changed (wxCommandEvent &);
        void dcp_content_type_changed (wxCommandEvent &);
        void dcp_ab_toggled (wxCommandEvent &);
        void scaler_changed (wxCommandEvent &);
        /** The Film's duration for still sources */
        wxSpinCtrl* _still_duration;
  
 -      wxSpinCtrl* _dcp_trim_start;
 -      wxSpinCtrl* _dcp_trim_end;
 +      wxSpinCtrl* _trim_start;
 +      wxSpinCtrl* _trim_end;
-       wxCheckBox* _multiple_reels;
-       wxSpinCtrl* _reel_size;
        /** Selector to generate an A/B comparison DCP */
        wxCheckBox* _dcp_ab;
  
Simple merge