diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-05-22 15:20:20 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-05-22 15:20:20 +0100 |
| commit | d156fe45ee21fc416ce6b9e43ceed95bf42fde41 (patch) | |
| tree | f4a910c40d2dea3c03474a3eb120f3c7d8f3d282 /src | |
| parent | 5f15ca0a1ba5344e46f837e8021acfc7e4a850c3 (diff) | |
Split FFmpegExaminer stuff into separate methods.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/ffmpeg_examiner.cc | 65 | ||||
| -rw-r--r-- | src/lib/ffmpeg_examiner.h | 4 |
2 files changed, 47 insertions, 22 deletions
diff --git a/src/lib/ffmpeg_examiner.cc b/src/lib/ffmpeg_examiner.cc index a55113f89..013799d03 100644 --- a/src/lib/ffmpeg_examiner.cc +++ b/src/lib/ffmpeg_examiner.cc @@ -71,39 +71,60 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c) break; } - int frame_finished; - AVCodecContext* context = _format_context->streams[_packet.stream_index]->codec; - if (_packet.stream_index == _video_stream && !_first_video) { - if (avcodec_decode_video2 (context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) { - _first_video = frame_time (_format_context->streams[_video_stream]); - } - } else { - for (size_t i = 0; i < _audio_streams.size(); ++i) { - if (_audio_streams[i]->uses_index (_format_context, _packet.stream_index) && !_audio_streams[i]->first_audio) { - if (avcodec_decode_audio4 (context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) { - _audio_streams[i]->first_audio = frame_time (_audio_streams[i]->stream (_format_context)); - } - } + if (_packet.stream_index == _video_stream) { + video_packet (context); + } + + for (size_t i = 0; i < _audio_streams.size(); ++i) { + if (_audio_streams[i]->uses_index (_format_context, _packet.stream_index)) { + audio_packet (context, _audio_streams[i]); } } - bool have_all_audio = true; - size_t i = 0; - while (i < _audio_streams.size() && have_all_audio) { - have_all_audio = _audio_streams[i]->first_audio; - ++i; + for (size_t i = 0; i < _subtitle_streams.size(); ++i) { + if (_subtitle_streams[i]->uses_index (_format_context, _packet.stream_index)) { + subtitle_packet (context, _subtitle_streams[i]); + } } av_free_packet (&_packet); - - if (_first_video && have_all_audio) { - break; - } } } +void +FFmpegExaminer::video_packet (AVCodecContext* context) +{ + if (_first_video) { + return; + } + + int frame_finished; + if (avcodec_decode_video2 (context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) { + _first_video = frame_time (_format_context->streams[_video_stream]); + } +} + +void +FFmpegExaminer::audio_packet (AVCodecContext* context, shared_ptr<FFmpegAudioStream> stream) +{ + if (stream->first_audio) { + return; + } + + int frame_finished; + if (avcodec_decode_audio4 (context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) { + stream->first_audio = frame_time (stream->stream (_format_context)); + } +} + +void +FFmpegExaminer::subtitle_packet (AVCodecContext* context, shared_ptr<FFmpegSubtitleStream> stream) +{ + +} + optional<ContentTime> FFmpegExaminer::frame_time (AVStream* s) const { diff --git a/src/lib/ffmpeg_examiner.h b/src/lib/ffmpeg_examiner.h index 381c5cea9..8c31eb2c4 100644 --- a/src/lib/ffmpeg_examiner.h +++ b/src/lib/ffmpeg_examiner.h @@ -46,6 +46,10 @@ public: } private: + void video_packet (AVCodecContext *); + void audio_packet (AVCodecContext *, boost::shared_ptr<FFmpegAudioStream>); + void subtitle_packet (AVCodecContext *, boost::shared_ptr<FFmpegSubtitleStream>); + std::string stream_name (AVStream* s) const; std::string audio_stream_name (AVStream* s) const; std::string subtitle_stream_name (AVStream* s) const; |
