diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index 673c4e865c..617dcb9f18 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -1494,16 +1494,17 @@ end: static int mpeg4_decode_gop_header(MpegEncContext * s, GetBitContext *gb){ int hours, minutes, seconds; + unsigned time_code = show_bits(gb, 18); - hours= get_bits(gb, 5); - minutes= get_bits(gb, 6); - skip_bits1(gb); - seconds= get_bits(gb, 6); - - s->time_base= seconds + 60*(minutes + 60*hours); - - skip_bits1(gb); - skip_bits1(gb); + if (time_code & 0x40) { /* marker_bit */ + hours = time_code >> 13; + minutes = time_code >> 7 & 0x3f; + seconds = time_code & 0x3f; + s->time_base = seconds + 60*(minutes + 60*hours); + skip_bits(gb, 20); /* time_code, closed_gov, broken_link */ + } else { + av_log(s->avctx, AV_LOG_WARNING, "GOP header missing marker_bit\n"); + } return 0; }