mirror of https://git.ffmpeg.org/ffmpeg.git
libavformat/mov.c: Handle timecode from tmcd atom in counter mode
When the timecode value is in counter mode then it is important to use the timescale and frameduration to calculate the timecode fps. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
0982077be5
commit
47372caac5
|
@ -1658,6 +1658,13 @@ static int mov_parse_stsd_data(MOVContext *c, AVIOContext *pb,
|
||||||
st->codec->flags2 |= CODEC_FLAG2_DROP_FRAME_TIMECODE;
|
st->codec->flags2 |= CODEC_FLAG2_DROP_FRAME_TIMECODE;
|
||||||
st->codec->time_base.den = st->codec->extradata[16]; /* number of frame */
|
st->codec->time_base.den = st->codec->extradata[16]; /* number of frame */
|
||||||
st->codec->time_base.num = 1;
|
st->codec->time_base.num = 1;
|
||||||
|
/* adjust for per frame dur in counter mode */
|
||||||
|
if (tmcd_ctx->tmcd_flags & 0x0008) {
|
||||||
|
int timescale = AV_RB32(st->codec->extradata + 8);
|
||||||
|
int framedur = AV_RB32(st->codec->extradata + 12);
|
||||||
|
st->codec->time_base.den *= timescale;
|
||||||
|
st->codec->time_base.num *= framedur;
|
||||||
|
}
|
||||||
if (size > 30) {
|
if (size > 30) {
|
||||||
uint32_t len = AV_RB32(st->codec->extradata + 18); /* name atom length */
|
uint32_t len = AV_RB32(st->codec->extradata + 18); /* name atom length */
|
||||||
uint32_t format = AV_RB32(st->codec->extradata + 22);
|
uint32_t format = AV_RB32(st->codec->extradata + 22);
|
||||||
|
|
Loading…
Reference in New Issue