X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fffmpeg_examiner.cc;h=78b6e3121c363faf1b0c95a4701970273b970636;hb=2d5b8cdde08044d323aa7193dfac6c9f8bca7131;hp=6f1524f50e2ccf95be3c33c1ef89c9157158fe55;hpb=d0d584a7dde6de383302615634fdee17e9724fe8;p=dcpomatic.git diff --git a/src/lib/ffmpeg_examiner.cc b/src/lib/ffmpeg_examiner.cc index 6f1524f50..78b6e3121 100644 --- a/src/lib/ffmpeg_examiner.cc +++ b/src/lib/ffmpeg_examiner.cc @@ -24,8 +24,11 @@ extern "C" { #include "ffmpeg_examiner.h" #include "ffmpeg_content.h" +#include "i18n.h" + using std::string; using std::cout; +using std::max; using std::stringstream; using boost::shared_ptr; using boost::optional; @@ -49,12 +52,12 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr c) _audio_streams.push_back ( shared_ptr ( - new FFmpegAudioStream (stream_name (s), i, s->codec->sample_rate, s->codec->channels) + new FFmpegAudioStream (audio_stream_name (s), s->id, s->codec->sample_rate, s->codec->channels) ) ); } else if (s->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) { - _subtitle_streams.push_back (shared_ptr (new FFmpegSubtitleStream (stream_name (s), i))); + _subtitle_streams.push_back (shared_ptr (new FFmpegSubtitleStream (subtitle_stream_name (s), s->id))); } } @@ -69,8 +72,6 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr c) int frame_finished; avcodec_get_frame_defaults (_frame); - cout << "got packet " << _packet.stream_index << "\n"; - AVCodecContext* context = _format_context->streams[_packet.stream_index]->codec; if (_packet.stream_index == _video_stream && !_first_video) { @@ -79,9 +80,9 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr c) } } else { for (size_t i = 0; i < _audio_streams.size(); ++i) { - if (_packet.stream_index == _audio_streams[i]->id && !_audio_streams[i]->start) { + if (_packet.stream_index == _audio_streams[i]->index (_format_context) && !_audio_streams[i]->first_audio) { if (avcodec_decode_audio4 (context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) { - _audio_streams[i]->start = frame_time (_audio_streams[i]->id); + _audio_streams[i]->first_audio = frame_time (_audio_streams[i]->index (_format_context)); } } } @@ -90,26 +91,26 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr c) bool have_all_audio = true; size_t i = 0; while (i < _audio_streams.size() && have_all_audio) { - have_all_audio = _audio_streams[i]->start; + have_all_audio = _audio_streams[i]->first_audio; ++i; } + av_free_packet (&_packet); + if (_first_video && have_all_audio) { break; } - - av_free_packet (&_packet); } } -optional