* [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX
@ 2022-08-29 7:27 Xiang, Haihao
2022-08-29 7:27 ` [FFmpeg-devel] [PATCH 2/2] lavc/qsv: Add support for decoding & encoding 8bit 4:4:4 content Xiang, Haihao
2022-08-29 11:17 ` [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX James Almer
0 siblings, 2 replies; 8+ messages in thread
From: Xiang, Haihao @ 2022-08-29 7:27 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Haihao Xiang
From: Haihao Xiang <haihao.xiang@intel.com>
AV_PIX_FMT_VUYX is used in FFmpeg for 8bit 4:4:4 content on Intel HW,
and MFX_FOURCC_AYUV is used in the SDK
---
libavutil/hwcontext_qsv.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
index 510f422562..a3350eae0f 100644
--- a/libavutil/hwcontext_qsv.c
+++ b/libavutil/hwcontext_qsv.c
@@ -119,6 +119,8 @@ static const struct {
MFX_FOURCC_YUY2 },
{ AV_PIX_FMT_Y210,
MFX_FOURCC_Y210 },
+ { AV_PIX_FMT_VUYX,
+ MFX_FOURCC_AYUV },
#endif
};
@@ -1502,6 +1504,12 @@ 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;
+ 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] 8+ messages in thread
* [FFmpeg-devel] [PATCH 2/2] lavc/qsv: Add support for decoding & encoding 8bit 4:4:4 content
2022-08-29 7:27 [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX Xiang, Haihao
@ 2022-08-29 7:27 ` Xiang, Haihao
2022-08-29 11:17 ` [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX James Almer
1 sibling, 0 replies; 8+ messages in thread
From: Xiang, Haihao @ 2022-08-29 7:27 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 | 12 ++++++++++++
libavcodec/qsvdec.c | 2 ++
libavcodec/qsvenc_hevc.c | 1 +
libavcodec/qsvenc_vp9.c | 1 +
4 files changed, 16 insertions(+)
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
index 3449789a2c..dbf6c0c1c7 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,14 @@ 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;
+ surface->Data.A = frame->data[0] + 3;
+ break;
+
default:
return AVERROR(ENOSYS);
}
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index 89ec5dcee8..a95a921bc3 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 e59747fda3..690e6b7fcd 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 c738da3904..c3df7c522a 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] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX
2022-08-29 7:27 [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX Xiang, Haihao
2022-08-29 7:27 ` [FFmpeg-devel] [PATCH 2/2] lavc/qsv: Add support for decoding & encoding 8bit 4:4:4 content Xiang, Haihao
@ 2022-08-29 11:17 ` James Almer
2022-08-29 14:01 ` Xiang, Haihao
1 sibling, 1 reply; 8+ messages in thread
From: James Almer @ 2022-08-29 11:17 UTC (permalink / raw)
To: ffmpeg-devel
On 8/29/2022 4:27 AM, Xiang, Haihao wrote:
> From: Haihao Xiang <haihao.xiang@intel.com>
>
> AV_PIX_FMT_VUYX is used in FFmpeg for 8bit 4:4:4 content on Intel HW,
> and MFX_FOURCC_AYUV is used in the SDK
Sounds like you want the VUYA pixfmt instead.
> ---
> libavutil/hwcontext_qsv.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
> index 510f422562..a3350eae0f 100644
> --- a/libavutil/hwcontext_qsv.c
> +++ b/libavutil/hwcontext_qsv.c
> @@ -119,6 +119,8 @@ static const struct {
> MFX_FOURCC_YUY2 },
> { AV_PIX_FMT_Y210,
> MFX_FOURCC_Y210 },
> + { AV_PIX_FMT_VUYX,
> + MFX_FOURCC_AYUV },
> #endif
> };
>
> @@ -1502,6 +1504,12 @@ 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;
> + surface->Data.A = frame->data[0] + 3;
This will go wrong with VUYX. You need to use AV_PIX_FMT_VUYA.
> + break;
> #endif
> default:
> return MFX_ERR_UNSUPPORTED;
_______________________________________________
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 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX
2022-08-29 11:17 ` [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX James Almer
@ 2022-08-29 14:01 ` Xiang, Haihao
2022-09-05 2:47 ` Xiang, Haihao
0 siblings, 1 reply; 8+ messages in thread
From: Xiang, Haihao @ 2022-08-29 14:01 UTC (permalink / raw)
To: ffmpeg-devel
On Mon, 2022-08-29 at 08:17 -0300, James Almer wrote:
> On 8/29/2022 4:27 AM, Xiang, Haihao wrote:
> > From: Haihao Xiang <haihao.xiang@intel.com>
> >
> > AV_PIX_FMT_VUYX is used in FFmpeg for 8bit 4:4:4 content on Intel HW,
> > and MFX_FOURCC_AYUV is used in the SDK
>
> Sounds like you want the VUYA pixfmt instead.
AV_PIX_FMT_VUYX is used for 4:4:4 content in the VAAPI path, AV_PIX_FMT_VUYX is
expected when creating vaapi urface. QSV is based on
VAAPI under Linux, so AV_PIX_FMT_VUYX is expected too in the QSV path when
creating vaapi surface.
>
> > ---
> > libavutil/hwcontext_qsv.c | 8 ++++++++
> > 1 file changed, 8 insertions(+)
> >
> > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
> > index 510f422562..a3350eae0f 100644
> > --- a/libavutil/hwcontext_qsv.c
> > +++ b/libavutil/hwcontext_qsv.c
> > @@ -119,6 +119,8 @@ static const struct {
> > MFX_FOURCC_YUY2 },
> > { AV_PIX_FMT_Y210,
> > MFX_FOURCC_Y210 },
> > + { AV_PIX_FMT_VUYX,
> > + MFX_FOURCC_AYUV },
> > #endif
> > };
> >
> > @@ -1502,6 +1504,12 @@ 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;
> > + surface->Data.A = frame->data[0] + 3;
>
> This will go wrong with VUYX. You need to use AV_PIX_FMT_VUYA.
frame->data[0] + 3 is valid even if alpha channel is ignored in VUYX. Intel HW
doesn't use the data in alpha channel actually, but the SDK uses Microsoft pixel
format AYUV which is the alpha version, here set a valid address to alpha
channel when mapping a VUYX AVFrame to a AYUV mfx surface.
Thanks
Haihao
>
> > + break;
> > #endif
> > default:
> > return MFX_ERR_UNSUPPORTED;
>
> _______________________________________________
> 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".
_______________________________________________
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 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX
2022-08-29 14:01 ` Xiang, Haihao
@ 2022-09-05 2:47 ` Xiang, Haihao
2022-09-05 5:04 ` Philip Langdale
0 siblings, 1 reply; 8+ messages in thread
From: Xiang, Haihao @ 2022-09-05 2:47 UTC (permalink / raw)
To: ffmpeg-devel
On Mon, 2022-08-29 at 14:01 +0000, Xiang, Haihao wrote:
> On Mon, 2022-08-29 at 08:17 -0300, James Almer wrote:
> > On 8/29/2022 4:27 AM, Xiang, Haihao wrote:
> > > From: Haihao Xiang <haihao.xiang@intel.com>
> > >
> > > AV_PIX_FMT_VUYX is used in FFmpeg for 8bit 4:4:4 content on Intel HW,
> > > and MFX_FOURCC_AYUV is used in the SDK
> >
> > Sounds like you want the VUYA pixfmt instead.
>
> AV_PIX_FMT_VUYX is used for 4:4:4 content in the VAAPI path, AV_PIX_FMT_VUYX
> is
> expected when creating vaapi urface. QSV is based on
> VAAPI under Linux, so AV_PIX_FMT_VUYX is expected too in the QSV path when
> creating vaapi surface.
>
> >
> > > ---
> > > libavutil/hwcontext_qsv.c | 8 ++++++++
> > > 1 file changed, 8 insertions(+)
> > >
> > > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
> > > index 510f422562..a3350eae0f 100644
> > > --- a/libavutil/hwcontext_qsv.c
> > > +++ b/libavutil/hwcontext_qsv.c
> > > @@ -119,6 +119,8 @@ static const struct {
> > > MFX_FOURCC_YUY2 },
> > > { AV_PIX_FMT_Y210,
> > > MFX_FOURCC_Y210 },
> > > + { AV_PIX_FMT_VUYX,
> > > + MFX_FOURCC_AYUV },
> > > #endif
> > > };
> > >
> > > @@ -1502,6 +1504,12 @@ 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;
> > > + surface->Data.A = frame->data[0] + 3;
> >
> > This will go wrong with VUYX. You need to use AV_PIX_FMT_VUYA.
>
> frame->data[0] + 3 is valid even if alpha channel is ignored in VUYX. Intel HW
> doesn't use the data in alpha channel actually, but the SDK uses Microsoft
> pixel
> format AYUV which is the alpha version, here set a valid address to alpha
> channel when mapping a VUYX AVFrame to a AYUV mfx surface.
>
Is there more comment about this patch ?
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 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX
2022-09-05 2:47 ` Xiang, Haihao
@ 2022-09-05 5:04 ` Philip Langdale
2022-09-05 6:05 ` Xiang, Haihao
0 siblings, 1 reply; 8+ messages in thread
From: Philip Langdale @ 2022-09-05 5:04 UTC (permalink / raw)
To: Xiang, Haihao; +Cc: FFmpeg development discussions and patches
On Mon, 5 Sep 2022 02:47:44 +0000
"Xiang, Haihao" <haihao.xiang-at-intel.com@ffmpeg.org> wrote:
> On Mon, 2022-08-29 at 14:01 +0000, Xiang, Haihao wrote:
> > On Mon, 2022-08-29 at 08:17 -0300, James Almer wrote:
> > > On 8/29/2022 4:27 AM, Xiang, Haihao wrote:
> > > > From: Haihao Xiang <haihao.xiang@intel.com>
> > > >
> > > > AV_PIX_FMT_VUYX is used in FFmpeg for 8bit 4:4:4 content on
> > > > Intel HW, and MFX_FOURCC_AYUV is used in the SDK
> > >
> > > Sounds like you want the VUYA pixfmt instead.
> >
> > AV_PIX_FMT_VUYX is used for 4:4:4 content in the VAAPI path,
> > AV_PIX_FMT_VUYX is
> > expected when creating vaapi urface. QSV is based on
> > VAAPI under Linux, so AV_PIX_FMT_VUYX is expected too in the QSV
> > path when creating vaapi surface.
> >
> > >
> > > > ---
> > > > libavutil/hwcontext_qsv.c | 8 ++++++++
> > > > 1 file changed, 8 insertions(+)
> > > >
> > > > diff --git a/libavutil/hwcontext_qsv.c
> > > > b/libavutil/hwcontext_qsv.c index 510f422562..a3350eae0f 100644
> > > > --- a/libavutil/hwcontext_qsv.c
> > > > +++ b/libavutil/hwcontext_qsv.c
> > > > @@ -119,6 +119,8 @@ static const struct {
> > > > MFX_FOURCC_YUY2 },
> > > > { AV_PIX_FMT_Y210,
> > > > MFX_FOURCC_Y210 },
> > > > + { AV_PIX_FMT_VUYX,
> > > > + MFX_FOURCC_AYUV },
> > > > #endif
> > > > };
> > > >
> > > > @@ -1502,6 +1504,12 @@ 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;
> > > > + surface->Data.A = frame->data[0] + 3;
> > >
> > > This will go wrong with VUYX. You need to use AV_PIX_FMT_VUYA.
> >
> > frame->data[0] + 3 is valid even if alpha channel is ignored in
> > VUYX. Intel HW doesn't use the data in alpha channel actually, but
> > the SDK uses Microsoft pixel
> > format AYUV which is the alpha version, here set a valid address to
> > alpha channel when mapping a VUYX AVFrame to a AYUV mfx surface.
> >
>
> Is there more comment about this patch ?
Wouldn't it be more correct to fill the Data.A with 0xFF rather than
using the undefined value from the frame? I assume that the encoder
actually drops the value completely so it ultimately doesn't matter,
but it makes it clear that there is no alpha and if the encoder was to
start preserving it, it would preserve the desired value.
--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] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX
2022-09-05 5:04 ` Philip Langdale
@ 2022-09-05 6:05 ` Xiang, Haihao
0 siblings, 0 replies; 8+ messages in thread
From: Xiang, Haihao @ 2022-09-05 6:05 UTC (permalink / raw)
To: ffmpeg-devel, haihao.xiang-at-intel.com
On Sun, 2022-09-04 at 22:04 -0700, Philip Langdale wrote:
> On Mon, 5 Sep 2022 02:47:44 +0000
> "Xiang, Haihao" <haihao.xiang-at-intel.com@ffmpeg.org> wrote:
>
> > On Mon, 2022-08-29 at 14:01 +0000, Xiang, Haihao wrote:
> > > On Mon, 2022-08-29 at 08:17 -0300, James Almer wrote:
> > > > On 8/29/2022 4:27 AM, Xiang, Haihao wrote:
> > > > > From: Haihao Xiang <haihao.xiang@intel.com>
> > > > >
> > > > > AV_PIX_FMT_VUYX is used in FFmpeg for 8bit 4:4:4 content on
> > > > > Intel HW, and MFX_FOURCC_AYUV is used in the SDK
> > > >
> > > > Sounds like you want the VUYA pixfmt instead.
> > >
> > > AV_PIX_FMT_VUYX is used for 4:4:4 content in the VAAPI path,
> > > AV_PIX_FMT_VUYX is
> > > expected when creating vaapi urface. QSV is based on
> > > VAAPI under Linux, so AV_PIX_FMT_VUYX is expected too in the QSV
> > > path when creating vaapi surface.
> > >
> > > >
> > > > > ---
> > > > > libavutil/hwcontext_qsv.c | 8 ++++++++
> > > > > 1 file changed, 8 insertions(+)
> > > > >
> > > > > diff --git a/libavutil/hwcontext_qsv.c
> > > > > b/libavutil/hwcontext_qsv.c index 510f422562..a3350eae0f 100644
> > > > > --- a/libavutil/hwcontext_qsv.c
> > > > > +++ b/libavutil/hwcontext_qsv.c
> > > > > @@ -119,6 +119,8 @@ static const struct {
> > > > > MFX_FOURCC_YUY2 },
> > > > > { AV_PIX_FMT_Y210,
> > > > > MFX_FOURCC_Y210 },
> > > > > + { AV_PIX_FMT_VUYX,
> > > > > + MFX_FOURCC_AYUV },
> > > > > #endif
> > > > > };
> > > > >
> > > > > @@ -1502,6 +1504,12 @@ 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;
> > > > > + surface->Data.A = frame->data[0] + 3;
> > > >
> > > > This will go wrong with VUYX. You need to use AV_PIX_FMT_VUYA.
> > >
> > > frame->data[0] + 3 is valid even if alpha channel is ignored in
> > > VUYX. Intel HW doesn't use the data in alpha channel actually, but
> > > the SDK uses Microsoft pixel
> > > format AYUV which is the alpha version, here set a valid address to
> > > alpha channel when mapping a VUYX AVFrame to a AYUV mfx surface.
> > >
> >
> > Is there more comment about this patch ?
>
> Wouldn't it be more correct to fill the Data.A with 0xFF rather than
> using the undefined value from the frame? I assume that the encoder
> actually drops the value completely so it ultimately doesn't matter,
> but it makes it clear that there is no alpha and if the encoder was to
> start preserving it, it would preserve the desired value.
Yes, you're right that the encoder drops the value. I'll add some comment in the
patch.
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
* [FFmpeg-devel] [PATCH 2/2] lavc/qsv: Add support for decoding & encoding 8bit 4:4:4 content
2022-08-12 4:20 [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYA Xiang, Haihao
@ 2022-08-12 4:20 ` Xiang, Haihao
0 siblings, 0 replies; 8+ messages in thread
From: Xiang, Haihao @ 2022-08-12 4:20 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Haihao Xiang
From: Haihao Xiang <haihao.xiang@intel.com>
AV_PIX_FMT_VUYA is used in FFmpeg and MFX_FOURCC_AYUV is used in the SDK
---
libavcodec/qsv.c | 12 ++++++++++++
libavcodec/qsvdec.c | 2 ++
libavcodec/qsvenc_hevc.c | 1 +
libavcodec/qsvenc_vp9.c | 1 +
4 files changed, 16 insertions(+)
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
index 3449789a2c..6a4730a482 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_VUYA;
#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_VUYA:
+ *fourcc = MFX_FOURCC_AYUV;
+ return AV_PIX_FMT_VUYA;
#endif
default:
return AVERROR(ENOSYS);
@@ -277,6 +281,14 @@ 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_VUYA:
+ surface->Data.V = frame->data[0];
+ surface->Data.U = frame->data[0] + 1;
+ surface->Data.Y = frame->data[0] + 2;
+ surface->Data.A = frame->data[0] + 3;
+ break;
+
default:
return AVERROR(ENOSYS);
}
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index 89ec5dcee8..f7b1371586 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_VUYA:
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_VUYA, \
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 e11f5dec4a..df6bb40648 100644
--- a/libavcodec/qsvenc_hevc.c
+++ b/libavcodec/qsvenc_hevc.c
@@ -311,6 +311,7 @@ const FFCodec ff_hevc_qsv_encoder = {
AV_PIX_FMT_QSV,
AV_PIX_FMT_BGRA,
AV_PIX_FMT_X2RGB10,
+ AV_PIX_FMT_VUYA,
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 c738da3904..5b3e24ed54 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_VUYA,
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] 8+ messages in thread
end of thread, other threads:[~2022-09-05 6:05 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-29 7:27 [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX Xiang, Haihao
2022-08-29 7:27 ` [FFmpeg-devel] [PATCH 2/2] lavc/qsv: Add support for decoding & encoding 8bit 4:4:4 content Xiang, Haihao
2022-08-29 11:17 ` [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX James Almer
2022-08-29 14:01 ` Xiang, Haihao
2022-09-05 2:47 ` Xiang, Haihao
2022-09-05 5:04 ` Philip Langdale
2022-09-05 6:05 ` Xiang, Haihao
-- strict thread matches above, loose matches on Subject: below --
2022-08-12 4:20 [FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYA Xiang, Haihao
2022-08-12 4:20 ` [FFmpeg-devel] [PATCH 2/2] lavc/qsv: Add support for decoding & encoding 8bit 4:4:4 content 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