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