From 1268cc026e9c431ab24885963e1573717396fdfe Mon Sep 17 00:00:00 2001 From: Ronag Date: Sun, 21 Aug 2011 17:59:38 +0000 Subject: [PATCH] 2.0. ffmepg_producer: - fix_meta_data: Added fix for invalid double framerate metadata. git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1254 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d --- modules/ffmpeg/producer/util.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/ffmpeg/producer/util.cpp b/modules/ffmpeg/producer/util.cpp index 6d67bfaf2..1baa868b2 100644 --- a/modules/ffmpeg/producer/util.cpp +++ b/modules/ffmpeg/producer/util.cpp @@ -252,6 +252,21 @@ void fix_meta_data(AVFormatContext& context) video_context.time_base.den = static_cast(video_stream.nb_frames*100000); } } + + if(audio_index > -1) + { + auto& audio_context = *context.streams[audio_index]->codec; + auto& audio_stream = *context.streams[audio_index]; + + double duration_sec = audio_stream.duration / static_cast(audio_context.sample_rate); + double fps = static_cast(video_context.time_base.den) / static_cast(video_context.time_base.num); + + double fps_nb_frames = static_cast(duration_sec*fps); + double stream_nb_frames = static_cast(video_stream.nb_frames); + double diff = std::abs(fps_nb_frames - stream_nb_frames*2.0); + if(diff < fps_nb_frames*0.01) + video_context.time_base.num *= 2; + } } double fps = static_cast(video_context.time_base.den) / static_cast(video_context.time_base.num); -- 2.39.2