diff options
Diffstat (limited to 'contrib/ffmpeg/libavformat/gxfenc.c')
-rw-r--r-- | contrib/ffmpeg/libavformat/gxfenc.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/contrib/ffmpeg/libavformat/gxfenc.c b/contrib/ffmpeg/libavformat/gxfenc.c index fef5ec104..39b9ed3e1 100644 --- a/contrib/ffmpeg/libavformat/gxfenc.c +++ b/contrib/ffmpeg/libavformat/gxfenc.c @@ -15,7 +15,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software + * along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -85,7 +85,7 @@ static const GXF_Lines gxf_lines_tab[] = { { 720, 6 }, }; -static const CodecTag gxf_media_types[] = { +static const AVCodecTag gxf_media_types[] = { { CODEC_ID_MJPEG , 3 }, /* NTSC */ { CODEC_ID_MJPEG , 4 }, /* PAL */ { CODEC_ID_PCM_S24LE , 9 }, @@ -572,6 +572,8 @@ static int gxf_write_umf_packet(ByteIOContext *pb, GXFContext *ctx) return updatePacketSize(pb, pos); } +#define GXF_NODELAY -5000 + static int gxf_write_header(AVFormatContext *s) { ByteIOContext *pb = &s->pb; @@ -623,7 +625,8 @@ static int gxf_write_header(AVFormatContext *s) 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_parse_mpeg_frame(GXFStreamContext *sc, const uint8_t *buf, int si 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 @@ static int gxf_interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *pk 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; } } |