aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClément Bœsch <clement.boesch@smartjog.com>2012-08-03 15:40:48 +0200
committerClément Bœsch <ubitux@gmail.com>2012-08-08 09:11:26 +0200
commitaca0f78114a4f74e1b59d706c11c1bd5ff6f92d9 (patch)
tree5ee33c89a68688fb8654975daab990003edfdf8c
parent4b365b08685b0ab9df3f4bae4ee8b6506eb637ea (diff)
downloadffmpeg-aca0f78114a4f74e1b59d706c11c1bd5ff6f92d9.tar.gz
lavf/movenc: add frame rate heuristic for timecode frame rate.
Fixes ticket 1576.
-rw-r--r--libavformat/movenc.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 023b2ca5c5..89a181acf3 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -3292,6 +3292,7 @@ static void mov_create_chapter_track(AVFormatContext *s, int tracknum)
static int mov_create_timecode_track(AVFormatContext *s, int index, int src_index, const char *tcstr)
{
+ int ret;
MOVMuxContext *mov = s->priv_data;
MOVTrack *track = &mov->tracks[index];
AVStream *src_st = s->streams[src_index];
@@ -3299,8 +3300,15 @@ static int mov_create_timecode_track(AVFormatContext *s, int index, int src_inde
AVPacket pkt = {.stream_index = index, .flags = AV_PKT_FLAG_KEY, .size = 4};
AVRational rate = {src_st->codec->time_base.den, src_st->codec->time_base.num};
+ /* if the codec time base makes no sense, try to fallback on stream frame rate */
+ if (av_timecode_check_frame_rate(rate) < 0) {
+ av_log(s, AV_LOG_DEBUG, "timecode: tbc=%d/%d invalid, fallback on %d/%d\n",
+ rate.num, rate.den, src_st->avg_frame_rate.num, src_st->avg_frame_rate.den);
+ rate = src_st->avg_frame_rate;
+ }
+
/* compute the frame number */
- int ret = av_timecode_init_from_string(&tc, rate, tcstr, s);
+ ret = av_timecode_init_from_string(&tc, rate, tcstr, s);
if (ret < 0)
return ret;