diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/config.cc | 2 | ||||
| -rw-r--r-- | src/lib/ffmpeg_decoder.cc | 9 | ||||
| -rw-r--r-- | src/lib/video_content.cc | 4 | ||||
| -rw-r--r-- | src/lib/video_decoder.cc | 24 | ||||
| -rw-r--r-- | src/lib/video_decoder.h | 4 |
5 files changed, 39 insertions, 4 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc index 6fbd34d05..e4cebdc73 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -52,7 +52,7 @@ Config::Config () , _tms_path (N_(".")) , _sound_processor (SoundProcessor::from_id (N_("dolby_cp750"))) , _default_still_length (10) - , _default_container (0) + , _default_container (Ratio::from_id ("185")) , _default_dcp_content_type (0) { _allowed_dcp_frame_rates.push_back (24); diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index 1d000b62b..2f890c0cd 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -247,7 +247,9 @@ FFmpegDecoder::pass () if (_ffmpeg_content->audio_stream() && _decode_audio) { decode_audio_packet (); } - + + /* Stop us being asked for any more data */ + _next_video = _next_audio = _ffmpeg_content->length (); return; } @@ -277,6 +279,8 @@ FFmpegDecoder::pass () } avsubtitle_free (&sub); } + } else { + cout << "[ffmpeg] other packet.\n"; } av_free_packet (&_packet); @@ -443,6 +447,7 @@ void FFmpegDecoder::seek (Time t) { do_seek (t, false, false); + VideoDecoder::seek (t); } void @@ -453,6 +458,7 @@ FFmpegDecoder::seek_back () } do_seek (next() - 2.5 * TIME_HZ / video_frame_rate(), true, true); + VideoDecoder::seek_back (); } void @@ -463,6 +469,7 @@ FFmpegDecoder::seek_forward () } do_seek (next() - 0.5 * TIME_HZ / video_frame_rate(), true, true); + VideoDecoder::seek_forward (); } void diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc index 84dee81d1..99471edc1 100644 --- a/src/lib/video_content.cc +++ b/src/lib/video_content.cc @@ -40,7 +40,7 @@ VideoContent::VideoContent (shared_ptr<const Film> f, Time s, ContentVideoFrame : Content (f, s) , _video_length (len) , _video_frame_rate (0) - , _ratio (0) + , _ratio (Ratio::from_id ("185")) { } @@ -49,7 +49,7 @@ VideoContent::VideoContent (shared_ptr<const Film> f, boost::filesystem::path p) : Content (f, p) , _video_length (0) , _video_frame_rate (0) - , _ratio (0) + , _ratio (Ratio::from_id ("185")) { } diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc index a5147f42e..c5e1850c0 100644 --- a/src/lib/video_decoder.cc +++ b/src/lib/video_decoder.cc @@ -121,3 +121,27 @@ VideoDecoder::video_done () const return (_video_content->length() - _next_video) < film->video_frames_to_time (1); } + +void +VideoDecoder::seek (Time t) +{ + _next_video = t; +} + +void +VideoDecoder::seek_back () +{ + shared_ptr<const Film> film = _film.lock (); + assert (film); + _next_video -= film->video_frames_to_time (1); +} + +void +VideoDecoder::seek_forward () +{ + shared_ptr<const Film> film = _film.lock (); + assert (film); + _next_video += film->video_frames_to_time (1); +} + + diff --git a/src/lib/video_decoder.h b/src/lib/video_decoder.h index 5073efead..b47d7fc3a 100644 --- a/src/lib/video_decoder.h +++ b/src/lib/video_decoder.h @@ -31,6 +31,10 @@ class VideoDecoder : public VideoSource, public virtual Decoder public: VideoDecoder (boost::shared_ptr<const Film>, boost::shared_ptr<const VideoContent>); + virtual void seek (Time); + virtual void seek_back (); + virtual void seek_forward (); + /* Calls for VideoContent to find out about itself */ /** @return video frame rate second, or 0 if unknown */ |
