From: Carl Hetherington Date: Wed, 23 Jan 2013 20:15:13 +0000 (+0000) Subject: Merge master branch. X-Git-Tag: v2.0.48~1337^2~726 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=420adb1fd2910fd24eb84be98169afc209f76a0e Merge master branch. --- 420adb1fd2910fd24eb84be98169afc209f76a0e diff --cc src/lib/dcp_video_frame.h index 1d434505a,c0eff3f35..e988b663a --- a/src/lib/dcp_video_frame.h +++ b/src/lib/dcp_video_frame.h @@@ -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); - void write (boost::shared_ptr, SourceFrame); + void write (boost::shared_ptr, int) const; + void write_hash (boost::shared_ptr, int) const; /** @return data */ uint8_t* data () const { diff --cc src/lib/film.cc index c91a80471,5a11b0ca9..ae9edbfdb --- a/src/lib/film.cc +++ b/src/lib/film.cc @@@ -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 (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 (); - } - signal_changed (REEL_SIZE); - } - void Film::set_dcp_ab (bool a) { diff --cc src/lib/film.h index e10abfa4b,d3530b817..60646b0c8 --- a/src/lib/film.h +++ b/src/lib/film.h @@@ -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, @@@ -199,21 -190,16 +198,16 @@@ 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 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; @@@ -369,10 -353,8 +363,8 @@@ void set_bottom_crop (int); void set_filters (std::vector); 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); void set_external_audio (std::vector); @@@ -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 _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. diff --cc src/lib/image.cc index 0a51add00,feda09ec5..9223fdc5d --- a/src/lib/image.cc +++ b/src/lib/image.cc @@@ -96,15 -95,11 +96,15 @@@ Image::components () cons } shared_ptr - 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 scaled (new SimpleImage (pixel_format(), out_size, aligned)); + shared_ptr scaled (new SimpleImage (pixel_format(), out_size, result_aligned)); struct SwsContext* scale_context = sws_getContext ( size().width, size().height, pixel_format(), @@@ -129,18 -124,14 +129,18 @@@ * @param scaler Scaler to use. */ shared_ptr - 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 rgb (new SimpleImage (PIX_FMT_RGB24, content_size, aligned)); + shared_ptr 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 im) : SimpleImage (im->pixel_format(), im->size(), false) { diff --cc src/wx/film_editor.cc index bbaeb17c4,72f2d4807..4e99bcd96 --- a/src/wx/film_editor.cc +++ b/src/wx/film_editor.cc @@@ -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_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); diff --cc src/wx/film_editor.h index 323aead95,8a900f1e4..7272315fc --- a/src/wx/film_editor.h +++ b/src/wx/film_editor.h @@@ -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 &); @@@ -168,10 -165,8 +165,8 @@@ /** 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;