qsv: align surface width/height to 16.

Per MediaSDK documentation, it requires width/height to 16 alignment.
Without this patch, hwupload pipeline may fail if 16 alignment is
not met. Although this patch also apply 16 alignment to qsv encoder/decoder,
it will not bring any side-effect to them as they are already aligned.

Signed-off-by: Ruiling Song <ruiling.song@intel.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
pull/284/head
Ruiling Song 7 years ago committed by Luca Barbato
parent ea2f72a2c1
commit 86499771d1
  1. 8
      libavutil/hwcontext_qsv.c

@ -234,8 +234,8 @@ static int qsv_init_child_ctx(AVHWFramesContext *ctx)
child_frames_ctx->format = device_priv->child_pix_fmt; child_frames_ctx->format = device_priv->child_pix_fmt;
child_frames_ctx->sw_format = ctx->sw_format; child_frames_ctx->sw_format = ctx->sw_format;
child_frames_ctx->initial_pool_size = ctx->initial_pool_size; child_frames_ctx->initial_pool_size = ctx->initial_pool_size;
child_frames_ctx->width = ctx->width; child_frames_ctx->width = FFALIGN(ctx->width, 16);
child_frames_ctx->height = ctx->height; child_frames_ctx->height = FFALIGN(ctx->height, 16);
#if CONFIG_DXVA2 #if CONFIG_DXVA2
if (child_device_ctx->type == AV_HWDEVICE_TYPE_DXVA2) { if (child_device_ctx->type == AV_HWDEVICE_TYPE_DXVA2) {
@ -307,9 +307,9 @@ static int qsv_init_surface(AVHWFramesContext *ctx, mfxFrameSurface1 *surf)
surf->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV444; surf->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
surf->Info.FourCC = fourcc; surf->Info.FourCC = fourcc;
surf->Info.Width = ctx->width; surf->Info.Width = FFALIGN(ctx->width, 16);
surf->Info.CropW = ctx->width; surf->Info.CropW = ctx->width;
surf->Info.Height = ctx->height; surf->Info.Height = FFALIGN(ctx->height, 16);
surf->Info.CropH = ctx->height; surf->Info.CropH = ctx->height;
surf->Info.FrameRateExtN = 25; surf->Info.FrameRateExtN = 25;
surf->Info.FrameRateExtD = 1; surf->Info.FrameRateExtD = 1;

Loading…
Cancel
Save