When mov_create_timecode_track function is executed, track->st->avg_frame_rate becomes inverted due to track->st->avg_frame_rate = av_inv_q(rate);
, where "rate" is frame per second here. I didn't find any obvious negative effect of this operation, but this may lead to some misunderstanding. In particular, it's hard to say why number of frames per second could be calculated as nb_frames = ROUNDED_DIV(track->st->avg_frame_rate.den, track->st->avg_frame_rate.num); --- libavformat/movenc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index fea8a86192..e06c902c84 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -2352,8 +2352,8 @@ static int mov_write_tmcd_tag(AVIOContext *pb, MOVTrack *track) return AVERROR(EINVAL); #endif } else { - frame_duration = av_rescale(track->timescale, track->st->avg_frame_rate.num, track->st->avg_frame_rate.den); - nb_frames = ROUNDED_DIV(track->st->avg_frame_rate.den, track->st->avg_frame_rate.num); + frame_duration = av_rescale(track->timescale, track->st->avg_frame_rate.den, track->st->avg_frame_rate.num); + nb_frames = ROUNDED_DIV(track->st->avg_frame_rate.num, track->st->avg_frame_rate.den); } if (nb_frames > 255) { @@ -6190,7 +6190,7 @@ static int mov_create_timecode_track(AVFormatContext *s, int index, int src_inde return AVERROR(ENOMEM); track->par->codec_type = AVMEDIA_TYPE_DATA; track->par->codec_tag = track->tag; - track->st->avg_frame_rate = av_inv_q(rate); + track->st->avg_frame_rate = rate; /* the tmcd track just contains one packet with the frame number */ AV_WB32(pkt.data, tc.start); -- 2.28.0.windows.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".