Message ID | 1582706369-32704-1-git-send-email-linjie.fu@intel.com |
---|---|
State | Accepted |
Commit | 9723d7d523b0871159e56f8144d59bd35a0390e2 |
Headers | show |
Series | [FFmpeg-devel,v2,1/2] lavc/qsvdec: add decode support for HEVC 4:2:2 8-bit and 10-bit | expand |
Context | Check | Description |
---|---|---|
andriy/ffmpeg-patchwork | success | Make fate finished |
> From: Fu, Linjie <linjie.fu@intel.com> > Sent: Wednesday, February 26, 2020 16:39 > To: ffmpeg-devel@ffmpeg.org > Cc: Fu, Linjie <linjie.fu@intel.com> > Subject: [PATCH,v2 1/2] lavc/qsvdec: add decode support for HEVC 4:2:2 8-bit > and 10-bit > > Enables HEVC Range Extension decoding support (Linux) for 4:2:2 8/10 bit > on ICL+ (gen11 +) platform. > > Signed-off-by: Linjie Fu <linjie.fu@intel.com> > --- > [v2]: restrict to support on Linux. > > libavcodec/qsv.c | 16 ++++++++++++++++ > libavutil/hwcontext_qsv.c | 24 ++++++++++++++++++++++++ > 2 files changed, 40 insertions(+) > > diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c > index db98c75..171a8d6 100644 > --- a/libavcodec/qsv.c > +++ b/libavcodec/qsv.c > @@ -195,6 +195,12 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t > fourcc) > case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12; > case MFX_FOURCC_P010: return AV_PIX_FMT_P010; > case MFX_FOURCC_P8: return AV_PIX_FMT_PAL8; > +#if CONFIG_VAAPI > + case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; > +#if QSV_VERSION_ATLEAST(1, 27) > + case MFX_FOURCC_Y210: return AV_PIX_FMT_Y210; > +#endif > +#endif > } > return AV_PIX_FMT_NONE; > } > @@ -211,6 +217,16 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, > uint32_t *fourcc) > case AV_PIX_FMT_P010: > *fourcc = MFX_FOURCC_P010; > return AV_PIX_FMT_P010; > +#if CONFIG_VAAPI > + case AV_PIX_FMT_YUV422P: > + *fourcc = MFX_FOURCC_YUY2; > + return AV_PIX_FMT_YUYV422; > +#if QSV_VERSION_ATLEAST(1, 27) > + case AV_PIX_FMT_YUV422P10: > + *fourcc = MFX_FOURCC_Y210; > + return AV_PIX_FMT_Y210; > +#endif > +#endif > default: > return AVERROR(ENOSYS); > } > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c > index b1b6740..4306c6e3 100644 > --- a/libavutil/hwcontext_qsv.c > +++ b/libavutil/hwcontext_qsv.c > @@ -44,6 +44,10 @@ > #include "pixdesc.h" > #include "time.h" > > +#define QSV_VERSION_ATLEAST(MAJOR, MINOR) \ > + (MFX_VERSION_MAJOR > (MAJOR) || \ > + MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= > (MINOR)) > + > typedef struct QSVDevicePriv { > AVBufferRef *child_device_ctx; > } QSVDevicePriv; > @@ -103,6 +107,14 @@ static const struct { > { AV_PIX_FMT_BGRA, MFX_FOURCC_RGB4 }, > { AV_PIX_FMT_P010, MFX_FOURCC_P010 }, > { AV_PIX_FMT_PAL8, MFX_FOURCC_P8 }, > +#if CONFIG_VAAPI > + { AV_PIX_FMT_YUYV422, > + MFX_FOURCC_YUY2 }, > +#if QSV_VERSION_ATLEAST(1, 27) > + { AV_PIX_FMT_Y210, > + MFX_FOURCC_Y210 }, > +#endif > +#endif > }; > > static uint32_t qsv_fourcc_from_pix_fmt(enum AVPixelFormat pix_fmt) > @@ -773,7 +785,19 @@ static int map_frame_to_surface(const AVFrame > *frame, mfxFrameSurface1 *surface) > surface->Data.R = frame->data[0] + 2; > surface->Data.A = frame->data[0] + 3; > break; > +#if CONFIG_VAAPI > + case AV_PIX_FMT_YUYV422: > + surface->Data.Y = frame->data[0]; > + surface->Data.U = frame->data[0] + 1; > + surface->Data.V = frame->data[0] + 3; > + break; > > + case AV_PIX_FMT_Y210: > + surface->Data.Y16 = (mfxU16 *)frame->data[0]; > + surface->Data.U16 = (mfxU16 *)frame->data[0] + 1; > + surface->Data.V16 = (mfxU16 *)frame->data[0] + 3; > + break; > +#endif > default: > return MFX_ERR_UNSUPPORTED; > } > -- Ping for the patch set for 422 8/10 bit: https://patchwork.ffmpeg.org/project/ffmpeg/patch/1582706369-32704-1-git-send-email-linjie.fu@intel.com/ https://patchwork.ffmpeg.org/project/ffmpeg/patch/1582706402-439-1-git-send-email-linjie.fu@intel.com/
Linjie Fu <linjie.fu@intel.com> 于2020年2月26日周三 下午4:43写道: > > Enables HEVC Range Extension decoding support (Linux) for 4:2:2 8/10 bit > on ICL+ (gen11 +) platform. > > Signed-off-by: Linjie Fu <linjie.fu@intel.com> > --- > [v2]: restrict to support on Linux. > > libavcodec/qsv.c | 16 ++++++++++++++++ > libavutil/hwcontext_qsv.c | 24 ++++++++++++++++++++++++ > 2 files changed, 40 insertions(+) > > diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c > index db98c75..171a8d6 100644 > --- a/libavcodec/qsv.c > +++ b/libavcodec/qsv.c > @@ -195,6 +195,12 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) > case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12; > case MFX_FOURCC_P010: return AV_PIX_FMT_P010; > case MFX_FOURCC_P8: return AV_PIX_FMT_PAL8; > +#if CONFIG_VAAPI > + case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; There is no VAAPI structures here, so should not use CONFIG_VAAPI to disable them. > +#if QSV_VERSION_ATLEAST(1, 27) > + case MFX_FOURCC_Y210: return AV_PIX_FMT_Y210; > +#endif > +#endif > } > return AV_PIX_FMT_NONE; > } > @@ -211,6 +217,16 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) > case AV_PIX_FMT_P010: > *fourcc = MFX_FOURCC_P010; > return AV_PIX_FMT_P010; > +#if CONFIG_VAAPI > + case AV_PIX_FMT_YUV422P: > + *fourcc = MFX_FOURCC_YUY2; > + return AV_PIX_FMT_YUYV422; > +#if QSV_VERSION_ATLEAST(1, 27) > + case AV_PIX_FMT_YUV422P10: > + *fourcc = MFX_FOURCC_Y210; > + return AV_PIX_FMT_Y210; > +#endif > +#endif > default: > return AVERROR(ENOSYS); > } > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c > index b1b6740..4306c6e3 100644 > --- a/libavutil/hwcontext_qsv.c > +++ b/libavutil/hwcontext_qsv.c > @@ -44,6 +44,10 @@ > #include "pixdesc.h" > #include "time.h" > > +#define QSV_VERSION_ATLEAST(MAJOR, MINOR) \ > + (MFX_VERSION_MAJOR > (MAJOR) || \ > + MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= (MINOR)) > + > typedef struct QSVDevicePriv { > AVBufferRef *child_device_ctx; > } QSVDevicePriv; > @@ -103,6 +107,14 @@ static const struct { > { AV_PIX_FMT_BGRA, MFX_FOURCC_RGB4 }, > { AV_PIX_FMT_P010, MFX_FOURCC_P010 }, > { AV_PIX_FMT_PAL8, MFX_FOURCC_P8 }, > +#if CONFIG_VAAPI > + { AV_PIX_FMT_YUYV422, > + MFX_FOURCC_YUY2 }, > +#if QSV_VERSION_ATLEAST(1, 27) > + { AV_PIX_FMT_Y210, > + MFX_FOURCC_Y210 }, > +#endif > +#endif > }; > > static uint32_t qsv_fourcc_from_pix_fmt(enum AVPixelFormat pix_fmt) > @@ -773,7 +785,19 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) > surface->Data.R = frame->data[0] + 2; > surface->Data.A = frame->data[0] + 3; > break; > +#if CONFIG_VAAPI > + case AV_PIX_FMT_YUYV422: > + surface->Data.Y = frame->data[0]; > + surface->Data.U = frame->data[0] + 1; > + surface->Data.V = frame->data[0] + 3; > + break; > > + case AV_PIX_FMT_Y210: > + surface->Data.Y16 = (mfxU16 *)frame->data[0]; > + surface->Data.U16 = (mfxU16 *)frame->data[0] + 1; > + surface->Data.V16 = (mfxU16 *)frame->data[0] + 3; > + break; > +#endif > default: > return MFX_ERR_UNSUPPORTED; > } > -- > 2.7.4 > > _______________________________________________ > 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".
> From: Zhong Li <lizhong1008@gmail.com> > Sent: Wednesday, April 15, 2020 09:58 > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Cc: Fu, Linjie <linjie.fu@intel.com> > Subject: Re: [FFmpeg-devel] [PATCH, v2 1/2] lavc/qsvdec: add decode > support for HEVC 4:2:2 8-bit and 10-bit > > Linjie Fu <linjie.fu@intel.com> 于2020年2月26日周三 下午4:43写道: > > > > Enables HEVC Range Extension decoding support (Linux) for 4:2:2 8/10 bit > > on ICL+ (gen11 +) platform. > > > > Signed-off-by: Linjie Fu <linjie.fu@intel.com> > > --- > > [v2]: restrict to support on Linux. > > > > libavcodec/qsv.c | 16 ++++++++++++++++ > > libavutil/hwcontext_qsv.c | 24 ++++++++++++++++++++++++ > > 2 files changed, 40 insertions(+) > > > > diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c > > index db98c75..171a8d6 100644 > > --- a/libavcodec/qsv.c > > +++ b/libavcodec/qsv.c > > @@ -195,6 +195,12 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t > fourcc) > > case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12; > > case MFX_FOURCC_P010: return AV_PIX_FMT_P010; > > case MFX_FOURCC_P8: return AV_PIX_FMT_PAL8; > > +#if CONFIG_VAAPI > > + case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; > > There is no VAAPI structures here, so should not use CONFIG_VAAPI to > disable them. > This is pointed out in [1] that D3D code doesn't support YUYV format, and indeed It leads to unexpected crash in windows.(instead of working or reporting unsupported On ICL- platform) Hence this patch restricted to add support on linux only. And I admit the best solution should be get this fully supported on both linux and windows. (I believe Max and Artem is helping on windows side) Thanks for the review, Linjie [1] https://patchwork.ffmpeg.org/project/ffmpeg/patch/1582596080-1035-1-git-send-email-linjie.fu@intel.com/
On Wed, 15 Apr 2020 at 05:02, Fu, Linjie <linjie.fu@intel.com> wrote: > > From: Zhong Li <lizhong1008@gmail.com> > > Sent: Wednesday, April 15, 2020 09:58 > > To: FFmpeg development discussions and patches <ffmpeg- > > devel@ffmpeg.org> > > Cc: Fu, Linjie <linjie.fu@intel.com> > > Subject: Re: [FFmpeg-devel] [PATCH, v2 1/2] lavc/qsvdec: add decode > > support for HEVC 4:2:2 8-bit and 10-bit > > > > Linjie Fu <linjie.fu@intel.com> 于2020年2月26日周三 下午4:43写道: > > > > > > Enables HEVC Range Extension decoding support (Linux) for 4:2:2 8/10 > bit > > > on ICL+ (gen11 +) platform. > > > > > > Signed-off-by: Linjie Fu <linjie.fu@intel.com> > > > --- > > > [v2]: restrict to support on Linux. > > > > > > libavcodec/qsv.c | 16 ++++++++++++++++ > > > libavutil/hwcontext_qsv.c | 24 ++++++++++++++++++++++++ > > > 2 files changed, 40 insertions(+) > > > > > > diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c > > > index db98c75..171a8d6 100644 > > > --- a/libavcodec/qsv.c > > > +++ b/libavcodec/qsv.c > > > @@ -195,6 +195,12 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t > > fourcc) > > > case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12; > > > case MFX_FOURCC_P010: return AV_PIX_FMT_P010; > > > case MFX_FOURCC_P8: return AV_PIX_FMT_PAL8; > > > +#if CONFIG_VAAPI > LGTM. CONFIG_VAAPI is not needed here because crash does not related to these changes. Full support MFX_FOURCC_YUY2 is WIP for Windows. > > > + case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; > > > > There is no VAAPI structures here, so should not use CONFIG_VAAPI to > > disable them. > > > > This is pointed out in [1] that D3D code doesn't support YUYV format, and > indeed > It leads to unexpected crash in windows.(instead of working or reporting > unsupported > On ICL- platform) > > Hence this patch restricted to add support on linux only. > > And I admit the best solution should be get this fully supported on both > linux and windows. > (I believe Max and Artem is helping on windows side) > > Thanks for the review, > Linjie > > [1] > https://patchwork.ffmpeg.org/project/ffmpeg/patch/1582596080-1035-1-git-send-email-linjie.fu@intel.com/ > > > _______________________________________________ > 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".
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Artem Galin > Sent: Tuesday, April 28, 2020 00:26 > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Cc: Zhong Li <lizhong1008@gmail.com> > Subject: Re: [FFmpeg-devel] [PATCH, v2 1/2] lavc/qsvdec: add decode > support for HEVC 4:2:2 8-bit and 10-bit > > On Wed, 15 Apr 2020 at 05:02, Fu, Linjie <linjie.fu@intel.com> wrote: > > > > From: Zhong Li <lizhong1008@gmail.com> > > > Sent: Wednesday, April 15, 2020 09:58 > > > To: FFmpeg development discussions and patches <ffmpeg- > > > devel@ffmpeg.org> > > > Cc: Fu, Linjie <linjie.fu@intel.com> > > > Subject: Re: [FFmpeg-devel] [PATCH, v2 1/2] lavc/qsvdec: add decode > > > support for HEVC 4:2:2 8-bit and 10-bit > > > > > > Linjie Fu <linjie.fu@intel.com> 于2020年2月26日周三 下午4:43写道: > > > > > > > > Enables HEVC Range Extension decoding support (Linux) for 4:2:2 8/10 > > bit > > > > on ICL+ (gen11 +) platform. > > > > > > > > Signed-off-by: Linjie Fu <linjie.fu@intel.com> > > > > --- > > > > [v2]: restrict to support on Linux. > > > > > > > > libavcodec/qsv.c | 16 ++++++++++++++++ > > > > libavutil/hwcontext_qsv.c | 24 ++++++++++++++++++++++++ > > > > 2 files changed, 40 insertions(+) > > > > > > > > diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c > > > > index db98c75..171a8d6 100644 > > > > --- a/libavcodec/qsv.c > > > > +++ b/libavcodec/qsv.c > > > > @@ -195,6 +195,12 @@ enum AVPixelFormat > ff_qsv_map_fourcc(uint32_t > > > fourcc) > > > > case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12; > > > > case MFX_FOURCC_P010: return AV_PIX_FMT_P010; > > > > case MFX_FOURCC_P8: return AV_PIX_FMT_PAL8; > > > > +#if CONFIG_VAAPI > > > LGTM. CONFIG_VAAPI is not needed here because crash does not related to > these changes. > Full support MFX_FOURCC_YUY2 is WIP for Windows. > > > > > + case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; > > > > > > There is no VAAPI structures here, so should not use CONFIG_VAAPI to > > > disable them. > > > > > > > This is pointed out in [1] that D3D code doesn't support YUYV format, and > > indeed > > It leads to unexpected crash in windows.(instead of working or reporting > > unsupported > > On ICL- platform) > > > > Hence this patch restricted to add support on linux only. > > > > And I admit the best solution should be get this fully supported on both > > linux and windows. > > (I believe Max and Artem is helping on windows side) > > > > Thanks for the review, > > Linjie > > > > [1] > > https://patchwork.ffmpeg.org/project/ffmpeg/patch/1582596080-1035-1- > git-send-email-linjie.fu@intel.com/ Synced with Zhong, will keep the restriction for now and apply this set soon. (if no objections) - Linjie
On Fri, May 15, 2020 at 9:06 AM Fu, Linjie <linjie.fu@intel.com> wrote: > > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > > Artem Galin > > Sent: Tuesday, April 28, 2020 00:26 > > To: FFmpeg development discussions and patches <ffmpeg- > > devel@ffmpeg.org> > > Cc: Zhong Li <lizhong1008@gmail.com> > > Subject: Re: [FFmpeg-devel] [PATCH, v2 1/2] lavc/qsvdec: add decode > > support for HEVC 4:2:2 8-bit and 10-bit > > > > On Wed, 15 Apr 2020 at 05:02, Fu, Linjie <linjie.fu@intel.com> wrote: > > > > > > From: Zhong Li <lizhong1008@gmail.com> > > > > Sent: Wednesday, April 15, 2020 09:58 > > > > To: FFmpeg development discussions and patches <ffmpeg- > > > > devel@ffmpeg.org> > > > > Cc: Fu, Linjie <linjie.fu@intel.com> > > > > Subject: Re: [FFmpeg-devel] [PATCH, v2 1/2] lavc/qsvdec: add decode > > > > support for HEVC 4:2:2 8-bit and 10-bit > > > > > > > > Linjie Fu <linjie.fu@intel.com> 于2020年2月26日周三 下午4:43写道: > > > > > > > > > > Enables HEVC Range Extension decoding support (Linux) for 4:2:2 > 8/10 > > > bit > > > > > on ICL+ (gen11 +) platform. > > > > > > > > > > Signed-off-by: Linjie Fu <linjie.fu@intel.com> > > > > > --- > > > > > [v2]: restrict to support on Linux. > > > > > > > > > > libavcodec/qsv.c | 16 ++++++++++++++++ > > > > > libavutil/hwcontext_qsv.c | 24 ++++++++++++++++++++++++ > > > > > 2 files changed, 40 insertions(+) > > > > > > > > > > diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c > > > > > index db98c75..171a8d6 100644 > > > > > --- a/libavcodec/qsv.c > > > > > +++ b/libavcodec/qsv.c > > > > > @@ -195,6 +195,12 @@ enum AVPixelFormat > > ff_qsv_map_fourcc(uint32_t > > > > fourcc) > > > > > case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12; > > > > > case MFX_FOURCC_P010: return AV_PIX_FMT_P010; > > > > > case MFX_FOURCC_P8: return AV_PIX_FMT_PAL8; > > > > > +#if CONFIG_VAAPI > > > > > LGTM. CONFIG_VAAPI is not needed here because crash does not related to > > these changes. > > Full support MFX_FOURCC_YUY2 is WIP for Windows. > > > > > > > + case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; > > > > > > > > There is no VAAPI structures here, so should not use CONFIG_VAAPI to > > > > disable them. > > > > > > > > > > This is pointed out in [1] that D3D code doesn't support YUYV format, > and > > > indeed > > > It leads to unexpected crash in windows.(instead of working or > reporting > > > unsupported > > > On ICL- platform) > > > > > > Hence this patch restricted to add support on linux only. > > > > > > And I admit the best solution should be get this fully supported on > both > > > linux and windows. > > > (I believe Max and Artem is helping on windows side) > > > > > > Thanks for the review, > > > Linjie > > > > > > [1] > > > https://patchwork.ffmpeg.org/project/ffmpeg/patch/1582596080-1035-1- > > git-send-email-linjie.fu@intel.com/ > > Synced with Zhong, will keep the restriction for now and apply this set > soon. (if no objections) > > it make sense, as patch is clearly Linux focused > - Linjie > _______________________________________________ > 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". regards Max
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Max Dmitrichenko > Sent: Friday, May 15, 2020 16:19 > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Cc: Zhong Li <lizhong1008@gmail.com> > Subject: Re: [FFmpeg-devel] [PATCH, v2 1/2] lavc/qsvdec: add decode > support for HEVC 4:2:2 8-bit and 10-bit > > On Fri, May 15, 2020 at 9:06 AM Fu, Linjie <linjie.fu@intel.com> wrote: > > > > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > > > Artem Galin > > > Sent: Tuesday, April 28, 2020 00:26 > > > To: FFmpeg development discussions and patches <ffmpeg- > > > devel@ffmpeg.org> > > > Cc: Zhong Li <lizhong1008@gmail.com> > > > Subject: Re: [FFmpeg-devel] [PATCH, v2 1/2] lavc/qsvdec: add decode > > > support for HEVC 4:2:2 8-bit and 10-bit > > > > > > On Wed, 15 Apr 2020 at 05:02, Fu, Linjie <linjie.fu@intel.com> wrote: > > > > > > > > From: Zhong Li <lizhong1008@gmail.com> > > > > > Sent: Wednesday, April 15, 2020 09:58 > > > > > To: FFmpeg development discussions and patches <ffmpeg- > > > > > devel@ffmpeg.org> > > > > > Cc: Fu, Linjie <linjie.fu@intel.com> > > > > > Subject: Re: [FFmpeg-devel] [PATCH, v2 1/2] lavc/qsvdec: add decode > > > > > support for HEVC 4:2:2 8-bit and 10-bit > > > > > > > > > > Linjie Fu <linjie.fu@intel.com> 于2020年2月26日周三 下午4:43 > 写道: > > > > > > > > > > > > Enables HEVC Range Extension decoding support (Linux) for 4:2:2 > > 8/10 > > > > bit > > > > > > on ICL+ (gen11 +) platform. > > > > > > > > > > > > Signed-off-by: Linjie Fu <linjie.fu@intel.com> > > > > > > --- > > > > > > [v2]: restrict to support on Linux. > > > > > > > > > > > > libavcodec/qsv.c | 16 ++++++++++++++++ > > > > > > libavutil/hwcontext_qsv.c | 24 ++++++++++++++++++++++++ > > > > > > 2 files changed, 40 insertions(+) > > > > > > > > > > > > diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c > > > > > > index db98c75..171a8d6 100644 > > > > > > --- a/libavcodec/qsv.c > > > > > > +++ b/libavcodec/qsv.c > > > > > > @@ -195,6 +195,12 @@ enum AVPixelFormat > > > ff_qsv_map_fourcc(uint32_t > > > > > fourcc) > > > > > > case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12; > > > > > > case MFX_FOURCC_P010: return AV_PIX_FMT_P010; > > > > > > case MFX_FOURCC_P8: return AV_PIX_FMT_PAL8; > > > > > > +#if CONFIG_VAAPI > > > > > > > LGTM. CONFIG_VAAPI is not needed here because crash does not > related to > > > these changes. > > > Full support MFX_FOURCC_YUY2 is WIP for Windows. > > > > > > > > > + case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; > > > > > > > > > > There is no VAAPI structures here, so should not use CONFIG_VAAPI > to > > > > > disable them. > > > > > > > > > > > > > This is pointed out in [1] that D3D code doesn't support YUYV format, > > and > > > > indeed > > > > It leads to unexpected crash in windows.(instead of working or > > reporting > > > > unsupported > > > > On ICL- platform) > > > > > > > > Hence this patch restricted to add support on linux only. > > > > > > > > And I admit the best solution should be get this fully supported on > > both > > > > linux and windows. > > > > (I believe Max and Artem is helping on windows side) > > > > > > > > Thanks for the review, > > > > Linjie > > > > > > > > [1] > > > > https://patchwork.ffmpeg.org/project/ffmpeg/patch/1582596080- > 1035-1- > > > git-send-email-linjie.fu@intel.com/ > > > > Synced with Zhong, will keep the restriction for now and apply this set > > soon. (if no objections) > > > > > it make sense, as patch is clearly Linux focused > Thanks, applied. - Linjie
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c index db98c75..171a8d6 100644 --- a/libavcodec/qsv.c +++ b/libavcodec/qsv.c @@ -195,6 +195,12 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12; case MFX_FOURCC_P010: return AV_PIX_FMT_P010; case MFX_FOURCC_P8: return AV_PIX_FMT_PAL8; +#if CONFIG_VAAPI + case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; +#if QSV_VERSION_ATLEAST(1, 27) + case MFX_FOURCC_Y210: return AV_PIX_FMT_Y210; +#endif +#endif } return AV_PIX_FMT_NONE; } @@ -211,6 +217,16 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) case AV_PIX_FMT_P010: *fourcc = MFX_FOURCC_P010; return AV_PIX_FMT_P010; +#if CONFIG_VAAPI + case AV_PIX_FMT_YUV422P: + *fourcc = MFX_FOURCC_YUY2; + return AV_PIX_FMT_YUYV422; +#if QSV_VERSION_ATLEAST(1, 27) + case AV_PIX_FMT_YUV422P10: + *fourcc = MFX_FOURCC_Y210; + return AV_PIX_FMT_Y210; +#endif +#endif default: return AVERROR(ENOSYS); } diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index b1b6740..4306c6e3 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -44,6 +44,10 @@ #include "pixdesc.h" #include "time.h" +#define QSV_VERSION_ATLEAST(MAJOR, MINOR) \ + (MFX_VERSION_MAJOR > (MAJOR) || \ + MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= (MINOR)) + typedef struct QSVDevicePriv { AVBufferRef *child_device_ctx; } QSVDevicePriv; @@ -103,6 +107,14 @@ static const struct { { AV_PIX_FMT_BGRA, MFX_FOURCC_RGB4 }, { AV_PIX_FMT_P010, MFX_FOURCC_P010 }, { AV_PIX_FMT_PAL8, MFX_FOURCC_P8 }, +#if CONFIG_VAAPI + { AV_PIX_FMT_YUYV422, + MFX_FOURCC_YUY2 }, +#if QSV_VERSION_ATLEAST(1, 27) + { AV_PIX_FMT_Y210, + MFX_FOURCC_Y210 }, +#endif +#endif }; static uint32_t qsv_fourcc_from_pix_fmt(enum AVPixelFormat pix_fmt) @@ -773,7 +785,19 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) surface->Data.R = frame->data[0] + 2; surface->Data.A = frame->data[0] + 3; break; +#if CONFIG_VAAPI + case AV_PIX_FMT_YUYV422: + surface->Data.Y = frame->data[0]; + surface->Data.U = frame->data[0] + 1; + surface->Data.V = frame->data[0] + 3; + break; + case AV_PIX_FMT_Y210: + surface->Data.Y16 = (mfxU16 *)frame->data[0]; + surface->Data.U16 = (mfxU16 *)frame->data[0] + 1; + surface->Data.V16 = (mfxU16 *)frame->data[0] + 3; + break; +#endif default: return MFX_ERR_UNSUPPORTED; }
Enables HEVC Range Extension decoding support (Linux) for 4:2:2 8/10 bit on ICL+ (gen11 +) platform. Signed-off-by: Linjie Fu <linjie.fu@intel.com> --- [v2]: restrict to support on Linux. libavcodec/qsv.c | 16 ++++++++++++++++ libavutil/hwcontext_qsv.c | 24 ++++++++++++++++++++++++ 2 files changed, 40 insertions(+)