diff options
Diffstat (limited to 'chromium/third_party/ffmpeg/libavcodec/dxva2_mpeg2.c')
-rw-r--r-- | chromium/third_party/ffmpeg/libavcodec/dxva2_mpeg2.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/chromium/third_party/ffmpeg/libavcodec/dxva2_mpeg2.c b/chromium/third_party/ffmpeg/libavcodec/dxva2_mpeg2.c index 1827dd526f4..5fa4424d5f8 100644 --- a/chromium/third_party/ffmpeg/libavcodec/dxva2_mpeg2.c +++ b/chromium/third_party/ffmpeg/libavcodec/dxva2_mpeg2.c @@ -20,9 +20,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/log.h" #include "dxva2_internal.h" +#include "mpegutils.h" -#define MAX_SLICES (SLICE_MAX_START_CODE - SLICE_MIN_START_CODE + 1) +#define MAX_SLICES 1024 struct dxva2_picture_context { DXVA_PictureParameters pp; DXVA_QmatrixData qm; @@ -42,14 +44,14 @@ static void fill_picture_parameters(AVCodecContext *avctx, int is_field = s->picture_structure != PICT_FRAME; memset(pp, 0, sizeof(*pp)); - pp->wDecodedPictureIndex = ff_dxva2_get_surface_index(ctx, current_picture); + pp->wDecodedPictureIndex = ff_dxva2_get_surface_index(ctx, current_picture->f); pp->wDeblockedPictureIndex = 0; if (s->pict_type != AV_PICTURE_TYPE_I) - pp->wForwardRefPictureIndex = ff_dxva2_get_surface_index(ctx, &s->last_picture); + pp->wForwardRefPictureIndex = ff_dxva2_get_surface_index(ctx, s->last_picture.f); else pp->wForwardRefPictureIndex = 0xffff; if (s->pict_type == AV_PICTURE_TYPE_B) - pp->wBackwardRefPictureIndex = ff_dxva2_get_surface_index(ctx, &s->next_picture); + pp->wBackwardRefPictureIndex = ff_dxva2_get_surface_index(ctx, s->next_picture.f); else pp->wBackwardRefPictureIndex = 0xffff; pp->wPicWidthInMBminus1 = s->mb_width - 1; @@ -232,9 +234,11 @@ static int dxva2_mpeg2_decode_slice(AVCodecContext *avctx, s->current_picture_ptr->hwaccel_picture_private; unsigned position; - if (ctx_pic->slice_count >= MAX_SLICES) + if (ctx_pic->slice_count >= MAX_SLICES) { + avpriv_request_sample(avctx, "%d slices in dxva2", + ctx_pic->slice_count); return -1; - + } if (!ctx_pic->bitstream) ctx_pic->bitstream = buffer; ctx_pic->bitstream_size += size; @@ -254,7 +258,7 @@ static int dxva2_mpeg2_end_frame(AVCodecContext *avctx) if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0) return -1; - ret = ff_dxva2_common_end_frame(avctx, s->current_picture_ptr, + ret = ff_dxva2_common_end_frame(avctx, s->current_picture_ptr->f, &ctx_pic->pp, sizeof(ctx_pic->pp), &ctx_pic->qm, sizeof(ctx_pic->qm), commit_bitstream_and_slice_buffer); @@ -271,5 +275,5 @@ AVHWAccel ff_mpeg2_dxva2_hwaccel = { .start_frame = dxva2_mpeg2_start_frame, .decode_slice = dxva2_mpeg2_decode_slice, .end_frame = dxva2_mpeg2_end_frame, - .priv_data_size = sizeof(struct dxva2_picture_context), + .frame_priv_data_size = sizeof(struct dxva2_picture_context), }; |