mirror of https://git.ffmpeg.org/ffmpeg.git
set stream time_base properly
Originally committed as revision 5367 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
b8d10977f4
commit
3644cb8ff9
|
@ -432,15 +432,11 @@ ogg_gptopts (AVFormatContext * s, int i, uint64_t gp)
|
||||||
{
|
{
|
||||||
ogg_t *ogg = s->priv_data;
|
ogg_t *ogg = s->priv_data;
|
||||||
ogg_stream_t *os = ogg->streams + i;
|
ogg_stream_t *os = ogg->streams + i;
|
||||||
AVStream *st = s->streams[i];
|
|
||||||
AVCodecContext *codec = st->codec;
|
|
||||||
uint64_t pts = AV_NOPTS_VALUE;
|
uint64_t pts = AV_NOPTS_VALUE;
|
||||||
|
|
||||||
if(os->codec->gptopts){
|
if(os->codec->gptopts){
|
||||||
pts = os->codec->gptopts(s, i, gp);
|
pts = os->codec->gptopts(s, i, gp);
|
||||||
} else if (codec->codec_type == CODEC_TYPE_AUDIO){
|
} else {
|
||||||
pts = gp * 1000000LL / codec->sample_rate;
|
|
||||||
}else if (codec->codec_type == CODEC_TYPE_VIDEO){
|
|
||||||
pts = gp;
|
pts = gp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,9 @@ flac_header (AVFormatContext * s, int idx)
|
||||||
memcpy (st->codec->extradata, os->buf + os->pstart + 5 + 4 + 4 + 4,
|
memcpy (st->codec->extradata, os->buf + os->pstart + 5 + 4 + 4 + 4,
|
||||||
FLAC_STREAMINFO_SIZE);
|
FLAC_STREAMINFO_SIZE);
|
||||||
st->codec->extradata_size = FLAC_STREAMINFO_SIZE;
|
st->codec->extradata_size = FLAC_STREAMINFO_SIZE;
|
||||||
|
|
||||||
|
st->time_base.num = 1;
|
||||||
|
st->time_base.den = st->codec->sample_rate;
|
||||||
} else if (mdt == 4) {
|
} else if (mdt == 4) {
|
||||||
vorbis_comment (s, os->buf + os->pstart + 4, os->psize - 4);
|
vorbis_comment (s, os->buf + os->pstart + 4, os->psize - 4);
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,9 +48,12 @@ ogm_header(AVFormatContext *s, int idx)
|
||||||
p++;
|
p++;
|
||||||
|
|
||||||
if(*p == 'v'){
|
if(*p == 'v'){
|
||||||
|
int tag;
|
||||||
st->codec->codec_type = CODEC_TYPE_VIDEO;
|
st->codec->codec_type = CODEC_TYPE_VIDEO;
|
||||||
p += 8;
|
p += 8;
|
||||||
st->codec->codec_id = codec_get_bmp_id(le2me_32(unaligned32(p)));
|
tag = le2me_32(unaligned32(p));
|
||||||
|
st->codec->codec_id = codec_get_bmp_id(tag);
|
||||||
|
st->codec->codec_tag = tag;
|
||||||
} else {
|
} else {
|
||||||
int cid;
|
int cid;
|
||||||
st->codec->codec_type = CODEC_TYPE_AUDIO;
|
st->codec->codec_type = CODEC_TYPE_AUDIO;
|
||||||
|
@ -85,6 +88,8 @@ ogm_header(AVFormatContext *s, int idx)
|
||||||
p += 2; /* block_align */
|
p += 2; /* block_align */
|
||||||
st->codec->bit_rate = le2me_32(unaligned32(p)) * 8;
|
st->codec->bit_rate = le2me_32(unaligned32(p)) * 8;
|
||||||
st->codec->sample_rate = spu * 10000000 / time_unit;
|
st->codec->sample_rate = spu * 10000000 / time_unit;
|
||||||
|
st->time_base.num = 1;
|
||||||
|
st->time_base.den = st->codec->sample_rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -79,6 +79,7 @@ theora_header (AVFormatContext * s, int idx)
|
||||||
skip_bits(&gb, 64);
|
skip_bits(&gb, 64);
|
||||||
st->codec->time_base.den = get_bits(&gb, 32);
|
st->codec->time_base.den = get_bits(&gb, 32);
|
||||||
st->codec->time_base.num = get_bits(&gb, 32);
|
st->codec->time_base.num = get_bits(&gb, 32);
|
||||||
|
st->time_base = st->codec->time_base;
|
||||||
|
|
||||||
st->codec->sample_aspect_ratio.num = get_bits(&gb, 24);
|
st->codec->sample_aspect_ratio.num = get_bits(&gb, 24);
|
||||||
st->codec->sample_aspect_ratio.den = get_bits(&gb, 24);
|
st->codec->sample_aspect_ratio.den = get_bits(&gb, 24);
|
||||||
|
@ -111,15 +112,13 @@ theora_header (AVFormatContext * s, int idx)
|
||||||
static uint64_t
|
static uint64_t
|
||||||
theora_gptopts(AVFormatContext *ctx, int idx, uint64_t gp)
|
theora_gptopts(AVFormatContext *ctx, int idx, uint64_t gp)
|
||||||
{
|
{
|
||||||
AVStream *st = ctx->streams[idx];
|
|
||||||
ogg_t *ogg = ctx->priv_data;
|
ogg_t *ogg = ctx->priv_data;
|
||||||
ogg_stream_t *os = ogg->streams + idx;
|
ogg_stream_t *os = ogg->streams + idx;
|
||||||
theora_params_t *thp = os->private;
|
theora_params_t *thp = os->private;
|
||||||
uint64_t iframe = gp >> thp->gpshift;
|
uint64_t iframe = gp >> thp->gpshift;
|
||||||
uint64_t pframe = gp & thp->gpmask;
|
uint64_t pframe = gp & thp->gpmask;
|
||||||
|
|
||||||
return (iframe + pframe) * AV_TIME_BASE * st->codec->time_base.num /
|
return iframe + pframe;
|
||||||
st->codec->time_base.den;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ogg_codec_t theora_codec = {
|
ogg_codec_t theora_codec = {
|
||||||
|
|
|
@ -186,6 +186,8 @@ vorbis_header (AVFormatContext * s, int idx)
|
||||||
st->codec->codec_type = CODEC_TYPE_AUDIO;
|
st->codec->codec_type = CODEC_TYPE_AUDIO;
|
||||||
st->codec->codec_id = CODEC_ID_VORBIS;
|
st->codec->codec_id = CODEC_ID_VORBIS;
|
||||||
|
|
||||||
|
st->time_base.num = 1;
|
||||||
|
st->time_base.den = st->codec->sample_rate;
|
||||||
} else if (os->buf[os->pstart] == 3) {
|
} else if (os->buf[os->pstart] == 3) {
|
||||||
vorbis_comment (s, os->buf + os->pstart + 7, os->psize - 8);
|
vorbis_comment (s, os->buf + os->pstart + 7, os->psize - 8);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue