From fc385baf021921d478e23f5a12c5e0d9f27e5368 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 10 May 2014 10:32:23 +0200 Subject: [PATCH] encode: fix PTS unit mismatch This used MP_NOPTS_VALUE to compare with ffmpeg-style int64_t PTS values. This probably happened to work, because both constants use the same value. --- audio/out/ao_lavc.c | 10 +++++----- video/out/vo_lavc.c | 12 ++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/audio/out/ao_lavc.c b/audio/out/ao_lavc.c index a72e389ac9..0bfe2eb9cb 100644 --- a/audio/out/ao_lavc.c +++ b/audio/out/ao_lavc.c @@ -166,8 +166,8 @@ static int init(struct ao *ao) // but at least one! ac->framecount = FFMAX(ac->framecount, 1); - ac->savepts = MP_NOPTS_VALUE; - ac->lastpts = MP_NOPTS_VALUE; + ac->savepts = AV_NOPTS_VALUE; + ac->lastpts = AV_NOPTS_VALUE; ao->untimed = true; @@ -251,7 +251,7 @@ static int encode(struct ao *ao, double apts, void **data) } int64_t frame_pts = av_rescale_q(frame->pts, ac->stream->codec->time_base, ac->worst_time_base); - if (ac->lastpts != MP_NOPTS_VALUE && frame_pts <= ac->lastpts) { + if (ac->lastpts != AV_NOPTS_VALUE && frame_pts <= ac->lastpts) { // this indicates broken video // (video pts failing to increase fast enough to match audio) MP_WARN(ao, "audio frame pts went backwards (%d <- %d), autofixed\n", @@ -265,7 +265,7 @@ static int encode(struct ao *ao, double apts, void **data) status = avcodec_encode_audio2(ac->stream->codec, &packet, frame, &gotpacket); if (!status) { - if (ac->savepts == MP_NOPTS_VALUE) + if (ac->savepts == AV_NOPTS_VALUE) ac->savepts = frame->pts; } @@ -310,7 +310,7 @@ static int encode(struct ao *ao, double apts, void **data) packet.duration = av_rescale_q(packet.duration, ac->stream->codec->time_base, ac->stream->time_base); - ac->savepts = MP_NOPTS_VALUE; + ac->savepts = AV_NOPTS_VALUE; if (encode_lavc_write_frame(ao->encode_lavc_ctx, &packet) < 0) { MP_ERR(ao, "error writing at %f %f/%f\n", diff --git a/video/out/vo_lavc.c b/video/out/vo_lavc.c index 0e9ead3b3b..ed23a27066 100644 --- a/video/out/vo_lavc.c +++ b/video/out/vo_lavc.c @@ -134,9 +134,9 @@ static int reconfig(struct vo *vo, struct mp_image_params *params, int flags) goto error; } - vc->lastipts = MP_NOPTS_VALUE; - vc->lastframeipts = MP_NOPTS_VALUE; - vc->lastencodedipts = MP_NOPTS_VALUE; + vc->lastipts = AV_NOPTS_VALUE; + vc->lastframeipts = AV_NOPTS_VALUE; + vc->lastencodedipts = AV_NOPTS_VALUE; if (pix_fmt == AV_PIX_FMT_NONE) { MP_FATAL(vo, "Format %s not supported by lavc.\n", @@ -407,7 +407,7 @@ static void draw_image_unlocked(struct vo *vo, mp_image_t *mpi) } } - if (vc->lastipts != MP_NOPTS_VALUE) { + if (vc->lastipts != AV_NOPTS_VALUE) { // we have a valid image in lastimg while (vc->lastipts < frameipts) { @@ -417,7 +417,7 @@ static void draw_image_unlocked(struct vo *vo, mp_image_t *mpi) // we will ONLY encode this frame if it can be encoded at at least // vc->mindeltapts after the last encoded frame! int64_t skipframes = - (vc->lastencodedipts == MP_NOPTS_VALUE) + (vc->lastencodedipts == AV_NOPTS_VALUE) ? 0 : vc->lastencodedipts + vc->mindeltapts - vc->lastipts; if (skipframes < 0) @@ -464,7 +464,7 @@ static void draw_image_unlocked(struct vo *vo, mp_image_t *mpi) } while (size > 0); } else { if (frameipts >= vc->lastframeipts) { - if (vc->lastframeipts != MP_NOPTS_VALUE && vc->lastdisplaycount != 1) + if (vc->lastframeipts != AV_NOPTS_VALUE && vc->lastdisplaycount != 1) MP_INFO(vo, "Frame at pts %d got displayed %d times\n", (int) vc->lastframeipts, vc->lastdisplaycount); mp_image_setrefp(&vc->lastimg, mpi);