Commit fee484ed authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'ad0c9f2d'

* commit 'ad0c9f2d':
  lavc: move AVFrame.hwaccel_picture_private to Picture.

Conflicts:
	libavcodec/avcodec.h
	libavcodec/mpegvideo.h
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents d9d97f9b ad0c9f2d
...@@ -1410,12 +1410,12 @@ typedef struct AVFrame { ...@@ -1410,12 +1410,12 @@ typedef struct AVFrame {
*/ */
int64_t reordered_opaque; int64_t reordered_opaque;
#if FF_API_AVFRAME_LAVC
/** /**
* hardware accelerator private data (FFmpeg-allocated) * @deprecated this field is unused
* - encoding: unused
* - decoding: Set by libavcodec
*/ */
void *hwaccel_picture_private; attribute_deprecated void *hwaccel_picture_private;
#endif
/** /**
* the AVCodecContext which ff_thread_get_buffer() was last called on * the AVCodecContext which ff_thread_get_buffer() was last called on
......
...@@ -278,7 +278,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, ...@@ -278,7 +278,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx,
const unsigned mb_count = h->mb_width * h->mb_height; const unsigned mb_count = h->mb_width * h->mb_height;
struct dxva_context *ctx = avctx->hwaccel_context; struct dxva_context *ctx = avctx->hwaccel_context;
const Picture *current_picture = h->cur_pic_ptr; const Picture *current_picture = h->cur_pic_ptr;
struct dxva2_picture_context *ctx_pic = current_picture->f.hwaccel_picture_private; struct dxva2_picture_context *ctx_pic = current_picture->hwaccel_picture_private;
DXVA_Slice_H264_Short *slice = NULL; DXVA_Slice_H264_Short *slice = NULL;
uint8_t *dxva_data, *current, *end; uint8_t *dxva_data, *current, *end;
unsigned dxva_size; unsigned dxva_size;
...@@ -373,7 +373,7 @@ static int dxva2_h264_start_frame(AVCodecContext *avctx, ...@@ -373,7 +373,7 @@ static int dxva2_h264_start_frame(AVCodecContext *avctx,
{ {
const H264Context *h = avctx->priv_data; const H264Context *h = avctx->priv_data;
struct dxva_context *ctx = avctx->hwaccel_context; struct dxva_context *ctx = avctx->hwaccel_context;
struct dxva2_picture_context *ctx_pic = h->cur_pic_ptr->f.hwaccel_picture_private; struct dxva2_picture_context *ctx_pic = h->cur_pic_ptr->hwaccel_picture_private;
if (!ctx->decoder || !ctx->cfg || ctx->surface_count <= 0) if (!ctx->decoder || !ctx->cfg || ctx->surface_count <= 0)
return -1; return -1;
...@@ -398,7 +398,7 @@ static int dxva2_h264_decode_slice(AVCodecContext *avctx, ...@@ -398,7 +398,7 @@ static int dxva2_h264_decode_slice(AVCodecContext *avctx,
const H264Context *h = avctx->priv_data; const H264Context *h = avctx->priv_data;
struct dxva_context *ctx = avctx->hwaccel_context; struct dxva_context *ctx = avctx->hwaccel_context;
const Picture *current_picture = h->cur_pic_ptr; const Picture *current_picture = h->cur_pic_ptr;
struct dxva2_picture_context *ctx_pic = current_picture->f.hwaccel_picture_private; struct dxva2_picture_context *ctx_pic = current_picture->hwaccel_picture_private;
unsigned position; unsigned position;
if (ctx_pic->slice_count >= MAX_SLICES) if (ctx_pic->slice_count >= MAX_SLICES)
...@@ -426,7 +426,7 @@ static int dxva2_h264_end_frame(AVCodecContext *avctx) ...@@ -426,7 +426,7 @@ static int dxva2_h264_end_frame(AVCodecContext *avctx)
{ {
H264Context *h = avctx->priv_data; H264Context *h = avctx->priv_data;
struct dxva2_picture_context *ctx_pic = struct dxva2_picture_context *ctx_pic =
h->cur_pic_ptr->f.hwaccel_picture_private; h->cur_pic_ptr->hwaccel_picture_private;
int ret; int ret;
if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0) if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0)
......
...@@ -151,7 +151,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, ...@@ -151,7 +151,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx,
const struct MpegEncContext *s = avctx->priv_data; const struct MpegEncContext *s = avctx->priv_data;
struct dxva_context *ctx = avctx->hwaccel_context; struct dxva_context *ctx = avctx->hwaccel_context;
struct dxva2_picture_context *ctx_pic = struct dxva2_picture_context *ctx_pic =
s->current_picture_ptr->f.hwaccel_picture_private; s->current_picture_ptr->hwaccel_picture_private;
const int is_field = s->picture_structure != PICT_FRAME; const int is_field = s->picture_structure != PICT_FRAME;
const unsigned mb_count = s->mb_width * (s->mb_height >> is_field); const unsigned mb_count = s->mb_width * (s->mb_height >> is_field);
uint8_t *dxva_data, *current, *end; uint8_t *dxva_data, *current, *end;
...@@ -210,7 +210,7 @@ static int dxva2_mpeg2_start_frame(AVCodecContext *avctx, ...@@ -210,7 +210,7 @@ static int dxva2_mpeg2_start_frame(AVCodecContext *avctx,
const struct MpegEncContext *s = avctx->priv_data; const struct MpegEncContext *s = avctx->priv_data;
struct dxva_context *ctx = avctx->hwaccel_context; struct dxva_context *ctx = avctx->hwaccel_context;
struct dxva2_picture_context *ctx_pic = struct dxva2_picture_context *ctx_pic =
s->current_picture_ptr->f.hwaccel_picture_private; s->current_picture_ptr->hwaccel_picture_private;
if (!ctx->decoder || !ctx->cfg || ctx->surface_count <= 0) if (!ctx->decoder || !ctx->cfg || ctx->surface_count <= 0)
return -1; return -1;
...@@ -230,7 +230,7 @@ static int dxva2_mpeg2_decode_slice(AVCodecContext *avctx, ...@@ -230,7 +230,7 @@ static int dxva2_mpeg2_decode_slice(AVCodecContext *avctx,
{ {
const struct MpegEncContext *s = avctx->priv_data; const struct MpegEncContext *s = avctx->priv_data;
struct dxva2_picture_context *ctx_pic = struct dxva2_picture_context *ctx_pic =
s->current_picture_ptr->f.hwaccel_picture_private; s->current_picture_ptr->hwaccel_picture_private;
unsigned position; unsigned position;
if (ctx_pic->slice_count >= MAX_SLICES) if (ctx_pic->slice_count >= MAX_SLICES)
...@@ -250,7 +250,7 @@ static int dxva2_mpeg2_end_frame(AVCodecContext *avctx) ...@@ -250,7 +250,7 @@ static int dxva2_mpeg2_end_frame(AVCodecContext *avctx)
{ {
struct MpegEncContext *s = avctx->priv_data; struct MpegEncContext *s = avctx->priv_data;
struct dxva2_picture_context *ctx_pic = struct dxva2_picture_context *ctx_pic =
s->current_picture_ptr->f.hwaccel_picture_private; s->current_picture_ptr->hwaccel_picture_private;
int ret; int ret;
if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0) if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0)
......
...@@ -162,7 +162,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, ...@@ -162,7 +162,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx,
const VC1Context *v = avctx->priv_data; const VC1Context *v = avctx->priv_data;
struct dxva_context *ctx = avctx->hwaccel_context; struct dxva_context *ctx = avctx->hwaccel_context;
const MpegEncContext *s = &v->s; const MpegEncContext *s = &v->s;
struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->f.hwaccel_picture_private; struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->hwaccel_picture_private;
DXVA_SliceInfo *slice = &ctx_pic->si; DXVA_SliceInfo *slice = &ctx_pic->si;
...@@ -217,7 +217,7 @@ static int dxva2_vc1_start_frame(AVCodecContext *avctx, ...@@ -217,7 +217,7 @@ static int dxva2_vc1_start_frame(AVCodecContext *avctx,
{ {
const VC1Context *v = avctx->priv_data; const VC1Context *v = avctx->priv_data;
struct dxva_context *ctx = avctx->hwaccel_context; struct dxva_context *ctx = avctx->hwaccel_context;
struct dxva2_picture_context *ctx_pic = v->s.current_picture_ptr->f.hwaccel_picture_private; struct dxva2_picture_context *ctx_pic = v->s.current_picture_ptr->hwaccel_picture_private;
if (!ctx->decoder || !ctx->cfg || ctx->surface_count <= 0) if (!ctx->decoder || !ctx->cfg || ctx->surface_count <= 0)
return -1; return -1;
...@@ -236,7 +236,7 @@ static int dxva2_vc1_decode_slice(AVCodecContext *avctx, ...@@ -236,7 +236,7 @@ static int dxva2_vc1_decode_slice(AVCodecContext *avctx,
{ {
const VC1Context *v = avctx->priv_data; const VC1Context *v = avctx->priv_data;
const Picture *current_picture = v->s.current_picture_ptr; const Picture *current_picture = v->s.current_picture_ptr;
struct dxva2_picture_context *ctx_pic = current_picture->f.hwaccel_picture_private; struct dxva2_picture_context *ctx_pic = current_picture->hwaccel_picture_private;
if (ctx_pic->bitstream_size > 0) if (ctx_pic->bitstream_size > 0)
return -1; return -1;
...@@ -257,7 +257,7 @@ static int dxva2_vc1_decode_slice(AVCodecContext *avctx, ...@@ -257,7 +257,7 @@ static int dxva2_vc1_decode_slice(AVCodecContext *avctx,
static int dxva2_vc1_end_frame(AVCodecContext *avctx) static int dxva2_vc1_end_frame(AVCodecContext *avctx)
{ {
VC1Context *v = avctx->priv_data; VC1Context *v = avctx->priv_data;
struct dxva2_picture_context *ctx_pic = v->s.current_picture_ptr->f.hwaccel_picture_private; struct dxva2_picture_context *ctx_pic = v->s.current_picture_ptr->hwaccel_picture_private;
int ret; int ret;
if (ctx_pic->bitstream_size <= 0) if (ctx_pic->bitstream_size <= 0)
......
...@@ -252,7 +252,7 @@ static void free_frame_buffer(MpegEncContext *s, Picture *pic) ...@@ -252,7 +252,7 @@ static void free_frame_buffer(MpegEncContext *s, Picture *pic)
ff_thread_release_buffer(s->avctx, &pic->f); ff_thread_release_buffer(s->avctx, &pic->f);
else else
avcodec_default_release_buffer(s->avctx, &pic->f); avcodec_default_release_buffer(s->avctx, &pic->f);
av_freep(&pic->f.hwaccel_picture_private); av_freep(&pic->hwaccel_picture_private);
} }
int ff_mpv_frame_size_alloc(MpegEncContext *s, int linesize) int ff_mpv_frame_size_alloc(MpegEncContext *s, int linesize)
...@@ -288,10 +288,10 @@ static int alloc_frame_buffer(MpegEncContext *s, Picture *pic) ...@@ -288,10 +288,10 @@ static int alloc_frame_buffer(MpegEncContext *s, Picture *pic)
int r, ret; int r, ret;
if (s->avctx->hwaccel) { if (s->avctx->hwaccel) {
assert(!pic->f.hwaccel_picture_private); assert(!pic->hwaccel_picture_private);
if (s->avctx->hwaccel->priv_data_size) { if (s->avctx->hwaccel->priv_data_size) {
pic->f.hwaccel_picture_private = av_mallocz(s->avctx->hwaccel->priv_data_size); pic->hwaccel_picture_private = av_mallocz(s->avctx->hwaccel->priv_data_size);
if (!pic->f.hwaccel_picture_private) { if (!pic->hwaccel_picture_private) {
av_log(s->avctx, AV_LOG_ERROR, "alloc_frame_buffer() failed (hwaccel private data allocation)\n"); av_log(s->avctx, AV_LOG_ERROR, "alloc_frame_buffer() failed (hwaccel private data allocation)\n");
return -1; return -1;
} }
...@@ -308,7 +308,7 @@ static int alloc_frame_buffer(MpegEncContext *s, Picture *pic) ...@@ -308,7 +308,7 @@ static int alloc_frame_buffer(MpegEncContext *s, Picture *pic)
if (r < 0 || !pic->f.type || !pic->f.data[0]) { if (r < 0 || !pic->f.type || !pic->f.data[0]) {
av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed (%d %d %p)\n", av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed (%d %d %p)\n",
r, pic->f.type, pic->f.data[0]); r, pic->f.type, pic->f.data[0]);
av_freep(&pic->f.hwaccel_picture_private); av_freep(&pic->hwaccel_picture_private);
return -1; return -1;
} }
......
...@@ -146,6 +146,10 @@ typedef struct Picture{ ...@@ -146,6 +146,10 @@ typedef struct Picture{
void *owner2; ///< pointer to the context that allocated this picture void *owner2; ///< pointer to the context that allocated this picture
int needs_realloc; ///< Picture needs to be reallocated (eg due to a frame size change) int needs_realloc; ///< Picture needs to be reallocated (eg due to a frame size change)
int period_since_free; ///< "cycles" since this Picture has been freed int period_since_free; ///< "cycles" since this Picture has been freed
/**
* hardware accelerator private data
*/
void *hwaccel_picture_private;
} Picture; } Picture;
/** /**
......
...@@ -132,7 +132,9 @@ ...@@ -132,7 +132,9 @@
#ifndef FF_API_LLS_PRIVATE #ifndef FF_API_LLS_PRIVATE
#define FF_API_LLS_PRIVATE (LIBAVUTIL_VERSION_MAJOR < 53) #define FF_API_LLS_PRIVATE (LIBAVUTIL_VERSION_MAJOR < 53)
#endif #endif
#ifndef FF_API_AVFRAME_LAVC
#define FF_API_AVFRAME_LAVC (LIBAVUTIL_VERSION_MAJOR < 53)
#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