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 v5 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames
@ 2022-05-07  6:24 Tong Wu
  2022-05-07  6:24 ` [FFmpeg-devel] [PATCH v5 2/3] avutil/hwcontext_d3d11va: pass the format value from outside for staging texture Tong Wu
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Tong Wu @ 2022-05-07  6:24 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..ca21543075 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 (!dst_hwctx->texture_infos)
+                return AVERROR(ENOMEM);
             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;
+            }
+            ID3D11Texture2D_GetDesc(dst_hwctx->texture_infos[0].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] 5+ messages in thread

* [FFmpeg-devel] [PATCH v5 2/3] avutil/hwcontext_d3d11va: pass the format value from outside for staging texture
  2022-05-07  6:24 [FFmpeg-devel] [PATCH v5 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames Tong Wu
@ 2022-05-07  6:24 ` Tong Wu
  2022-05-07  6:24 ` [FFmpeg-devel] [PATCH v5 3/3] avutil/hwcontext_qsv: fix mapping issue between QSV frames and D3D11VA frames Tong Wu
  2022-05-20  0:41 ` [FFmpeg-devel] [PATCH v5 1/3] avutil/hwcontext_qsv: derive QSV frames to " Xiang, Haihao
  2 siblings, 0 replies; 5+ messages in thread
From: Tong Wu @ 2022-05-07  6:24 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] 5+ messages in thread

* [FFmpeg-devel] [PATCH v5 3/3] avutil/hwcontext_qsv: fix mapping issue between QSV frames and D3D11VA frames
  2022-05-07  6:24 [FFmpeg-devel] [PATCH v5 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames Tong Wu
  2022-05-07  6:24 ` [FFmpeg-devel] [PATCH v5 2/3] avutil/hwcontext_d3d11va: pass the format value from outside for staging texture Tong Wu
@ 2022-05-07  6:24 ` Tong Wu
  2022-05-20  0:41 ` [FFmpeg-devel] [PATCH v5 1/3] avutil/hwcontext_qsv: derive QSV frames to " Xiang, Haihao
  2 siblings, 0 replies; 5+ messages in thread
From: Tong Wu @ 2022-05-07  6:24 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 ca21543075..81b298dc20 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] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH v5 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames
  2022-05-07  6:24 [FFmpeg-devel] [PATCH v5 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames Tong Wu
  2022-05-07  6:24 ` [FFmpeg-devel] [PATCH v5 2/3] avutil/hwcontext_d3d11va: pass the format value from outside for staging texture Tong Wu
  2022-05-07  6:24 ` [FFmpeg-devel] [PATCH v5 3/3] avutil/hwcontext_qsv: fix mapping issue between QSV frames and D3D11VA frames Tong Wu
@ 2022-05-20  0:41 ` Xiang, Haihao
  2022-05-23  7:13   ` Xiang, Haihao
  2 siblings, 1 reply; 5+ messages in thread
From: Xiang, Haihao @ 2022-05-20  0:41 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Wu, Tong1

On Sat, 2022-05-07 at 06:24 +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..ca21543075 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 (!dst_hwctx->texture_infos)
> +                return AVERROR(ENOMEM);
>              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;
> +            }
> +            ID3D11Texture2D_GetDesc(dst_hwctx->texture_infos[0].texture,
> &texDesc);
> +            dst_hwctx->BindFlags = texDesc.BindFlags;
>          }
>          break;
>  #endif

The new patchset LGTM, is there any more comment ?

-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] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH v5 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames
  2022-05-20  0:41 ` [FFmpeg-devel] [PATCH v5 1/3] avutil/hwcontext_qsv: derive QSV frames to " Xiang, Haihao
@ 2022-05-23  7:13   ` Xiang, Haihao
  0 siblings, 0 replies; 5+ messages in thread
From: Xiang, Haihao @ 2022-05-23  7:13 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Wu, Tong1

On Fri, 2022-05-20 at 00:41 +0000, Xiang, Haihao wrote:
> On Sat, 2022-05-07 at 06:24 +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..ca21543075 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 (!dst_hwctx->texture_infos)
> > +                return AVERROR(ENOMEM);
> >              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;
> > +            }
> > +            ID3D11Texture2D_GetDesc(dst_hwctx->texture_infos[0].texture,
> > &texDesc);
> > +            dst_hwctx->BindFlags = texDesc.BindFlags;
> >          }
> >          break;
> >  #endif
> 
> The new patchset LGTM, is there any more comment ?
> 

Applied, thx

_______________________________________________
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] 5+ messages in thread

end of thread, other threads:[~2022-05-23  7:14 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-07  6:24 [FFmpeg-devel] [PATCH v5 1/3] avutil/hwcontext_qsv: derive QSV frames to D3D11VA frames Tong Wu
2022-05-07  6:24 ` [FFmpeg-devel] [PATCH v5 2/3] avutil/hwcontext_d3d11va: pass the format value from outside for staging texture Tong Wu
2022-05-07  6:24 ` [FFmpeg-devel] [PATCH v5 3/3] avutil/hwcontext_qsv: fix mapping issue between QSV frames and D3D11VA frames Tong Wu
2022-05-20  0:41 ` [FFmpeg-devel] [PATCH v5 1/3] avutil/hwcontext_qsv: derive QSV frames to " Xiang, Haihao
2022-05-23  7:13   ` Xiang, Haihao

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