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 v2 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX on Linux
@ 2022-09-06  4:53 Xiang, Haihao
  2022-09-06  4:53 ` [FFmpeg-devel] [PATCH v2 2/2] lavc/qsv: Add support for decoding & encoding 8bit 4:4:4 content Xiang, Haihao
  2022-09-06 16:01 ` [FFmpeg-devel] [PATCH v2 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX on Linux Philip Langdale
  0 siblings, 2 replies; 3+ messages in thread
From: Xiang, Haihao @ 2022-09-06  4:53 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Haihao Xiang

From: Haihao Xiang <haihao.xiang@intel.com>

AV_PIX_FMT_VUYX is used for 8bit 4:4:4 content in FFmpeg VAAPI, so
AV_PIX_FMT_VUYX should be used for 8bit 4:4:4 content in FFmpeg QSV too
because QSV is based on VAAPI on Linux. However the SDK only declares
support for AYUV and does nothing with the alpha, so this commit fudged
a mapping between AV_PIX_FMT_VUYX and MFX_FOURCC_AYUV.
---
 libavutil/hwcontext_qsv.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
index 510f422562..9fa0dfa1c0 100644
--- a/libavutil/hwcontext_qsv.c
+++ b/libavutil/hwcontext_qsv.c
@@ -119,6 +119,10 @@ static const struct {
                        MFX_FOURCC_YUY2 },
     { AV_PIX_FMT_Y210,
                        MFX_FOURCC_Y210 },
+    // VUYX is used for VAAPI child device,
+    // the SDK only delares support for AYUV
+    { AV_PIX_FMT_VUYX,
+                       MFX_FOURCC_AYUV },
 #endif
 };
 
@@ -1502,6 +1506,14 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface)
         surface->Data.U16 = (mfxU16 *)frame->data[0] + 1;
         surface->Data.V16 = (mfxU16 *)frame->data[0] + 3;
         break;
+    case AV_PIX_FMT_VUYX:
+        surface->Data.V = frame->data[0];
+        surface->Data.U = frame->data[0] + 1;
+        surface->Data.Y = frame->data[0] + 2;
+        // Only set Data.A to a valid address, the SDK doesn't
+        // use the value from the frame.
+        surface->Data.A = frame->data[0] + 3;
+        break;
 #endif
     default:
         return MFX_ERR_UNSUPPORTED;
-- 
2.17.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] 3+ messages in thread

* [FFmpeg-devel] [PATCH v2 2/2] lavc/qsv: Add support for decoding & encoding 8bit 4:4:4 content
  2022-09-06  4:53 [FFmpeg-devel] [PATCH v2 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX on Linux Xiang, Haihao
@ 2022-09-06  4:53 ` Xiang, Haihao
  2022-09-06 16:01 ` [FFmpeg-devel] [PATCH v2 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX on Linux Philip Langdale
  1 sibling, 0 replies; 3+ messages in thread
From: Xiang, Haihao @ 2022-09-06  4:53 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Haihao Xiang

From: Haihao Xiang <haihao.xiang@intel.com>

AV_PIX_FMT_VUYX is used in FFmpeg and MFX_FOURCC_AYUV is used in the SDK
---
 libavcodec/qsv.c         | 14 ++++++++++++++
 libavcodec/qsvdec.c      |  2 ++
 libavcodec/qsvenc_hevc.c |  1 +
 libavcodec/qsvenc_vp9.c  |  1 +
 4 files changed, 18 insertions(+)

diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
index 3449789a2c..51aac16695 100644
--- a/libavcodec/qsv.c
+++ b/libavcodec/qsv.c
@@ -211,6 +211,7 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc)
 #if CONFIG_VAAPI
     case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422;
     case MFX_FOURCC_Y210: return AV_PIX_FMT_Y210;
+    case MFX_FOURCC_AYUV: return AV_PIX_FMT_VUYX;
 #endif
     }
     return AV_PIX_FMT_NONE;
@@ -243,6 +244,9 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc)
     case AV_PIX_FMT_Y210:
         *fourcc = MFX_FOURCC_Y210;
         return AV_PIX_FMT_Y210;
+    case AV_PIX_FMT_VUYX:
+        *fourcc = MFX_FOURCC_AYUV;
+        return AV_PIX_FMT_VUYX;
 #endif
     default:
         return AVERROR(ENOSYS);
@@ -277,6 +281,16 @@ int ff_qsv_map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface)
         surface->Data.U16 = (mfxU16 *)frame->data[0] + 1;
         surface->Data.V16 = (mfxU16 *)frame->data[0] + 3;
         break;
+
+    case AV_PIX_FMT_VUYX:
+        surface->Data.V = frame->data[0];
+        surface->Data.U = frame->data[0] + 1;
+        surface->Data.Y = frame->data[0] + 2;
+        // Only set Data.A to a valid address, the SDK doesn't
+        // use the value from the frame.
+        surface->Data.A = frame->data[0] + 3;
+        break;
+
     default:
         return AVERROR(ENOSYS);
     }
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index 0f0d719e23..0254a394bd 100644
--- a/libavcodec/qsvdec.c
+++ b/libavcodec/qsvdec.c
@@ -141,6 +141,7 @@ static int qsv_get_continuous_buffer(AVCodecContext *avctx, AVFrame *frame,
         frame->linesize[0] = 2 * FFALIGN(avctx->width, 128);
         break;
     case AV_PIX_FMT_Y210:
+    case AV_PIX_FMT_VUYX:
         frame->linesize[0] = 4 * FFALIGN(avctx->width, 128);
         break;
     default:
@@ -1041,6 +1042,7 @@ const FFCodec ff_##x##_qsv_decoder = { \
                                                     AV_PIX_FMT_P010, \
                                                     AV_PIX_FMT_YUYV422, \
                                                     AV_PIX_FMT_Y210, \
+                                                    AV_PIX_FMT_VUYX, \
                                                     AV_PIX_FMT_QSV, \
                                                     AV_PIX_FMT_NONE }, \
     .hw_configs     = qsv_hw_configs, \
diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c
index 5986c3f1a6..8072e676e1 100644
--- a/libavcodec/qsvenc_hevc.c
+++ b/libavcodec/qsvenc_hevc.c
@@ -314,6 +314,7 @@ const FFCodec ff_hevc_qsv_encoder = {
                                                     AV_PIX_FMT_QSV,
                                                     AV_PIX_FMT_BGRA,
                                                     AV_PIX_FMT_X2RGB10,
+                                                    AV_PIX_FMT_VUYX,
                                                     AV_PIX_FMT_NONE },
     .p.priv_class   = &class,
     .defaults       = qsv_enc_defaults,
diff --git a/libavcodec/qsvenc_vp9.c b/libavcodec/qsvenc_vp9.c
index 61d50156d3..044a882d1a 100644
--- a/libavcodec/qsvenc_vp9.c
+++ b/libavcodec/qsvenc_vp9.c
@@ -113,6 +113,7 @@ const FFCodec ff_vp9_qsv_encoder = {
     .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID,
     .p.pix_fmts     = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
                                                     AV_PIX_FMT_P010,
+                                                    AV_PIX_FMT_VUYX,
                                                     AV_PIX_FMT_QSV,
                                                     AV_PIX_FMT_NONE },
     .p.priv_class   = &class,
-- 
2.17.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] 3+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX on Linux
  2022-09-06  4:53 [FFmpeg-devel] [PATCH v2 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX on Linux Xiang, Haihao
  2022-09-06  4:53 ` [FFmpeg-devel] [PATCH v2 2/2] lavc/qsv: Add support for decoding & encoding 8bit 4:4:4 content Xiang, Haihao
@ 2022-09-06 16:01 ` Philip Langdale
  1 sibling, 0 replies; 3+ messages in thread
From: Philip Langdale @ 2022-09-06 16:01 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Haihao Xiang

On Tue,  6 Sep 2022 12:53:37 +0800
"Xiang, Haihao" <haihao.xiang-at-intel.com@ffmpeg.org> wrote:

> From: Haihao Xiang <haihao.xiang@intel.com>
> 
> AV_PIX_FMT_VUYX is used for 8bit 4:4:4 content in FFmpeg VAAPI, so
> AV_PIX_FMT_VUYX should be used for 8bit 4:4:4 content in FFmpeg QSV
> too because QSV is based on VAAPI on Linux. However the SDK only
> declares support for AYUV and does nothing with the alpha, so this
> commit fudged a mapping between AV_PIX_FMT_VUYX and MFX_FOURCC_AYUV.
> ---
>  libavutil/hwcontext_qsv.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
> index 510f422562..9fa0dfa1c0 100644
> --- a/libavutil/hwcontext_qsv.c
> +++ b/libavutil/hwcontext_qsv.c
> @@ -119,6 +119,10 @@ static const struct {
>                         MFX_FOURCC_YUY2 },
>      { AV_PIX_FMT_Y210,
>                         MFX_FOURCC_Y210 },
> +    // VUYX is used for VAAPI child device,
> +    // the SDK only delares support for AYUV
> +    { AV_PIX_FMT_VUYX,
> +                       MFX_FOURCC_AYUV },
>  #endif
>  };
>  
> @@ -1502,6 +1506,14 @@ static int map_frame_to_surface(const AVFrame
> *frame, mfxFrameSurface1 *surface) surface->Data.U16 = (mfxU16
> *)frame->data[0] + 1; surface->Data.V16 = (mfxU16 *)frame->data[0] +
> 3; break;
> +    case AV_PIX_FMT_VUYX:
> +        surface->Data.V = frame->data[0];
> +        surface->Data.U = frame->data[0] + 1;
> +        surface->Data.Y = frame->data[0] + 2;
> +        // Only set Data.A to a valid address, the SDK doesn't
> +        // use the value from the frame.
> +        surface->Data.A = frame->data[0] + 3;
> +        break;
>  #endif
>      default:
>          return MFX_ERR_UNSUPPORTED;

Patch series LGTM.

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

end of thread, other threads:[~2022-09-06 16:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-06  4:53 [FFmpeg-devel] [PATCH v2 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX on Linux Xiang, Haihao
2022-09-06  4:53 ` [FFmpeg-devel] [PATCH v2 2/2] lavc/qsv: Add support for decoding & encoding 8bit 4:4:4 content Xiang, Haihao
2022-09-06 16:01 ` [FFmpeg-devel] [PATCH v2 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX on Linux Philip Langdale

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