qsv: align surface width/height to 16.

Message ID 1520303756-30210-1-git-send-email-ruiling.song@intel.com
State Committed
Commit 86499771d1228d8303c8eb6509e20c0caaa02da5
Headers show
Series
  • qsv: align surface width/height to 16.
Related show

Commit Message

Ruiling Song March 6, 2018, 2:35 a.m.
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>
---
 libavutil/hwcontext_qsv.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Luca Barbato March 6, 2018, 1:56 p.m. | #1
On 06/03/2018 03:35, Ruiling Song wrote:
> 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>
> ---
>   libavutil/hwcontext_qsv.c | 8 ++++----
>   1 file changed, 4 insertions(+), 4 deletions(-)
> 

Looks like what Maxym did already in a similar situation in libavcoded. 
Seems fine to me.

lu

Patch

diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
index 73b5f24..f5d78d0 100644
--- a/libavutil/hwcontext_qsv.c
+++ b/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->sw_format         = ctx->sw_format;
     child_frames_ctx->initial_pool_size = ctx->initial_pool_size;
-    child_frames_ctx->width             = ctx->width;
-    child_frames_ctx->height            = ctx->height;
+    child_frames_ctx->width             = FFALIGN(ctx->width, 16);
+    child_frames_ctx->height            = FFALIGN(ctx->height, 16);
 
 #if CONFIG_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.FourCC         = fourcc;
-    surf->Info.Width          = ctx->width;
+    surf->Info.Width          = FFALIGN(ctx->width, 16);
     surf->Info.CropW          = ctx->width;
-    surf->Info.Height         = ctx->height;
+    surf->Info.Height         = FFALIGN(ctx->height, 16);
     surf->Info.CropH          = ctx->height;
     surf->Info.FrameRateExtN  = 25;
     surf->Info.FrameRateExtD  = 1;