Commit 4acdbb1c authored by James Almer's avatar James Almer

avformat/oggenc: always use the time base stored in the theora header

Fixes ticket #5704
Reviewed-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
Signed-off-by: 's avatarJames Almer <jamrial@gmail.com>
parent 9157ac2f
...@@ -533,6 +533,14 @@ static int ogg_write_header(AVFormatContext *s) ...@@ -533,6 +533,14 @@ static int ogg_write_header(AVFormatContext *s)
bytestream_put_buffer(&p, cstr, 6); bytestream_put_buffer(&p, cstr, 6);
if (st->codecpar->codec_id == AV_CODEC_ID_THEORA) { if (st->codecpar->codec_id == AV_CODEC_ID_THEORA) {
int den = AV_RB32(oggstream->header[0] + 22), num = AV_RB32(oggstream->header[0] + 26);
/* Make sure to use time base stored in the Theora stream header to write
correct timestamps */
if (st->time_base.num != num || st->time_base.den != den) {
av_log(s, AV_LOG_DEBUG, "Changing time base from %d/%d to %d/%d\n",
st->time_base.num, st->time_base.den, num, den);
avpriv_set_pts_info(st, 64, num, den);
}
/** KFGSHIFT is the width of the less significant section of the granule position /** KFGSHIFT is the width of the less significant section of the granule position
The less significant section is the frame count since the last keyframe */ The less significant section is the frame count since the last keyframe */
oggstream->kfgshift = ((oggstream->header[0][40]&3)<<3)|(oggstream->header[0][41]>>5); oggstream->kfgshift = ((oggstream->header[0][40]&3)<<3)|(oggstream->header[0][41]>>5);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment