From 32c8359093d1ff4f45ed19518b449b3ac3769d27 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 19 Mar 2016 21:45:24 +0100 Subject: [PATCH] lavc: export the timestamps when decoding in AVFrame.pts Currently it's exported as AVFrame.pkt_pts, which is also the only use for that field. The reason it is done like this is that lavc used to export various codec-specific "timing" information in AVFrame.pts, which is not done anymore. Since it is confusing to the callers to have a separate field which is used only for decoder timestamps and nothing else, deprecate pkt_pts and use just AVFrame.pts everywhere. --- doc/APIchanges | 4 ++++ libavcodec/libschroedingerdec.c | 7 ++++++- libavcodec/mmaldec.c | 7 ++++++- libavcodec/qsvdec.c | 7 ++++++- libavcodec/utils.c | 10 ++++++++++ libavcodec/version.h | 2 +- libavutil/frame.c | 4 ++++ libavutil/frame.h | 4 ++++ libavutil/version.h | 3 +++ 9 files changed, 44 insertions(+), 4 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 74316ed7c1..1caa1b7575 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -13,6 +13,10 @@ libavutil: 2015-08-28 API changes, most recent first: +2016-xx-xx - xxxxxxx - lavc 57.24.0 - avcodec.h + Decoders now export the frame timestamp as AVFrame.pts. It was + previously exported as AVFrame.pkt_pts, which is now deprecated. + 2016-xx-xx - xxxxxxx - lavu 55.16.0 - hwcontext.h hwcontext_qsv.h Add AV_HWDEVICE_TYPE_QSV and a new installed header with QSV-specific hwcontext definitions. diff --git a/libavcodec/libschroedingerdec.c b/libavcodec/libschroedingerdec.c index fb0781ed5c..f173f92f04 100644 --- a/libavcodec/libschroedingerdec.c +++ b/libavcodec/libschroedingerdec.c @@ -326,7 +326,12 @@ static int libschroedinger_decode_frame(AVCodecContext *avctx, framewithpts->frame->components[2].length); /* Fill frame with current buffer data from Schroedinger. */ - avframe->pkt_pts = framewithpts->pts; + avframe->pts = framewithpts->pts; +#if FF_API_PKT_PTS +FF_DISABLE_DEPRECATION_WARNINGS + avframe->pkt_pts = avframe->pts; +FF_ENABLE_DEPRECATION_WARNINGS +#endif avframe->linesize[0] = framewithpts->frame->components[0].stride; avframe->linesize[1] = framewithpts->frame->components[1].stride; avframe->linesize[2] = framewithpts->frame->components[2].stride; diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c index 193df7e07d..69258a2eb6 100644 --- a/libavcodec/mmaldec.c +++ b/libavcodec/mmaldec.c @@ -631,7 +631,12 @@ static int ffmal_copy_frame(AVCodecContext *avctx, AVFrame *frame, avctx->pix_fmt, avctx->width, avctx->height); } - frame->pkt_pts = buffer->pts == MMAL_TIME_UNKNOWN ? AV_NOPTS_VALUE : buffer->pts; + frame->pts = buffer->pts == MMAL_TIME_UNKNOWN ? AV_NOPTS_VALUE : buffer->pts; +#if FF_API_PKT_PTS +FF_DISABLE_DEPRECATION_WARNINGS + frame->pkt_pts = frame->pts; +FF_ENABLE_DEPRECATION_WARNINGS +#endif frame->pkt_dts = AV_NOPTS_VALUE; done: diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index ac7a1e60b9..0215761335 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -352,7 +352,12 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q, outsurf = out_frame->surface; - frame->pkt_pts = frame->pts = outsurf->Data.TimeStamp; +#if FF_API_PKT_PTS +FF_DISABLE_DEPRECATION_WARNINGS + frame->pkt_pts = outsurf->Data.TimeStamp; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + frame->pts = outsurf->Data.TimeStamp; frame->repeat_pict = outsurf->Info.PicStruct & MFX_PICSTRUCT_FRAME_TRIPLING ? 4 : diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 8f8efecbea..bc1beee462 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -551,11 +551,21 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) frame->reordered_opaque = avctx->reordered_opaque; if (!pkt) { +#if FF_API_PKT_PTS +FF_DISABLE_DEPRECATION_WARNINGS frame->pkt_pts = AV_NOPTS_VALUE; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + frame->pts = AV_NOPTS_VALUE; return 0; } +#if FF_API_PKT_PTS +FF_DISABLE_DEPRECATION_WARNINGS frame->pkt_pts = pkt->pts; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + frame->pts = pkt->pts; for (i = 0; i < FF_ARRAY_ELEMS(sd); i++) { int size; diff --git a/libavcodec/version.h b/libavcodec/version.h index 9b495e9a44..3b154f84e3 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,7 +28,7 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 57 -#define LIBAVCODEC_VERSION_MINOR 23 +#define LIBAVCODEC_VERSION_MINOR 24 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ diff --git a/libavutil/frame.c b/libavutil/frame.c index ae80cee062..1c14f5f03f 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -397,7 +397,11 @@ int av_frame_copy_props(AVFrame *dst, const AVFrame *src) dst->palette_has_changed = src->palette_has_changed; dst->sample_rate = src->sample_rate; dst->opaque = src->opaque; +#if FF_API_PKT_PTS +FF_DISABLE_DEPRECATION_WARNINGS dst->pkt_pts = src->pkt_pts; +FF_ENABLE_DEPRECATION_WARNINGS +#endif dst->pkt_dts = src->pkt_dts; dst->reordered_opaque = src->reordered_opaque; dst->quality = src->quality; diff --git a/libavutil/frame.h b/libavutil/frame.h index 7c55225a45..12624d797f 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -210,10 +210,14 @@ typedef struct AVFrame { */ int64_t pts; +#if FF_API_PKT_PTS /** * PTS copied from the AVPacket that was decoded to produce this frame. + * @deprecated use the pts field instead */ + attribute_deprecated int64_t pkt_pts; +#endif /** * DTS copied from the AVPacket that triggered returning this frame. diff --git a/libavutil/version.h b/libavutil/version.h index d13794cc50..40745da216 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -102,6 +102,9 @@ #ifndef FF_API_VAAPI #define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 56) #endif +#ifndef FF_API_PKT_PTS +#define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 56) +#endif /**