Mercurial > libavformat.hg
changeset 1794:11c57b75bccd libavformat
fix dts adjusting
author | bcoudurier |
---|---|
date | Wed, 14 Feb 2007 14:54:20 +0000 |
parents | 951d219ab67b |
children | 62792a60f740 |
files | gxfenc.c |
diffstat | 1 files changed, 8 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/gxfenc.c Wed Feb 14 13:25:24 2007 +0000 +++ b/gxfenc.c Wed Feb 14 14:54:20 2007 +0000 @@ -572,6 +572,8 @@ return updatePacketSize(pb, pos); } +#define GXF_NODELAY -5000 + static int gxf_write_header(AVFormatContext *s) { ByteIOContext *pb = &s->pb; @@ -623,7 +625,8 @@ gxf->flags |= 0x00000040; } gxf->sample_rate = sc->sample_rate; - av_set_pts_info(st, 64, 1, sc->sample_rate); + av_set_pts_info(st, 64, 1, st->codec->time_base.den); + sc->dts_delay = GXF_NODELAY; if (gxf_find_lines_index(sc) < 0) sc->lines_index = -1; sc->sample_size = st->codec->bit_rate; @@ -707,7 +710,7 @@ static int gxf_write_media_preamble(ByteIOContext *pb, GXFContext *ctx, AVPacket *pkt, int size) { GXFStreamContext *sc = &ctx->streams[pkt->stream_index]; - int64_t dts = av_rescale(pkt->dts, ctx->sample_rate, sc->sample_rate); + int64_t dts = av_rescale(pkt->dts, ctx->sample_rate, sc->codec->time_base.den); put_byte(pb, sc->media_type); put_byte(pb, sc->index); @@ -799,13 +802,9 @@ break; /* add pkt right now into list */ } } - } else if (pkt) { - /* adjust dts if negative */ - if (pkt->dts < 0 && !sc->dts_delay) { - /* XXX: rescale if codec time base is different from stream time base */ - sc->dts_delay = av_rescale_q(pkt->dts, st->codec->time_base, st->time_base); - pkt->dts = sc->dts_delay; /* set to 0 */ - } + } else if (pkt && pkt->stream_index == i) { + if (sc->dts_delay == GXF_NODELAY) /* adjust dts if needed */ + sc->dts_delay = pkt->dts; pkt->dts -= sc->dts_delay; } }