提交 32c83590 编写于 作者: A Anton Khirnov

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.
上级 ac7bfd69
...@@ -13,6 +13,10 @@ libavutil: 2015-08-28 ...@@ -13,6 +13,10 @@ libavutil: 2015-08-28
API changes, most recent first: 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 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 Add AV_HWDEVICE_TYPE_QSV and a new installed header with QSV-specific
hwcontext definitions. hwcontext definitions.
......
...@@ -326,7 +326,12 @@ static int libschroedinger_decode_frame(AVCodecContext *avctx, ...@@ -326,7 +326,12 @@ static int libschroedinger_decode_frame(AVCodecContext *avctx,
framewithpts->frame->components[2].length); framewithpts->frame->components[2].length);
/* Fill frame with current buffer data from Schroedinger. */ /* 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[0] = framewithpts->frame->components[0].stride;
avframe->linesize[1] = framewithpts->frame->components[1].stride; avframe->linesize[1] = framewithpts->frame->components[1].stride;
avframe->linesize[2] = framewithpts->frame->components[2].stride; avframe->linesize[2] = framewithpts->frame->components[2].stride;
......
...@@ -631,7 +631,12 @@ static int ffmal_copy_frame(AVCodecContext *avctx, AVFrame *frame, ...@@ -631,7 +631,12 @@ static int ffmal_copy_frame(AVCodecContext *avctx, AVFrame *frame,
avctx->pix_fmt, avctx->width, avctx->height); 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; frame->pkt_dts = AV_NOPTS_VALUE;
done: done:
......
...@@ -352,7 +352,12 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q, ...@@ -352,7 +352,12 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q,
outsurf = out_frame->surface; 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 = frame->repeat_pict =
outsurf->Info.PicStruct & MFX_PICSTRUCT_FRAME_TRIPLING ? 4 : outsurf->Info.PicStruct & MFX_PICSTRUCT_FRAME_TRIPLING ? 4 :
......
...@@ -551,11 +551,21 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) ...@@ -551,11 +551,21 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
frame->reordered_opaque = avctx->reordered_opaque; frame->reordered_opaque = avctx->reordered_opaque;
if (!pkt) { if (!pkt) {
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
frame->pkt_pts = AV_NOPTS_VALUE; frame->pkt_pts = AV_NOPTS_VALUE;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
frame->pts = AV_NOPTS_VALUE;
return 0; return 0;
} }
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
frame->pkt_pts = pkt->pts; frame->pkt_pts = pkt->pts;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
frame->pts = pkt->pts;
for (i = 0; i < FF_ARRAY_ELEMS(sd); i++) { for (i = 0; i < FF_ARRAY_ELEMS(sd); i++) {
int size; int size;
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include "libavutil/version.h" #include "libavutil/version.h"
#define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MAJOR 57
#define LIBAVCODEC_VERSION_MINOR 23 #define LIBAVCODEC_VERSION_MINOR 24
#define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
......
...@@ -397,7 +397,11 @@ int av_frame_copy_props(AVFrame *dst, const AVFrame *src) ...@@ -397,7 +397,11 @@ int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
dst->palette_has_changed = src->palette_has_changed; dst->palette_has_changed = src->palette_has_changed;
dst->sample_rate = src->sample_rate; dst->sample_rate = src->sample_rate;
dst->opaque = src->opaque; dst->opaque = src->opaque;
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
dst->pkt_pts = src->pkt_pts; dst->pkt_pts = src->pkt_pts;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
dst->pkt_dts = src->pkt_dts; dst->pkt_dts = src->pkt_dts;
dst->reordered_opaque = src->reordered_opaque; dst->reordered_opaque = src->reordered_opaque;
dst->quality = src->quality; dst->quality = src->quality;
......
...@@ -210,10 +210,14 @@ typedef struct AVFrame { ...@@ -210,10 +210,14 @@ typedef struct AVFrame {
*/ */
int64_t pts; int64_t pts;
#if FF_API_PKT_PTS
/** /**
* PTS copied from the AVPacket that was decoded to produce this frame. * PTS copied from the AVPacket that was decoded to produce this frame.
* @deprecated use the pts field instead
*/ */
attribute_deprecated
int64_t pkt_pts; int64_t pkt_pts;
#endif
/** /**
* DTS copied from the AVPacket that triggered returning this frame. * DTS copied from the AVPacket that triggered returning this frame.
......
...@@ -102,6 +102,9 @@ ...@@ -102,6 +102,9 @@
#ifndef FF_API_VAAPI #ifndef FF_API_VAAPI
#define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 56) #define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 56)
#endif #endif
#ifndef FF_API_PKT_PTS
#define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 56)
#endif
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册