* [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