Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames
@ 2022-05-06  5:57 Tong Wu
  2022-05-06  5:57 ` [FFmpeg-devel] [PATCH v4 2/3] avutil/hwcontext_d3d11va: pass the format value from outside for staging texture Tong Wu
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Tong Wu @ 2022-05-06  5:57 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Tong Wu

Fixes:
$ ffmpeg.exe -y -hwaccel qsv -init_hw_device d3d11va=d3d11 \
-init_hw_device qsv=qsv@d3d11 -c:v h264_qsv -i input.h264 \
-vf "hwmap=derive_device=d3d11va,format=d3d11" -f null -

Signed-off-by: Tong Wu <tong1.wu@intel.com>
---
 libavutil/hwcontext_qsv.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
index b28dcffe2a..bf150c8553 100644
--- a/libavutil/hwcontext_qsv.c
+++ b/libavutil/hwcontext_qsv.c
@@ -1281,12 +1281,22 @@ static int qsv_frames_derive_from(AVHWFramesContext *dst_ctx,
 #if CONFIG_D3D11VA
     case AV_HWDEVICE_TYPE_D3D11VA:
         {
+            D3D11_TEXTURE2D_DESC texDesc;
+            dst_ctx->initial_pool_size = src_ctx->initial_pool_size;
             AVD3D11VAFramesContext *dst_hwctx = dst_ctx->hwctx;
-            mfxHDLPair *pair = (mfxHDLPair*)src_hwctx->surfaces[i].Data.MemId;
-            dst_hwctx->texture = (ID3D11Texture2D*)pair->first;
+            dst_hwctx->texture_infos = av_calloc(src_hwctx->nb_surfaces,
+                                                 sizeof(*dst_hwctx->texture_infos));
             if (src_hwctx->frame_type & MFX_MEMTYPE_SHARED_RESOURCE)
                 dst_hwctx->MiscFlags = D3D11_RESOURCE_MISC_SHARED;
-            dst_hwctx->BindFlags = qsv_get_d3d11va_bind_flags(src_hwctx->frame_type);
+            for (i = 0; i < src_hwctx->nb_surfaces; i++) {
+                mfxHDLPair *pair = (mfxHDLPair*)src_hwctx->surfaces[i].Data.MemId;
+                dst_hwctx->texture_infos[i].texture = (ID3D11Texture2D*)pair->first;
+                dst_hwctx->texture_infos[i].index = pair->second == (mfxMemId)MFX_INFINITE ? (intptr_t)0 : (intptr_t)pair->second;
+                if (i == 0) {
+                    ID3D11Texture2D_GetDesc(dst_hwctx->texture_infos[i].texture, &texDesc);
+                }
+            }
+            dst_hwctx->BindFlags = texDesc.BindFlags;
         }
         break;
 #endif
-- 
2.35.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [FFmpeg-devel] [PATCH v4 2/3] avutil/hwcontext_d3d11va: pass the format value from outside for staging texture
  2022-05-06  5:57 [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames Tong Wu
@ 2022-05-06  5:57 ` Tong Wu
  2022-05-06  5:57 ` [FFmpeg-devel] [PATCH v4 3/3] avutil/hwcontext_qsv: fix mapping issue between QSV frames and D3D11VA frames Tong Wu
  2022-05-07  2:36 ` [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to " Xiang, Haihao
  2 siblings, 0 replies; 8+ messages in thread
From: Tong Wu @ 2022-05-06  5:57 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Tong Wu

In d3d11va_create_staging_texture(), during the hwmap process, the
ctx->internal->priv is not initialized, resulting in the
texDesc.Format not initialized. Now pass the format value from
d3d11va_transfer_data() to fix it.

$ ffmpeg.exe -y -hwaccel qsv -init_hw_device d3d11va=d3d11 \
-init_hw_device qsv=qsv@d3d11 -c:v h264_qsv \
-i input.h264 -vf "hwmap=derive_device=d3d11va,format=d3d11,hwdownload,format=nv12" \
-f null -

Signed-off-by: Tong Wu <tong1.wu@intel.com>
---
 libavutil/hwcontext_d3d11va.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libavutil/hwcontext_d3d11va.c b/libavutil/hwcontext_d3d11va.c
index 2b4e24bb56..bb4e9d6965 100644
--- a/libavutil/hwcontext_d3d11va.c
+++ b/libavutil/hwcontext_d3d11va.c
@@ -346,7 +346,7 @@ static int d3d11va_transfer_get_formats(AVHWFramesContext *ctx,
     return 0;
 }
 
-static int d3d11va_create_staging_texture(AVHWFramesContext *ctx)
+static int d3d11va_create_staging_texture(AVHWFramesContext *ctx, DXGI_FORMAT format)
 {
     AVD3D11VADeviceContext *device_hwctx = ctx->device_ctx->hwctx;
     D3D11VAFramesContext              *s = ctx->internal->priv;
@@ -355,7 +355,7 @@ static int d3d11va_create_staging_texture(AVHWFramesContext *ctx)
         .Width          = ctx->width,
         .Height         = ctx->height,
         .MipLevels      = 1,
-        .Format         = s->format,
+        .Format         = format,
         .SampleDesc     = { .Count = 1 },
         .ArraySize      = 1,
         .Usage          = D3D11_USAGE_STAGING,
@@ -411,7 +411,8 @@ static int d3d11va_transfer_data(AVHWFramesContext *ctx, AVFrame *dst,
     device_hwctx->lock(device_hwctx->lock_ctx);
 
     if (!s->staging_texture) {
-        int res = d3d11va_create_staging_texture(ctx);
+        ID3D11Texture2D_GetDesc((ID3D11Texture2D *)texture, &desc);
+        int res = d3d11va_create_staging_texture(ctx, desc.Format);
         if (res < 0)
             return res;
     }
-- 
2.35.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [FFmpeg-devel] [PATCH v4 3/3] avutil/hwcontext_qsv: fix mapping issue between QSV frames and D3D11VA frames
  2022-05-06  5:57 [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames Tong Wu
  2022-05-06  5:57 ` [FFmpeg-devel] [PATCH v4 2/3] avutil/hwcontext_d3d11va: pass the format value from outside for staging texture Tong Wu
@ 2022-05-06  5:57 ` Tong Wu
  2022-05-07  2:36 ` [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to " Xiang, Haihao
  2 siblings, 0 replies; 8+ messages in thread
From: Tong Wu @ 2022-05-06  5:57 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Tong Wu

Fixes:
$ ffmpeg.exe -init_hw_device d3d11va=d3d11 -init_hw_device \
qsv=qsv@d3d11 -s:v WxH -pix_fmt nv12 -i input.yuv -vf \
"hwupload=extra_hw_frames=16,hwmap=derive_device=d3d11va,format=d3d11,\
hwmap=derive_device=qsv,format=qsv" -f null -

Signed-off-by: Tong Wu <tong1.wu@intel.com>
---
 libavutil/hwcontext_qsv.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
index bf150c8553..5bff2dbcf2 100644
--- a/libavutil/hwcontext_qsv.c
+++ b/libavutil/hwcontext_qsv.c
@@ -1387,7 +1387,7 @@ static int qsv_map_from(AVHWFramesContext *ctx,
        if (child_frames_ctx->device_ctx->type == AV_HWDEVICE_TYPE_D3D11VA) {
             mfxHDLPair *pair = (mfxHDLPair*)surf->Data.MemId;
             dst->data[0] = pair->first;
-            dst->data[1] = pair->second;
+            dst->data[1] = pair->second == (mfxMemId)MFX_INFINITE ? (uint8_t *)0 : pair->second;
         } else {
             dst->data[3] = child_data;
         }
@@ -1417,7 +1417,7 @@ static int qsv_map_from(AVHWFramesContext *ctx,
     if (child_frames_ctx->device_ctx->type == AV_HWDEVICE_TYPE_D3D11VA) {
         mfxHDLPair *pair = (mfxHDLPair*)surf->Data.MemId;
         dummy->data[0] = pair->first;
-        dummy->data[1] = pair->second;
+        dummy->data[1] = pair->second == (mfxMemId)MFX_INFINITE ? (uint8_t *)0 : pair->second;
     } else {
         dummy->data[3] = child_data;
     }
@@ -1884,7 +1884,8 @@ static int qsv_map_to(AVHWFramesContext *dst_ctx,
         {
             mfxHDLPair *pair = (mfxHDLPair*)hwctx->surfaces[i].Data.MemId;
             if (pair->first == src->data[0]
-                && pair->second == src->data[1]) {
+                && (pair->second == src->data[1]
+                    || (pair->second == (mfxMemId)MFX_INFINITE && src->data[1] == (uint8_t *)0))) {
                 index = i;
                 break;
             }
-- 
2.35.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames
  2022-05-06  5:57 [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames Tong Wu
  2022-05-06  5:57 ` [FFmpeg-devel] [PATCH v4 2/3] avutil/hwcontext_d3d11va: pass the format value from outside for staging texture Tong Wu
  2022-05-06  5:57 ` [FFmpeg-devel] [PATCH v4 3/3] avutil/hwcontext_qsv: fix mapping issue between QSV frames and D3D11VA frames Tong Wu
@ 2022-05-07  2:36 ` Xiang, Haihao
  2022-05-07  2:42   ` Soft Works
  2 siblings, 1 reply; 8+ messages in thread
From: Xiang, Haihao @ 2022-05-07  2:36 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Wu, Tong1

On Fri, 2022-05-06 at 05:57 +0000, Tong Wu wrote:
> Fixes:
> $ ffmpeg.exe -y -hwaccel qsv -init_hw_device d3d11va=d3d11 \
> -init_hw_device qsv=qsv@d3d11 -c:v h264_qsv -i input.h264 \
> -vf "hwmap=derive_device=d3d11va,format=d3d11" -f null -
> 
> Signed-off-by: Tong Wu <tong1.wu@intel.com>
> ---
>  libavutil/hwcontext_qsv.c | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
> index b28dcffe2a..bf150c8553 100644
> --- a/libavutil/hwcontext_qsv.c
> +++ b/libavutil/hwcontext_qsv.c
> @@ -1281,12 +1281,22 @@ static int qsv_frames_derive_from(AVHWFramesContext
> *dst_ctx,
>  #if CONFIG_D3D11VA
>      case AV_HWDEVICE_TYPE_D3D11VA:
>          {
> +            D3D11_TEXTURE2D_DESC texDesc;
> +            dst_ctx->initial_pool_size = src_ctx->initial_pool_size;
>              AVD3D11VAFramesContext *dst_hwctx = dst_ctx->hwctx;
> -            mfxHDLPair *pair = (mfxHDLPair*)src_hwctx-
> >surfaces[i].Data.MemId;
> -            dst_hwctx->texture = (ID3D11Texture2D*)pair->first;
> +            dst_hwctx->texture_infos = av_calloc(src_hwctx->nb_surfaces,
> +                                                 sizeof(*dst_hwctx-
> >texture_infos));

Please check whether the pointer is NULL

>              if (src_hwctx->frame_type & MFX_MEMTYPE_SHARED_RESOURCE)
>                  dst_hwctx->MiscFlags = D3D11_RESOURCE_MISC_SHARED;
> -            dst_hwctx->BindFlags = qsv_get_d3d11va_bind_flags(src_hwctx-
> >frame_type);
> +            for (i = 0; i < src_hwctx->nb_surfaces; i++) {
> +                mfxHDLPair *pair = (mfxHDLPair*)src_hwctx-
> >surfaces[i].Data.MemId;
> +                dst_hwctx->texture_infos[i].texture = (ID3D11Texture2D*)pair-
> >first;
> +                dst_hwctx->texture_infos[i].index = pair->second ==
> (mfxMemId)MFX_INFINITE ? (intptr_t)0 : (intptr_t)pair->second;
> +                if (i == 0) {
> +                    ID3D11Texture2D_GetDesc(dst_hwctx-
> >texture_infos[i].texture, &texDesc);
> +                }

Move this out of the for-loop ? You may call ID3D11Texture2D_GetDesc() below:

ID3D11Texture2D_GetDesc(dst_hwctx->texture_infos[0].texture, &texDesc);

Thanks
Haihao


> +            }
> +            dst_hwctx->BindFlags = texDesc.BindFlags;
>          }
>          break;
>  #endif
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames
  2022-05-07  2:36 ` [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to " Xiang, Haihao
@ 2022-05-07  2:42   ` Soft Works
  2022-05-07  5:24     ` Xiang, Haihao
  0 siblings, 1 reply; 8+ messages in thread
From: Soft Works @ 2022-05-07  2:42 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Wu, Tong1



> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> Xiang, Haihao
> Sent: Saturday, May 7, 2022 4:36 AM
> To: ffmpeg-devel@ffmpeg.org
> Cc: Wu, Tong1 <tong1.wu@intel.com>
> Subject: Re: [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv:
> derive QSV frames to D3D11VA frames
> 
> On Fri, 2022-05-06 at 05:57 +0000, Tong Wu wrote:
> > Fixes:
> > $ ffmpeg.exe -y -hwaccel qsv -init_hw_device d3d11va=d3d11 \
> > -init_hw_device qsv=qsv@d3d11 -c:v h264_qsv -i input.h264 \
> > -vf "hwmap=derive_device=d3d11va,format=d3d11" -f null -
> >
> > Signed-off-by: Tong Wu <tong1.wu@intel.com>
> > ---
> >  libavutil/hwcontext_qsv.c | 16 +++++++++++++---
> >  1 file changed, 13 insertions(+), 3 deletions(-)
> >
> > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
> > index b28dcffe2a..bf150c8553 100644
> > --- a/libavutil/hwcontext_qsv.c
> > +++ b/libavutil/hwcontext_qsv.c
> > @@ -1281,12 +1281,22 @@ static int
> qsv_frames_derive_from(AVHWFramesContext
> > *dst_ctx,
> >  #if CONFIG_D3D11VA
> >      case AV_HWDEVICE_TYPE_D3D11VA:
> >          {
> > +            D3D11_TEXTURE2D_DESC texDesc;
> > +            dst_ctx->initial_pool_size = src_ctx-
> >initial_pool_size;
> >              AVD3D11VAFramesContext *dst_hwctx = dst_ctx->hwctx;
> > -            mfxHDLPair *pair = (mfxHDLPair*)src_hwctx-
> > >surfaces[i].Data.MemId;
> > -            dst_hwctx->texture = (ID3D11Texture2D*)pair->first;
> > +            dst_hwctx->texture_infos = av_calloc(src_hwctx-
> >nb_surfaces,
> > +                                                 sizeof(*dst_hwctx-
> > >texture_infos));
> 
> Please check whether the pointer is NULL
> 
> >              if (src_hwctx->frame_type &
> MFX_MEMTYPE_SHARED_RESOURCE)
> >                  dst_hwctx->MiscFlags = D3D11_RESOURCE_MISC_SHARED;
> > -            dst_hwctx->BindFlags =
> qsv_get_d3d11va_bind_flags(src_hwctx-
> > >frame_type);
> > +            for (i = 0; i < src_hwctx->nb_surfaces; i++) {
> > +                mfxHDLPair *pair = (mfxHDLPair*)src_hwctx-
> > >surfaces[i].Data.MemId;
> > +                dst_hwctx->texture_infos[i].texture =
> (ID3D11Texture2D*)pair-
> > >first;
> > +                dst_hwctx->texture_infos[i].index = pair->second ==
> > (mfxMemId)MFX_INFINITE ? (intptr_t)0 : (intptr_t)pair->second;
> > +                if (i == 0) {
> > +                    ID3D11Texture2D_GetDesc(dst_hwctx-
> > >texture_infos[i].texture, &texDesc);
> > +                }
> 
> Move this out of the for-loop ? You may call ID3D11Texture2D_GetDesc()
> below:
> 
> ID3D11Texture2D_GetDesc(dst_hwctx->texture_infos[0].texture,
> &texDesc);

This could crash when src_hwctx->nb_surfaces is 0

sw
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames
  2022-05-07  2:42   ` Soft Works
@ 2022-05-07  5:24     ` Xiang, Haihao
  2022-05-07  5:42       ` Soft Works
  2022-05-07  6:08       ` Wu, Tong1
  0 siblings, 2 replies; 8+ messages in thread
From: Xiang, Haihao @ 2022-05-07  5:24 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Wu, Tong1

On Sat, 2022-05-07 at 02:42 +0000, Soft Works wrote:
> > -----Original Message-----
> > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> > Xiang, Haihao
> > Sent: Saturday, May 7, 2022 4:36 AM
> > To: ffmpeg-devel@ffmpeg.org
> > Cc: Wu, Tong1 <tong1.wu@intel.com>
> > Subject: Re: [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv:
> > derive QSV frames to D3D11VA frames
> > 
> > On Fri, 2022-05-06 at 05:57 +0000, Tong Wu wrote:
> > > Fixes:
> > > $ ffmpeg.exe -y -hwaccel qsv -init_hw_device d3d11va=d3d11 \
> > > -init_hw_device qsv=qsv@d3d11 -c:v h264_qsv -i input.h264 \
> > > -vf "hwmap=derive_device=d3d11va,format=d3d11" -f null -
> > > 
> > > Signed-off-by: Tong Wu <tong1.wu@intel.com>
> > > ---
> > >  libavutil/hwcontext_qsv.c | 16 +++++++++++++---
> > >  1 file changed, 13 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
> > > index b28dcffe2a..bf150c8553 100644
> > > --- a/libavutil/hwcontext_qsv.c
> > > +++ b/libavutil/hwcontext_qsv.c
> > > @@ -1281,12 +1281,22 @@ static int
> > 
> > qsv_frames_derive_from(AVHWFramesContext
> > > *dst_ctx,
> > >  #if CONFIG_D3D11VA
> > >      case AV_HWDEVICE_TYPE_D3D11VA:
> > >          {
> > > +            D3D11_TEXTURE2D_DESC texDesc;
> > > +            dst_ctx->initial_pool_size = src_ctx-
> > > initial_pool_size;
> > >              AVD3D11VAFramesContext *dst_hwctx = dst_ctx->hwctx;
> > > -            mfxHDLPair *pair = (mfxHDLPair*)src_hwctx-
> > > > surfaces[i].Data.MemId;
> > > 
> > > -            dst_hwctx->texture = (ID3D11Texture2D*)pair->first;
> > > +            dst_hwctx->texture_infos = av_calloc(src_hwctx-
> > > nb_surfaces,
> > > +                                                 sizeof(*dst_hwctx-
> > > > texture_infos));
> > 
> > Please check whether the pointer is NULL
> > 
> > >              if (src_hwctx->frame_type &
> > 
> > MFX_MEMTYPE_SHARED_RESOURCE)
> > >                  dst_hwctx->MiscFlags = D3D11_RESOURCE_MISC_SHARED;
> > > -            dst_hwctx->BindFlags =
> > 
> > qsv_get_d3d11va_bind_flags(src_hwctx-
> > > > frame_type);
> > > 
> > > +            for (i = 0; i < src_hwctx->nb_surfaces; i++) {
> > > +                mfxHDLPair *pair = (mfxHDLPair*)src_hwctx-
> > > > surfaces[i].Data.MemId;
> > > 
> > > +                dst_hwctx->texture_infos[i].texture =
> > 
> > (ID3D11Texture2D*)pair-
> > > > first;
> > > 
> > > +                dst_hwctx->texture_infos[i].index = pair->second ==
> > > (mfxMemId)MFX_INFINITE ? (intptr_t)0 : (intptr_t)pair->second;
> > > +                if (i == 0) {
> > > +                    ID3D11Texture2D_GetDesc(dst_hwctx-
> > > > texture_infos[i].texture, &texDesc);
> > > 
> > > +                }
> > 
> > Move this out of the for-loop ? You may call ID3D11Texture2D_GetDesc()
> > below:
> > 
> > ID3D11Texture2D_GetDesc(dst_hwctx->texture_infos[0].texture,
> > &texDesc);
> 
> This could crash when src_hwctx->nb_surfaces is 0

src_hwctx->nb_surface should be greater than 0, see qsv_init_pool() and
qsv_frames_derive_to(). 

On the other hand, dst_hwctx->texture_infos is NULL if src_hwctx->nb_surfaces is
0. I commented that we should check whether the pointer is NULL. In addition,
texDesc.BindFlags would be uninitialized if src_hwctx->nb_surfaces is 0, so we
couldn't use it in the following assignment. 

dst_hwctx->BindFlags = texDesc.BindFlags; 

Thanks
Haihao


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames
  2022-05-07  5:24     ` Xiang, Haihao
@ 2022-05-07  5:42       ` Soft Works
  2022-05-07  6:08       ` Wu, Tong1
  1 sibling, 0 replies; 8+ messages in thread
From: Soft Works @ 2022-05-07  5:42 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Wu, Tong1



> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> Xiang, Haihao
> Sent: Saturday, May 7, 2022 7:25 AM
> To: ffmpeg-devel@ffmpeg.org
> Cc: Wu, Tong1 <tong1.wu@intel.com>
> Subject: Re: [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv:
> derive QSV frames to D3D11VA frames
> 
> On Sat, 2022-05-07 at 02:42 +0000, Soft Works wrote:
> > > -----Original Message-----
> > > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> > > Xiang, Haihao
> > > Sent: Saturday, May 7, 2022 4:36 AM
> > > To: ffmpeg-devel@ffmpeg.org
> > > Cc: Wu, Tong1 <tong1.wu@intel.com>
> > > Subject: Re: [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv:
> > > derive QSV frames to D3D11VA frames
> > >
> > > On Fri, 2022-05-06 at 05:57 +0000, Tong Wu wrote:
> > > > Fixes:
> > > > $ ffmpeg.exe -y -hwaccel qsv -init_hw_device d3d11va=d3d11 \
> > > > -init_hw_device qsv=qsv@d3d11 -c:v h264_qsv -i input.h264 \
> > > > -vf "hwmap=derive_device=d3d11va,format=d3d11" -f null -
> > > >
> > > > Signed-off-by: Tong Wu <tong1.wu@intel.com>
> > > > ---
> > > >  libavutil/hwcontext_qsv.c | 16 +++++++++++++---
> > > >  1 file changed, 13 insertions(+), 3 deletions(-)
> > > >
> > > > diff --git a/libavutil/hwcontext_qsv.c
> b/libavutil/hwcontext_qsv.c
> > > > index b28dcffe2a..bf150c8553 100644
> > > > --- a/libavutil/hwcontext_qsv.c
> > > > +++ b/libavutil/hwcontext_qsv.c
> > > > @@ -1281,12 +1281,22 @@ static int
> > >
> > > qsv_frames_derive_from(AVHWFramesContext
> > > > *dst_ctx,
> > > >  #if CONFIG_D3D11VA
> > > >      case AV_HWDEVICE_TYPE_D3D11VA:
> > > >          {
> > > > +            D3D11_TEXTURE2D_DESC texDesc;
> > > > +            dst_ctx->initial_pool_size = src_ctx-
> > > > initial_pool_size;
> > > >              AVD3D11VAFramesContext *dst_hwctx = dst_ctx->hwctx;
> > > > -            mfxHDLPair *pair = (mfxHDLPair*)src_hwctx-
> > > > > surfaces[i].Data.MemId;
> > > >
> > > > -            dst_hwctx->texture = (ID3D11Texture2D*)pair->first;
> > > > +            dst_hwctx->texture_infos = av_calloc(src_hwctx-
> > > > nb_surfaces,
> > > > +
> sizeof(*dst_hwctx-
> > > > > texture_infos));
> > >
> > > Please check whether the pointer is NULL
> > >
> > > >              if (src_hwctx->frame_type &
> > >
> > > MFX_MEMTYPE_SHARED_RESOURCE)
> > > >                  dst_hwctx->MiscFlags =
> D3D11_RESOURCE_MISC_SHARED;
> > > > -            dst_hwctx->BindFlags =
> > >
> > > qsv_get_d3d11va_bind_flags(src_hwctx-
> > > > > frame_type);
> > > >
> > > > +            for (i = 0; i < src_hwctx->nb_surfaces; i++) {
> > > > +                mfxHDLPair *pair = (mfxHDLPair*)src_hwctx-
> > > > > surfaces[i].Data.MemId;
> > > >
> > > > +                dst_hwctx->texture_infos[i].texture =
> > >
> > > (ID3D11Texture2D*)pair-
> > > > > first;
> > > >
> > > > +                dst_hwctx->texture_infos[i].index = pair-
> >second ==
> > > > (mfxMemId)MFX_INFINITE ? (intptr_t)0 : (intptr_t)pair->second;
> > > > +                if (i == 0) {
> > > > +                    ID3D11Texture2D_GetDesc(dst_hwctx-
> > > > > texture_infos[i].texture, &texDesc);
> > > >
> > > > +                }
> > >
> > > Move this out of the for-loop ? You may call
> ID3D11Texture2D_GetDesc()
> > > below:
> > >
> > > ID3D11Texture2D_GetDesc(dst_hwctx->texture_infos[0].texture,
> > > &texDesc);
> >
> > This could crash when src_hwctx->nb_surfaces is 0
> 
> src_hwctx->nb_surface should be greater than 0, see qsv_init_pool()
> and
> qsv_frames_derive_to().
> 
> On the other hand, dst_hwctx->texture_infos is NULL if src_hwctx-
> >nb_surfaces is
> 0. I commented that we should check whether the pointer is NULL. In
> addition,
> texDesc.BindFlags would be uninitialized if src_hwctx->nb_surfaces is
> 0, so we
> couldn't use it in the following assignment.
> 
> dst_hwctx->BindFlags = texDesc.BindFlags;

Yea that’s right. That would have to go into the if block, but
you're right, the whole thing would fail if nb_surfaces is 0
rather it wouldn't even get that far that this function would be 
called, so it really doesn't matter, yet the getdesc and the
BindFlags assignment should better be together (wherever).

Thanks,
softworkz


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames
  2022-05-07  5:24     ` Xiang, Haihao
  2022-05-07  5:42       ` Soft Works
@ 2022-05-07  6:08       ` Wu, Tong1
  1 sibling, 0 replies; 8+ messages in thread
From: Wu, Tong1 @ 2022-05-07  6:08 UTC (permalink / raw)
  To: Xiang, Haihao, ffmpeg-devel

> On Sat, 2022-05-07 at 02:42 +0000, Soft Works wrote:
> > > -----Original Message-----
> > > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> > > Xiang, Haihao
> > > Sent: Saturday, May 7, 2022 4:36 AM
> > > To: ffmpeg-devel@ffmpeg.org
> > > Cc: Wu, Tong1 <tong1.wu@intel.com>
> > > Subject: Re: [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv:
> > > derive QSV frames to D3D11VA frames
> > >
> > > On Fri, 2022-05-06 at 05:57 +0000, Tong Wu wrote:
> > > > Fixes:
> > > > $ ffmpeg.exe -y -hwaccel qsv -init_hw_device d3d11va=d3d11 \
> > > > -init_hw_device qsv=qsv@d3d11 -c:v h264_qsv -i input.h264 \ -vf
> > > > "hwmap=derive_device=d3d11va,format=d3d11" -f null -
> > > >
> > > > Signed-off-by: Tong Wu <tong1.wu@intel.com>
> > > > ---
> > > >  libavutil/hwcontext_qsv.c | 16 +++++++++++++---
> > > >  1 file changed, 13 insertions(+), 3 deletions(-)
> > > >
> > > > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
> > > > index b28dcffe2a..bf150c8553 100644
> > > > --- a/libavutil/hwcontext_qsv.c
> > > > +++ b/libavutil/hwcontext_qsv.c
> > > > @@ -1281,12 +1281,22 @@ static int
> > >
> > > qsv_frames_derive_from(AVHWFramesContext
> > > > *dst_ctx,
> > > >  #if CONFIG_D3D11VA
> > > >      case AV_HWDEVICE_TYPE_D3D11VA:
> > > >          {
> > > > +            D3D11_TEXTURE2D_DESC texDesc;
> > > > +            dst_ctx->initial_pool_size = src_ctx-
> > > > initial_pool_size;
> > > >              AVD3D11VAFramesContext *dst_hwctx = dst_ctx->hwctx;
> > > > -            mfxHDLPair *pair = (mfxHDLPair*)src_hwctx-
> > > > > surfaces[i].Data.MemId;
> > > >
> > > > -            dst_hwctx->texture = (ID3D11Texture2D*)pair->first;
> > > > +            dst_hwctx->texture_infos = av_calloc(src_hwctx-
> > > > nb_surfaces,
> > > > +
> > > > + sizeof(*dst_hwctx-
> > > > > texture_infos));
> > >
> > > Please check whether the pointer is NULL
> > >
> > > >              if (src_hwctx->frame_type &
> > >
> > > MFX_MEMTYPE_SHARED_RESOURCE)
> > > >                  dst_hwctx->MiscFlags = D3D11_RESOURCE_MISC_SHARED;
> > > > -            dst_hwctx->BindFlags =
> > >
> > > qsv_get_d3d11va_bind_flags(src_hwctx-
> > > > > frame_type);
> > > >
> > > > +            for (i = 0; i < src_hwctx->nb_surfaces; i++) {
> > > > +                mfxHDLPair *pair = (mfxHDLPair*)src_hwctx-
> > > > > surfaces[i].Data.MemId;
> > > >
> > > > +                dst_hwctx->texture_infos[i].texture =
> > >
> > > (ID3D11Texture2D*)pair-
> > > > > first;
> > > >
> > > > +                dst_hwctx->texture_infos[i].index = pair->second
> > > > + ==
> > > > (mfxMemId)MFX_INFINITE ? (intptr_t)0 : (intptr_t)pair->second;
> > > > +                if (i == 0) {
> > > > +                    ID3D11Texture2D_GetDesc(dst_hwctx-
> > > > > texture_infos[i].texture, &texDesc);
> > > >
> > > > +                }
> > >
> > > Move this out of the for-loop ? You may call
> > > ID3D11Texture2D_GetDesc()
> > > below:
> > >
> > > ID3D11Texture2D_GetDesc(dst_hwctx->texture_infos[0].texture,
> > > &texDesc);
> >
> > This could crash when src_hwctx->nb_surfaces is 0
> 
> src_hwctx->nb_surface should be greater than 0, see qsv_init_pool() and
> qsv_frames_derive_to().
> 
> On the other hand, dst_hwctx->texture_infos is NULL if src_hwctx-
> >nb_surfaces is 0. I commented that we should check whether the pointer is
> NULL. In addition, texDesc.BindFlags would be uninitialized if src_hwctx-
> >nb_surfaces is 0, so we couldn't use it in the following assignment.
> 
> dst_hwctx->BindFlags = texDesc.BindFlags;
> 
> Thanks
> Haihao
> 
Yes that's right. I am going to modify the code as suggested and resubmit them.

Regards,
Tong

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-05-07  6:08 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-06  5:57 [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames Tong Wu
2022-05-06  5:57 ` [FFmpeg-devel] [PATCH v4 2/3] avutil/hwcontext_d3d11va: pass the format value from outside for staging texture Tong Wu
2022-05-06  5:57 ` [FFmpeg-devel] [PATCH v4 3/3] avutil/hwcontext_qsv: fix mapping issue between QSV frames and D3D11VA frames Tong Wu
2022-05-07  2:36 ` [FFmpeg-devel] [PATCH v4 1/3] avutil/hwcontext_qsv: derive QSV frames to " Xiang, Haihao
2022-05-07  2:42   ` Soft Works
2022-05-07  5:24     ` Xiang, Haihao
2022-05-07  5:42       ` Soft Works
2022-05-07  6:08       ` Wu, Tong1

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git