Commit 3f9137c5 authored by Hendrik Leppkes's avatar Hendrik Leppkes

Merge commit '32c83590'

* commit '32c83590':
  lavc: export the timestamps when decoding in AVFrame.pts
Merged-by: 's avatarHendrik Leppkes <h.leppkes@gmail.com>
parents 04a35772 32c83590
...@@ -15,6 +15,13 @@ libavutil: 2015-08-28 ...@@ -15,6 +15,13 @@ libavutil: 2015-08-28
API changes, most recent first: API changes, most recent first:
2016-xx-xx - xxxxxxx - lavc 57.61.100 / 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.
Note: When decoding, AVFrame.pts uses the stream/packet timebase,
and not the codec timebase.
2016-09-xx - xxxxxxx - lavu 55.32.100 / 55.16.0 - hwcontext.h hwcontext_qsv.h 2016-09-xx - xxxxxxx - lavu 55.32.100 / 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.
......
...@@ -554,7 +554,12 @@ static int ffat_decode(AVCodecContext *avctx, void *data, ...@@ -554,7 +554,12 @@ static int ffat_decode(AVCodecContext *avctx, void *data,
ffat_copy_samples(avctx, frame); ffat_copy_samples(avctx, frame);
*got_frame_ptr = 1; *got_frame_ptr = 1;
if (at->last_pts != AV_NOPTS_VALUE) { if (at->last_pts != AV_NOPTS_VALUE) {
frame->pts = at->last_pts;
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
frame->pkt_pts = at->last_pts; frame->pkt_pts = at->last_pts;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
at->last_pts = avpkt->pts; at->last_pts = avpkt->pts;
} }
} else if (ret && ret != 1) { } else if (ret && ret != 1) {
......
...@@ -707,7 +707,12 @@ static inline CopyRet copy_frame(AVCodecContext *avctx, ...@@ -707,7 +707,12 @@ static inline CopyRet copy_frame(AVCodecContext *avctx,
if (interlaced) if (interlaced)
priv->pic->top_field_first = !bottom_first; priv->pic->top_field_first = !bottom_first;
priv->pic->pts = pkt_pts;
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
priv->pic->pkt_pts = pkt_pts; priv->pic->pkt_pts = pkt_pts;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
if (!priv->need_second_field) { if (!priv->need_second_field) {
*got_frame = 1; *got_frame = 1;
......
...@@ -469,7 +469,11 @@ static int cuvid_output_frame(AVCodecContext *avctx, AVFrame *frame) ...@@ -469,7 +469,11 @@ static int cuvid_output_frame(AVCodecContext *avctx, AVFrame *frame)
/* CUVIDs opaque reordering breaks the internal pkt logic. /* CUVIDs opaque reordering breaks the internal pkt logic.
* So set pkt_pts and clear all the other pkt_ fields. * So set pkt_pts and clear all the other pkt_ fields.
*/ */
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
frame->pkt_pts = frame->pts; frame->pkt_pts = frame->pts;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
av_frame_set_pkt_pos(frame, -1); av_frame_set_pkt_pos(frame, -1);
av_frame_set_pkt_duration(frame, 0); av_frame_set_pkt_duration(frame, 0);
av_frame_set_pkt_size(frame, -1); av_frame_set_pkt_size(frame, -1);
......
...@@ -462,7 +462,11 @@ static int gif_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, A ...@@ -462,7 +462,11 @@ static int gif_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, A
bytestream2_init(&s->gb, avpkt->data, avpkt->size); bytestream2_init(&s->gb, avpkt->data, avpkt->size);
s->frame->pts = avpkt->pts; s->frame->pts = avpkt->pts;
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
s->frame->pkt_pts = avpkt->pts; s->frame->pkt_pts = avpkt->pts;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
s->frame->pkt_dts = avpkt->dts; s->frame->pkt_dts = avpkt->dts;
av_frame_set_pkt_duration(s->frame, avpkt->duration); av_frame_set_pkt_duration(s->frame, avpkt->duration);
......
...@@ -221,7 +221,11 @@ static int svc_decode_frame(AVCodecContext *avctx, void *data, ...@@ -221,7 +221,11 @@ static int svc_decode_frame(AVCodecContext *avctx, void *data,
avframe->pts = s->pkt_filtered.pts; avframe->pts = s->pkt_filtered.pts;
avframe->pkt_dts = s->pkt_filtered.dts; avframe->pkt_dts = s->pkt_filtered.dts;
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
avframe->pkt_pts = s->pkt_filtered.pts; avframe->pkt_pts = s->pkt_filtered.pts;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
*got_frame = 1; *got_frame = 1;
} }
......
...@@ -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;
......
...@@ -202,12 +202,17 @@ static int mediacodec_wrap_hw_buffer(AVCodecContext *avctx, ...@@ -202,12 +202,17 @@ static int mediacodec_wrap_hw_buffer(AVCodecContext *avctx,
frame->format = avctx->pix_fmt; frame->format = avctx->pix_fmt;
if (avctx->pkt_timebase.num && avctx->pkt_timebase.den) { if (avctx->pkt_timebase.num && avctx->pkt_timebase.den) {
frame->pkt_pts = av_rescale_q(info->presentationTimeUs, frame->pts = av_rescale_q(info->presentationTimeUs,
av_make_q(1, 1000000), av_make_q(1, 1000000),
avctx->pkt_timebase); avctx->pkt_timebase);
} else { } else {
frame->pkt_pts = info->presentationTimeUs; frame->pts = info->presentationTimeUs;
} }
#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;
buffer = av_mallocz(sizeof(AVMediaCodecBuffer)); buffer = av_mallocz(sizeof(AVMediaCodecBuffer));
...@@ -278,7 +283,12 @@ static int mediacodec_wrap_sw_buffer(AVCodecContext *avctx, ...@@ -278,7 +283,12 @@ static int mediacodec_wrap_sw_buffer(AVCodecContext *avctx,
* on the last avpacket received which is not in sync with the frame: * on the last avpacket received which is not in sync with the frame:
* * N avpackets can be pushed before 1 frame is actually returned * * N avpackets can be pushed before 1 frame is actually returned
* * 0-sized avpackets are pushed to flush remaining frames at EOS */ * * 0-sized avpackets are pushed to flush remaining frames at EOS */
frame->pts = info->presentationTimeUs;
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
frame->pkt_pts = info->presentationTimeUs; frame->pkt_pts = info->presentationTimeUs;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
frame->pkt_dts = AV_NOPTS_VALUE; frame->pkt_dts = AV_NOPTS_VALUE;
av_log(avctx, AV_LOG_DEBUG, av_log(avctx, AV_LOG_DEBUG,
......
...@@ -654,7 +654,12 @@ static int ffmal_copy_frame(AVCodecContext *avctx, AVFrame *frame, ...@@ -654,7 +654,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:
......
...@@ -443,7 +443,12 @@ static int do_qsv_decode(AVCodecContext *avctx, QSVContext *q, ...@@ -443,7 +443,12 @@ static int do_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 :
......
...@@ -768,7 +768,12 @@ int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame) ...@@ -768,7 +768,12 @@ int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame)
}; };
if (pkt) { if (pkt) {
frame->pts = pkt->pts;
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
frame->pkt_pts = pkt->pts; frame->pkt_pts = pkt->pts;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
av_frame_set_pkt_pos (frame, pkt->pos); av_frame_set_pkt_pos (frame, pkt->pos);
av_frame_set_pkt_duration(frame, pkt->duration); av_frame_set_pkt_duration(frame, pkt->duration);
av_frame_set_pkt_size (frame, pkt->size); av_frame_set_pkt_size (frame, pkt->size);
...@@ -794,7 +799,12 @@ int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame) ...@@ -794,7 +799,12 @@ int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame)
frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD); frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD);
} }
} else { } else {
frame->pts = AV_NOPTS_VALUE;
#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
av_frame_set_pkt_pos (frame, -1); av_frame_set_pkt_pos (frame, -1);
av_frame_set_pkt_duration(frame, 0); av_frame_set_pkt_duration(frame, 0);
av_frame_set_pkt_size (frame, -1); av_frame_set_pkt_size (frame, -1);
...@@ -2043,7 +2053,7 @@ int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, ...@@ -2043,7 +2053,7 @@ int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
* which case the output will as well. * which case the output will as well.
* *
* @param pts the pts field of the decoded AVPacket, as passed through * @param pts the pts field of the decoded AVPacket, as passed through
* AVFrame.pkt_pts * AVFrame.pts
* @param dts the dts field of the decoded AVPacket * @param dts the dts field of the decoded AVPacket
* @return one of the input values, may be AV_NOPTS_VALUE * @return one of the input values, may be AV_NOPTS_VALUE
*/ */
...@@ -2281,7 +2291,7 @@ fail: ...@@ -2281,7 +2291,7 @@ fail:
avctx->frame_number++; avctx->frame_number++;
av_frame_set_best_effort_timestamp(picture, av_frame_set_best_effort_timestamp(picture,
guess_correct_pts(avctx, guess_correct_pts(avctx,
picture->pkt_pts, picture->pts,
picture->pkt_dts)); picture->pkt_dts));
} else } else
av_frame_unref(picture); av_frame_unref(picture);
...@@ -2354,7 +2364,7 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, ...@@ -2354,7 +2364,7 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
avctx->frame_number++; avctx->frame_number++;
av_frame_set_best_effort_timestamp(frame, av_frame_set_best_effort_timestamp(frame,
guess_correct_pts(avctx, guess_correct_pts(avctx,
frame->pkt_pts, frame->pts,
frame->pkt_dts)); frame->pkt_dts));
if (frame->format == AV_SAMPLE_FMT_NONE) if (frame->format == AV_SAMPLE_FMT_NONE)
frame->format = avctx->sample_fmt; frame->format = avctx->sample_fmt;
...@@ -2396,8 +2406,14 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, ...@@ -2396,8 +2406,14 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
int64_t diff_ts = av_rescale_q(avctx->internal->skip_samples, int64_t diff_ts = av_rescale_q(avctx->internal->skip_samples,
(AVRational){1, avctx->sample_rate}, (AVRational){1, avctx->sample_rate},
avctx->pkt_timebase); avctx->pkt_timebase);
if(frame->pts!=AV_NOPTS_VALUE)
frame->pts += diff_ts;
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
if(frame->pkt_pts!=AV_NOPTS_VALUE) if(frame->pkt_pts!=AV_NOPTS_VALUE)
frame->pkt_pts += diff_ts; frame->pkt_pts += diff_ts;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
if(frame->pkt_dts!=AV_NOPTS_VALUE) if(frame->pkt_dts!=AV_NOPTS_VALUE)
frame->pkt_dts += diff_ts; frame->pkt_dts += diff_ts;
if (av_frame_get_pkt_duration(frame) >= diff_ts) if (av_frame_get_pkt_duration(frame) >= diff_ts)
...@@ -2874,7 +2890,7 @@ int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *fr ...@@ -2874,7 +2890,7 @@ int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *fr
if (ret >= 0) { if (ret >= 0) {
if (av_frame_get_best_effort_timestamp(frame) == AV_NOPTS_VALUE) { if (av_frame_get_best_effort_timestamp(frame) == AV_NOPTS_VALUE) {
av_frame_set_best_effort_timestamp(frame, av_frame_set_best_effort_timestamp(frame,
guess_correct_pts(avctx, frame->pkt_pts, frame->pkt_dts)); guess_correct_pts(avctx, frame->pts, frame->pkt_dts));
} }
} }
return ret; return ret;
......
...@@ -28,8 +28,8 @@ ...@@ -28,8 +28,8 @@
#include "libavutil/version.h" #include "libavutil/version.h"
#define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MAJOR 57
#define LIBAVCODEC_VERSION_MINOR 60 #define LIBAVCODEC_VERSION_MINOR 61
#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
......
...@@ -3992,7 +3992,12 @@ static int vp9_decode_frame(AVCodecContext *ctx, void *frame, ...@@ -3992,7 +3992,12 @@ static int vp9_decode_frame(AVCodecContext *ctx, void *frame,
} }
if ((res = av_frame_ref(frame, s->s.refs[ref].f)) < 0) if ((res = av_frame_ref(frame, s->s.refs[ref].f)) < 0)
return res; return res;
((AVFrame *)frame)->pts = pkt->pts;
#if FF_API_PKT_PTS
FF_DISABLE_DEPRECATION_WARNINGS
((AVFrame *)frame)->pkt_pts = pkt->pts; ((AVFrame *)frame)->pkt_pts = pkt->pts;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
((AVFrame *)frame)->pkt_dts = pkt->dts; ((AVFrame *)frame)->pkt_dts = pkt->dts;
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
if (s->next_refs[i].f->buf[0]) if (s->next_refs[i].f->buf[0])
......
...@@ -99,8 +99,12 @@ static void get_frame_defaults(AVFrame *frame) ...@@ -99,8 +99,12 @@ static void get_frame_defaults(AVFrame *frame)
memset(frame, 0, sizeof(*frame)); memset(frame, 0, sizeof(*frame));
frame->pts = frame->pts =
frame->pkt_dts = frame->pkt_dts = AV_NOPTS_VALUE;
#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->best_effort_timestamp = AV_NOPTS_VALUE; frame->best_effort_timestamp = AV_NOPTS_VALUE;
frame->pkt_duration = 0; frame->pkt_duration = 0;
frame->pkt_pos = -1; frame->pkt_pos = -1;
...@@ -295,7 +299,11 @@ static int frame_copy_props(AVFrame *dst, const AVFrame *src, int force_copy) ...@@ -295,7 +299,11 @@ static int frame_copy_props(AVFrame *dst, const AVFrame *src, int force_copy)
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->pkt_pos = src->pkt_pos; dst->pkt_pos = src->pkt_pos;
dst->pkt_size = src->pkt_size; dst->pkt_size = src->pkt_size;
......
...@@ -267,10 +267,14 @@ typedef struct AVFrame { ...@@ -267,10 +267,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. (if frame threading isn't used) * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used)
......
...@@ -132,6 +132,9 @@ ...@@ -132,6 +132,9 @@
#ifndef FF_API_CRC_BIG_TABLE #ifndef FF_API_CRC_BIG_TABLE
#define FF_API_CRC_BIG_TABLE (LIBAVUTIL_VERSION_MAJOR < 56) #define FF_API_CRC_BIG_TABLE (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% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment