qsv: Add util methods for video format mapping

Remove duplicated format mapping code

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5706>
This commit is contained in:
Seungha Yang 2023-11-21 20:56:36 +09:00
parent 801492b334
commit 0178cc188b
15 changed files with 214 additions and 241 deletions

View file

@ -199,33 +199,7 @@ gst_qsv_allocator_alloc_default (GstQsvAllocator * self, gboolean dummy_alloc,
return MFX_ERR_UNSUPPORTED; return MFX_ERR_UNSUPPORTED;
} }
switch (request->Info.FourCC) { format = gst_qsv_frame_info_format_to_gst (&request->Info);
case MFX_FOURCC_NV12:
format = GST_VIDEO_FORMAT_NV12;
break;
case MFX_FOURCC_P010:
format = GST_VIDEO_FORMAT_P010_10LE;
break;
case MFX_FOURCC_P016:
format = GST_VIDEO_FORMAT_P016_LE;
break;
case MFX_FOURCC_AYUV:
format = GST_VIDEO_FORMAT_VUYA;
break;
case MFX_FOURCC_Y410:
format = GST_VIDEO_FORMAT_Y410;
break;
case MFX_FOURCC_YUY2:
format = GST_VIDEO_FORMAT_YUY2;
break;
case MFX_FOURCC_RGB4:
format = GST_VIDEO_FORMAT_BGRA;
break;
default:
/* TODO: add more formats */
break;
}
if (format == GST_VIDEO_FORMAT_UNKNOWN) { if (format == GST_VIDEO_FORMAT_UNKNOWN) {
GST_ERROR_OBJECT (self, "Unknown MFX format fourcc %" GST_FOURCC_FORMAT, GST_ERROR_OBJECT (self, "Unknown MFX format fourcc %" GST_FOURCC_FORMAT,
GST_FOURCC_ARGS (request->Info.FourCC)); GST_FOURCC_ARGS (request->Info.FourCC));
@ -408,49 +382,56 @@ gst_qsv_allocator_lock (mfxHDL pthis, mfxMemId mid, mfxFrameData * ptr)
frame->map_count++; frame->map_count++;
stride = GST_VIDEO_FRAME_PLANE_STRIDE (&frame->frame, 0); stride = GST_VIDEO_FRAME_PLANE_STRIDE (&frame->frame, 0);
ptr->PitchHigh = (mfxU16) (stride / (1 << 16));
ptr->PitchLow = (mfxU16) (stride % (1 << 16));
/* FIXME: check and handle other formats */ /* FIXME: check and handle other formats */
switch (GST_VIDEO_INFO_FORMAT (&frame->info)) { switch (GST_VIDEO_INFO_FORMAT (&frame->info)) {
case GST_VIDEO_FORMAT_NV12: case GST_VIDEO_FORMAT_NV12:
case GST_VIDEO_FORMAT_P010_10LE: case GST_VIDEO_FORMAT_P010_10LE:
case GST_VIDEO_FORMAT_P012_LE:
case GST_VIDEO_FORMAT_P016_LE: case GST_VIDEO_FORMAT_P016_LE:
ptr->Pitch = (mfxU16) stride;
ptr->Y = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0); ptr->Y = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0);
ptr->UV = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 1); ptr->UV = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 1);
break; break;
case GST_VIDEO_FORMAT_YUY2:
ptr->Y = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0);
ptr->U = ptr->Y + 1;
ptr->V = ptr->Y + 3;
break;
case GST_VIDEO_FORMAT_Y210:
case GST_VIDEO_FORMAT_Y212_LE:
ptr->Y16 = (mfxU16 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0);
ptr->U16 = ptr->Y16 + 1;
ptr->V16 = ptr->Y16 + 3;
break;
case GST_VIDEO_FORMAT_VUYA: case GST_VIDEO_FORMAT_VUYA:
ptr->PitchHigh = (mfxU16) (stride / (1 << 16));
ptr->PitchLow = (mfxU16) (stride % (1 << 16));
ptr->V = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0); ptr->V = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0);
ptr->U = ptr->V + 1; ptr->U = ptr->V + 1;
ptr->Y = ptr->V + 2; ptr->Y = ptr->V + 2;
ptr->A = ptr->V + 3; ptr->A = ptr->V + 3;
break; break;
case GST_VIDEO_FORMAT_Y410: case GST_VIDEO_FORMAT_Y410:
ptr->PitchHigh = (mfxU16) (stride / (1 << 16));
ptr->PitchLow = (mfxU16) (stride % (1 << 16));
ptr->Y410 = (mfxY410 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0); ptr->Y410 = (mfxY410 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0);
break; break;
case GST_VIDEO_FORMAT_Y412_LE:
ptr->U = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0);
ptr->Y = ptr->Y + 2;
ptr->V = ptr->Y + 4;
ptr->A = ptr->Y + 6;
break;
case GST_VIDEO_FORMAT_BGRA: case GST_VIDEO_FORMAT_BGRA:
ptr->Pitch = (mfxU16) stride;
ptr->B = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0); ptr->B = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0);
ptr->G = ptr->B + 1; ptr->G = ptr->B + 1;
ptr->R = ptr->B + 2; ptr->R = ptr->B + 2;
ptr->A = ptr->B + 3; ptr->A = ptr->B + 3;
break; break;
case GST_VIDEO_FORMAT_RGBA: case GST_VIDEO_FORMAT_RGBA:
ptr->Pitch = (mfxU16) stride;
ptr->R = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0); ptr->R = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0);
ptr->G = ptr->R + 1; ptr->G = ptr->R + 1;
ptr->B = ptr->R + 2; ptr->B = ptr->R + 2;
ptr->A = ptr->R + 3; ptr->A = ptr->R + 3;
break; break;
case GST_VIDEO_FORMAT_YUY2:
ptr->Pitch = (mfxU16) stride;
ptr->Y = (mfxU8 *) GST_VIDEO_FRAME_PLANE_DATA (&frame->frame, 0);
ptr->U = ptr->Y + 1;
ptr->V = ptr->Y + 3;
break;
default: default:
break; break;
} }

View file

@ -22,6 +22,7 @@
#include <gst/gst.h> #include <gst/gst.h>
#include <gst/video/video.h> #include <gst/video/video.h>
#include <mfx.h> #include <mfx.h>
#include "gstqsvutils.h"
G_BEGIN_DECLS G_BEGIN_DECLS

View file

@ -89,7 +89,7 @@ gst_qsv_d3d11_allocator_alloc (GstQsvAllocator * allocator,
mfxFrameAllocResponse * response) mfxFrameAllocResponse * response)
{ {
GstQsvD3D11Allocator *self = GST_QSV_D3D11_ALLOCATOR (allocator); GstQsvD3D11Allocator *self = GST_QSV_D3D11_ALLOCATOR (allocator);
DXGI_FORMAT dxgi_format = DXGI_FORMAT_UNKNOWN; GstVideoFormat format = GST_VIDEO_FORMAT_UNKNOWN;
GstQsvFrame **mids = nullptr; GstQsvFrame **mids = nullptr;
/* Something unexpected and went wrong */ /* Something unexpected and went wrong */
@ -99,37 +99,9 @@ gst_qsv_d3d11_allocator_alloc (GstQsvAllocator * allocator,
return MFX_ERR_UNSUPPORTED; return MFX_ERR_UNSUPPORTED;
} }
switch (request->Info.FourCC) { format = gst_qsv_frame_info_format_to_gst (&request->Info);
case MFX_FOURCC_NV12:
dxgi_format = DXGI_FORMAT_NV12;
break;
case MFX_FOURCC_P010:
dxgi_format = DXGI_FORMAT_P010;
break;
case MFX_FOURCC_P016:
dxgi_format = DXGI_FORMAT_P016;
break;
case MFX_FOURCC_AYUV:
dxgi_format = DXGI_FORMAT_AYUV;
break;
case MFX_FOURCC_Y410:
dxgi_format = DXGI_FORMAT_Y410;
break;
case MFX_FOURCC_RGB4:
dxgi_format = DXGI_FORMAT_B8G8R8A8_UNORM;
break;
case MFX_FOURCC_BGR4:
dxgi_format = DXGI_FORMAT_R8G8B8A8_UNORM;
break;
case MFX_FOURCC_YUY2:
dxgi_format = DXGI_FORMAT_YUY2;
break;
default:
/* TODO: add more formats */
break;
}
if (dxgi_format == DXGI_FORMAT_UNKNOWN && if (format == GST_VIDEO_FORMAT_UNKNOWN &&
request->Info.FourCC != MFX_FOURCC_P8) { request->Info.FourCC != MFX_FOURCC_P8) {
GST_ERROR_OBJECT (self, "Failed to convert %d to DXGI format", GST_ERROR_OBJECT (self, "Failed to convert %d to DXGI format",
request->Info.FourCC); request->Info.FourCC);
@ -175,7 +147,6 @@ gst_qsv_d3d11_allocator_alloc (GstQsvAllocator * allocator,
nullptr); nullptr);
} else { } else {
GstBufferPool *pool; GstBufferPool *pool;
GstVideoFormat format;
GstVideoInfo info; GstVideoInfo info;
GstCaps *caps; GstCaps *caps;
GstStructure *config; GstStructure *config;
@ -207,7 +178,6 @@ gst_qsv_d3d11_allocator_alloc (GstQsvAllocator * allocator,
mids = g_new0 (GstQsvFrame *, request->NumFrameSuggested); mids = g_new0 (GstQsvFrame *, request->NumFrameSuggested);
response->NumFrameActual = request->NumFrameSuggested; response->NumFrameActual = request->NumFrameSuggested;
format = gst_d3d11_dxgi_format_to_gst (dxgi_format);
gst_video_info_set_format (&info, gst_video_info_set_format (&info,
format, request->Info.CropW, request->Info.CropH); format, request->Info.CropW, request->Info.CropH);

View file

@ -459,6 +459,7 @@ gst_qsv_av1_enc_set_format (GstQsvEncoder * encoder,
mfxFrameInfo *frame_info; mfxFrameInfo *frame_info;
mfxExtAV1BitstreamParam *bs_param; mfxExtAV1BitstreamParam *bs_param;
mfxExtAV1ResolutionParam *res_param; mfxExtAV1ResolutionParam *res_param;
GstVideoFormat format;
frame_info = &param->mfx.FrameInfo; frame_info = &param->mfx.FrameInfo;
@ -481,24 +482,15 @@ gst_qsv_av1_enc_set_format (GstQsvEncoder * encoder,
frame_info->AspectRatioW = GST_VIDEO_INFO_PAR_N (info); frame_info->AspectRatioW = GST_VIDEO_INFO_PAR_N (info);
frame_info->AspectRatioH = GST_VIDEO_INFO_PAR_D (info); frame_info->AspectRatioH = GST_VIDEO_INFO_PAR_D (info);
switch (GST_VIDEO_INFO_FORMAT (info)) { format = GST_VIDEO_INFO_FORMAT (info);
switch (format) {
case GST_VIDEO_FORMAT_NV12: case GST_VIDEO_FORMAT_NV12:
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV420;
frame_info->FourCC = MFX_FOURCC_NV12;
frame_info->BitDepthLuma = 8;
frame_info->BitDepthChroma = 8;
frame_info->Shift = 0;
break;
case GST_VIDEO_FORMAT_P010_10LE: case GST_VIDEO_FORMAT_P010_10LE:
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV420; gst_qsv_frame_info_set_format (frame_info, format);
frame_info->FourCC = MFX_FOURCC_P010;
frame_info->BitDepthLuma = 10;
frame_info->BitDepthChroma = 10;
frame_info->Shift = 1;
break; break;
default: default:
GST_ERROR_OBJECT (self, "Unexpected format %s", GST_ERROR_OBJECT (self, "Unexpected format %s",
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (info))); gst_video_format_to_string (format));
return FALSE; return FALSE;
} }
@ -677,21 +669,11 @@ gst_qsv_av1_enc_register (GstPlugin * plugin, guint rank, guint impl_index,
resolution_param.FrameHeight = 240; resolution_param.FrameHeight = 240;
/* MAIN profile covers NV12 and P010 */ /* MAIN profile covers NV12 and P010 */
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_NV12);
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.Shift = 0;
if (MFXVideoENCODE_Query (session, &param, &param) == MFX_ERR_NONE) if (MFXVideoENCODE_Query (session, &param, &param) == MFX_ERR_NONE)
supported_formats.push_back ("NV12"); supported_formats.push_back ("NV12");
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_P010_10LE);
mfx->FrameInfo.FourCC = MFX_FOURCC_P010;
mfx->FrameInfo.BitDepthLuma = 10;
mfx->FrameInfo.BitDepthChroma = 10;
mfx->FrameInfo.Shift = 1;
if (MFXVideoENCODE_Query (session, &param, &param) == MFX_ERR_NONE) if (MFXVideoENCODE_Query (session, &param, &param) == MFX_ERR_NONE)
supported_formats.push_back ("P010_10LE"); supported_formats.push_back ("P010_10LE");
@ -700,11 +682,7 @@ gst_qsv_av1_enc_register (GstPlugin * plugin, guint rank, guint impl_index,
return; return;
} }
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_NV12);
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.Shift = 0;
/* Check max-resolution */ /* Check max-resolution */
for (guint i = 0; i < G_N_ELEMENTS (gst_qsv_resolutions); i++) { for (guint i = 0; i < G_N_ELEMENTS (gst_qsv_resolutions); i++) {

View file

@ -1208,23 +1208,6 @@ gst_qsv_decoder_negotiate (GstVideoDecoder * decoder)
height = frame_info->CropH; height = frame_info->CropH;
} }
switch (frame_info->FourCC) {
case MFX_FOURCC_NV12:
format = GST_VIDEO_FORMAT_NV12;
break;
case MFX_FOURCC_P010:
format = GST_VIDEO_FORMAT_P010_10LE;
break;
case MFX_FOURCC_P016:
format = GST_VIDEO_FORMAT_P016_LE;
break;
case MFX_FOURCC_RGB4:
format = GST_VIDEO_FORMAT_BGRA;
break;
default:
break;
}
if (klass->codec_id == MFX_CODEC_JPEG) { if (klass->codec_id == MFX_CODEC_JPEG) {
if (param->mfx.JPEGChromaFormat == MFX_CHROMAFORMAT_YUV422) { if (param->mfx.JPEGChromaFormat == MFX_CHROMAFORMAT_YUV422) {
format = GST_VIDEO_FORMAT_YUY2; format = GST_VIDEO_FORMAT_YUY2;
@ -1235,6 +1218,8 @@ gst_qsv_decoder_negotiate (GstVideoDecoder * decoder)
frame_info->FourCC = MFX_FOURCC_RGB4; frame_info->FourCC = MFX_FOURCC_RGB4;
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV444; frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV444;
} }
} else {
format = gst_qsv_frame_info_format_to_gst (frame_info);
} }
if (format == GST_VIDEO_FORMAT_UNKNOWN) { if (format == GST_VIDEO_FORMAT_UNKNOWN) {

View file

@ -460,12 +460,9 @@ gst_qsv_h264_dec_register (GstPlugin * plugin, guint rank, guint impl_index,
mfx->FrameInfo.FrameRateExtD = 1; mfx->FrameInfo.FrameRateExtD = 1;
mfx->FrameInfo.AspectRatioW = 1; mfx->FrameInfo.AspectRatioW = 1;
mfx->FrameInfo.AspectRatioH = 1; mfx->FrameInfo.AspectRatioH = 1;
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE; mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE;
mfx->CodecProfile = MFX_PROFILE_AVC_MAIN; mfx->CodecProfile = MFX_PROFILE_AVC_MAIN;
gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_NV12);
/* Check max-resolution */ /* Check max-resolution */
for (guint i = 0; i < G_N_ELEMENTS (gst_qsv_resolutions); i++) { for (guint i = 0; i < G_N_ELEMENTS (gst_qsv_resolutions); i++) {

View file

@ -1425,6 +1425,7 @@ gst_qsv_h264_enc_set_format (GstQsvEncoder * encoder,
GstStructure *s; GstStructure *s;
const gchar *stream_format; const gchar *stream_format;
mfxFrameInfo *frame_info; mfxFrameInfo *frame_info;
GstVideoFormat format;
frame_info = &param->mfx.FrameInfo; frame_info = &param->mfx.FrameInfo;
@ -1472,16 +1473,14 @@ gst_qsv_h264_enc_set_format (GstQsvEncoder * encoder,
frame_info->AspectRatioH = GST_VIDEO_INFO_PAR_D (info); frame_info->AspectRatioH = GST_VIDEO_INFO_PAR_D (info);
/* TODO: update for non 4:2:0 formats. Currently NV12 only */ /* TODO: update for non 4:2:0 formats. Currently NV12 only */
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV420; format = GST_VIDEO_INFO_FORMAT (info);
switch (GST_VIDEO_INFO_FORMAT (info)) { switch (format) {
case GST_VIDEO_FORMAT_NV12: case GST_VIDEO_FORMAT_NV12:
frame_info->FourCC = MFX_FOURCC_NV12; gst_qsv_frame_info_set_format (frame_info, format);
frame_info->BitDepthLuma = 8;
frame_info->BitDepthChroma = 8;
break; break;
default: default:
GST_ERROR_OBJECT (self, "Unexpected format %s", GST_ERROR_OBJECT (self, "Unexpected format %s",
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (info))); gst_video_format_to_string (format));
return FALSE; return FALSE;
} }
@ -2146,11 +2145,8 @@ gst_qsv_h264_enc_register (GstPlugin * plugin, guint rank, guint impl_index,
mfx->FrameInfo.FrameRateExtD = 1; mfx->FrameInfo.FrameRateExtD = 1;
mfx->FrameInfo.AspectRatioW = 1; mfx->FrameInfo.AspectRatioW = 1;
mfx->FrameInfo.AspectRatioH = 1; mfx->FrameInfo.AspectRatioH = 1;
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE; mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE;
gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_NV12);
/* Check supported profiles */ /* Check supported profiles */
for (guint i = 0; i < G_N_ELEMENTS (profile_map); i++) { for (guint i = 0; i < G_N_ELEMENTS (profile_map); i++) {

View file

@ -487,11 +487,8 @@ gst_qsv_h265_dec_register (GstPlugin * plugin, guint rank, guint impl_index,
mfx->FrameInfo.FrameRateExtD = 1; mfx->FrameInfo.FrameRateExtD = 1;
mfx->FrameInfo.AspectRatioW = 1; mfx->FrameInfo.AspectRatioW = 1;
mfx->FrameInfo.AspectRatioH = 1; mfx->FrameInfo.AspectRatioH = 1;
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE; mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE;
gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_NV12);
mfx->CodecProfile = MFX_PROFILE_HEVC_MAIN; mfx->CodecProfile = MFX_PROFILE_HEVC_MAIN;
/* Check max-resolution */ /* Check max-resolution */
@ -519,12 +516,7 @@ gst_qsv_h265_dec_register (GstPlugin * plugin, guint rank, guint impl_index,
/* Check other profile/formats */ /* Check other profile/formats */
/* TODO: check other profiles too */ /* TODO: check other profiles too */
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_P010_10LE);
mfx->FrameInfo.FourCC = MFX_FOURCC_P010;
mfx->FrameInfo.BitDepthLuma = 10;
mfx->FrameInfo.BitDepthChroma = 10;
mfx->FrameInfo.Shift = 1;
mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE;
mfx->CodecProfile = MFX_PROFILE_HEVC_MAIN10; mfx->CodecProfile = MFX_PROFILE_HEVC_MAIN10;
mfx->FrameInfo.Width = GST_ROUND_UP_16 (gst_qsv_resolutions[0].width); mfx->FrameInfo.Width = GST_ROUND_UP_16 (gst_qsv_resolutions[0].width);
mfx->FrameInfo.Height = GST_ROUND_UP_16 (gst_qsv_resolutions[0].height); mfx->FrameInfo.Height = GST_ROUND_UP_16 (gst_qsv_resolutions[0].height);

View file

@ -1460,29 +1460,23 @@ gst_qsv_h265_enc_register (GstPlugin * plugin, guint rank, guint impl_index,
/* Check supported profiles */ /* Check supported profiles */
for (guint i = 0; i < G_N_ELEMENTS (profile_map); i++) { for (guint i = 0; i < G_N_ELEMENTS (profile_map); i++) {
GstVideoFormat format = GST_VIDEO_FORMAT_UNKNOWN;
mfx->CodecProfile = profile_map[i].profile; mfx->CodecProfile = profile_map[i].profile;
mfx->CodecLevel = MFX_LEVEL_UNKNOWN; mfx->CodecLevel = MFX_LEVEL_UNKNOWN;
switch (mfx->CodecProfile) { switch (mfx->CodecProfile) {
case MFX_PROFILE_HEVC_MAIN: case MFX_PROFILE_HEVC_MAIN:
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; format = GST_VIDEO_FORMAT_NV12;
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.Shift = 0;
break; break;
case MFX_PROFILE_HEVC_MAIN10: case MFX_PROFILE_HEVC_MAIN10:
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; format = GST_VIDEO_FORMAT_P010_10LE;
mfx->FrameInfo.FourCC = MFX_FOURCC_P010;
mfx->FrameInfo.BitDepthLuma = 10;
mfx->FrameInfo.BitDepthChroma = 10;
mfx->FrameInfo.Shift = 1;
break; break;
default: default:
g_assert_not_reached (); g_assert_not_reached ();
return; return;
} }
gst_qsv_frame_info_set_format (&mfx->FrameInfo, format);
if (MFXVideoENCODE_Query (session, &param, &param) != MFX_ERR_NONE) if (MFXVideoENCODE_Query (session, &param, &param) != MFX_ERR_NONE)
continue; continue;
@ -1495,11 +1489,7 @@ gst_qsv_h265_enc_register (GstPlugin * plugin, guint rank, guint impl_index,
return; return;
} }
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_NV12);
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.Shift = 0;
mfx->CodecProfile = MFX_PROFILE_HEVC_MAIN; mfx->CodecProfile = MFX_PROFILE_HEVC_MAIN;
/* check hdr10 metadata SEI support */ /* check hdr10 metadata SEI support */

View file

@ -157,11 +157,8 @@ gst_qsv_jpeg_dec_register (GstPlugin * plugin, guint rank, guint impl_index,
mfx->FrameInfo.FrameRateExtD = 1; mfx->FrameInfo.FrameRateExtD = 1;
mfx->FrameInfo.AspectRatioW = 1; mfx->FrameInfo.AspectRatioW = 1;
mfx->FrameInfo.AspectRatioH = 1; mfx->FrameInfo.AspectRatioH = 1;
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE; mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE;
gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_NV12);
mfx->CodecProfile = MFX_PROFILE_JPEG_BASELINE; mfx->CodecProfile = MFX_PROFILE_JPEG_BASELINE;
mfx->JPEGChromaFormat = MFX_CHROMAFORMAT_YUV420; mfx->JPEGChromaFormat = MFX_CHROMAFORMAT_YUV420;
mfx->JPEGColorFormat = MFX_JPEG_COLORFORMAT_YCbCr; mfx->JPEGColorFormat = MFX_JPEG_COLORFORMAT_YCbCr;
@ -188,14 +185,12 @@ gst_qsv_jpeg_dec_register (GstPlugin * plugin, guint rank, guint impl_index,
supported_formats.push_back ("NV12"); supported_formats.push_back ("NV12");
mfx->FrameInfo.FourCC = MFX_FOURCC_YUY2; gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_YUY2);
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
mfx->JPEGChromaFormat = MFX_CHROMAFORMAT_YUV422; mfx->JPEGChromaFormat = MFX_CHROMAFORMAT_YUV422;
if (MFXVideoDECODE_Query (session, &param, &param) == MFX_ERR_NONE) if (MFXVideoDECODE_Query (session, &param, &param) == MFX_ERR_NONE)
supported_formats.push_back ("YUY2"); supported_formats.push_back ("YUY2");
mfx->FrameInfo.FourCC = MFX_FOURCC_RGB4; gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_BGRA);
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
mfx->JPEGChromaFormat = MFX_CHROMAFORMAT_YUV444; mfx->JPEGChromaFormat = MFX_CHROMAFORMAT_YUV444;
mfx->JPEGColorFormat = MFX_JPEG_COLORFORMAT_RGB; mfx->JPEGColorFormat = MFX_JPEG_COLORFORMAT_RGB;
if (MFXVideoDECODE_Query (session, &param, &param) == MFX_ERR_NONE) if (MFXVideoDECODE_Query (session, &param, &param) == MFX_ERR_NONE)

View file

@ -265,6 +265,7 @@ gst_qsv_jpeg_enc_set_format (GstQsvEncoder * encoder,
GstQsvJpegEncClass *klass = GST_QSV_JPEG_ENC_GET_CLASS (self); GstQsvJpegEncClass *klass = GST_QSV_JPEG_ENC_GET_CLASS (self);
GstVideoInfo *info = &state->info; GstVideoInfo *info = &state->info;
mfxFrameInfo *frame_info; mfxFrameInfo *frame_info;
GstVideoFormat format;
frame_info = &param->mfx.FrameInfo; frame_info = &param->mfx.FrameInfo;
@ -285,22 +286,12 @@ gst_qsv_jpeg_enc_set_format (GstQsvEncoder * encoder,
frame_info->AspectRatioW = GST_VIDEO_INFO_PAR_N (info); frame_info->AspectRatioW = GST_VIDEO_INFO_PAR_N (info);
frame_info->AspectRatioH = GST_VIDEO_INFO_PAR_D (info); frame_info->AspectRatioH = GST_VIDEO_INFO_PAR_D (info);
switch (GST_VIDEO_INFO_FORMAT (info)) { format = GST_VIDEO_INFO_FORMAT (info);
switch (format) {
case GST_VIDEO_FORMAT_NV12: case GST_VIDEO_FORMAT_NV12:
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV420;
frame_info->FourCC = MFX_FOURCC_NV12;
frame_info->BitDepthLuma = 8;
frame_info->BitDepthChroma = 8;
break;
case GST_VIDEO_FORMAT_YUY2: case GST_VIDEO_FORMAT_YUY2:
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV422;
frame_info->FourCC = MFX_FOURCC_YUY2;
frame_info->BitDepthLuma = 8;
frame_info->BitDepthChroma = 8;
break;
case GST_VIDEO_FORMAT_BGRA: case GST_VIDEO_FORMAT_BGRA:
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV444; gst_qsv_frame_info_set_format (frame_info, format);
frame_info->FourCC = MFX_FOURCC_RGB4;
break; break;
default: default:
GST_ERROR_OBJECT (self, "Unexpected format %s", GST_ERROR_OBJECT (self, "Unexpected format %s",

View file

@ -198,3 +198,135 @@ gst_qsv_status_to_string (mfxStatus status)
return "Unknown"; return "Unknown";
} }
GstVideoFormat
gst_qsv_frame_info_format_to_gst (const mfxFrameInfo * info)
{
GstVideoFormat format = GST_VIDEO_FORMAT_UNKNOWN;
switch (info->FourCC) {
case MFX_FOURCC_NV12:
format = GST_VIDEO_FORMAT_NV12;
break;
case MFX_FOURCC_P010:
format = GST_VIDEO_FORMAT_P010_10LE;
break;
case MFX_FOURCC_P016:
if (info->BitDepthLuma == 12)
format = GST_VIDEO_FORMAT_P012_LE;
else
format = GST_VIDEO_FORMAT_P016_LE;
break;
case MFX_FOURCC_YUY2:
format = GST_VIDEO_FORMAT_YUY2;
break;
case MFX_FOURCC_Y210:
format = GST_VIDEO_FORMAT_Y210;
break;
case MFX_FOURCC_Y216:
format = GST_VIDEO_FORMAT_Y212_LE;
break;
break;
case MFX_FOURCC_AYUV:
format = GST_VIDEO_FORMAT_VUYA;
break;
case MFX_FOURCC_Y410:
format = GST_VIDEO_FORMAT_Y410;
break;
case MFX_FOURCC_Y416:
format = GST_VIDEO_FORMAT_Y412_LE;
break;
case MFX_FOURCC_RGB4:
format = GST_VIDEO_FORMAT_BGRA;
break;
default:
break;
}
return format;
}
gboolean
gst_qsv_frame_info_set_format (mfxFrameInfo * info, GstVideoFormat format)
{
switch (format) {
case GST_VIDEO_FORMAT_NV12:
info->FourCC = MFX_FOURCC_NV12;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV420;
info->BitDepthLuma = 8;
info->BitDepthChroma = 8;
info->Shift = 0;
break;
case GST_VIDEO_FORMAT_P010_10LE:
info->FourCC = MFX_FOURCC_P010;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV420;
info->BitDepthLuma = 10;
info->BitDepthChroma = 10;
info->Shift = 1;
break;
case GST_VIDEO_FORMAT_P012_LE:
info->FourCC = MFX_FOURCC_P016;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV420;
info->BitDepthLuma = 12;
info->BitDepthChroma = 12;
info->Shift = 1;
break;
case GST_VIDEO_FORMAT_P016_LE:
info->FourCC = MFX_FOURCC_P016;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV420;
info->BitDepthLuma = 16;
info->BitDepthChroma = 16;
info->Shift = 0;
break;
case GST_VIDEO_FORMAT_YUY2:
info->FourCC = MFX_FOURCC_YUY2;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV422;
info->BitDepthLuma = 8;
info->BitDepthChroma = 8;
info->Shift = 0;
break;
case GST_VIDEO_FORMAT_Y210:
info->FourCC = MFX_FOURCC_Y210;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV422;
info->BitDepthLuma = 10;
info->BitDepthChroma = 10;
info->Shift = 1;
break;
case GST_VIDEO_FORMAT_Y212_LE:
info->FourCC = MFX_FOURCC_Y216;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV422;
info->BitDepthLuma = 12;
info->BitDepthChroma = 12;
info->Shift = 1;
break;
case GST_VIDEO_FORMAT_VUYA:
info->FourCC = MFX_FOURCC_AYUV;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV444;
info->BitDepthLuma = 8;
info->BitDepthChroma = 8;
info->Shift = 0;
break;
case GST_VIDEO_FORMAT_Y410:
info->FourCC = MFX_FOURCC_Y410;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV444;
info->BitDepthLuma = 10;
info->BitDepthChroma = 10;
info->Shift = 0;
break;
case GST_VIDEO_FORMAT_Y412_LE:
info->FourCC = MFX_FOURCC_Y416;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV444;
info->BitDepthLuma = 12;
info->BitDepthChroma = 12;
info->Shift = 1;
break;
case GST_VIDEO_FORMAT_BGRA:
info->FourCC = MFX_FOURCC_RGB4;
info->ChromaFormat = MFX_CHROMAFORMAT_YUV444;
break;
default:
return FALSE;
}
return TRUE;
}

View file

@ -20,6 +20,7 @@
#pragma once #pragma once
#include <gst/gst.h> #include <gst/gst.h>
#include <gst/video/video.h>
#include <mfx.h> #include <mfx.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@ -75,6 +76,11 @@ static const GstQsvResolution gst_qsv_resolutions[] = {
{7680, 4320}, {8192, 4320}, {15360, 8640}, {16384, 8640} {7680, 4320}, {8192, 4320}, {15360, 8640}, {16384, 8640}
}; };
GstVideoFormat gst_qsv_frame_info_format_to_gst (const mfxFrameInfo * info);
gboolean gst_qsv_frame_info_set_format (mfxFrameInfo * info,
GstVideoFormat format);
G_END_DECLS G_END_DECLS
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -54,7 +54,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_qsv_vp9_dec_debug);
"alignment = (string) frame, profile = (string) { 0, 2 }" "alignment = (string) frame, profile = (string) { 0, 2 }"
#define DOC_SRC_CAPS_COMM \ #define DOC_SRC_CAPS_COMM \
"format = (string) { NV12, P010_10LE, P016_LE}, " \ "format = (string) { NV12, P010_10LE, P012_LE}, " \
"width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ]" "width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ]"
#define DOC_SRC_CAPS \ #define DOC_SRC_CAPS \
@ -159,11 +159,8 @@ gst_qsv_vp9_dec_register (GstPlugin * plugin, guint rank, guint impl_index,
mfx->FrameInfo.FrameRateExtD = 1; mfx->FrameInfo.FrameRateExtD = 1;
mfx->FrameInfo.AspectRatioW = 1; mfx->FrameInfo.AspectRatioW = 1;
mfx->FrameInfo.AspectRatioH = 1; mfx->FrameInfo.AspectRatioH = 1;
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE; mfx->FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE;
gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_NV12);
mfx->CodecProfile = MFX_PROFILE_VP9_0; mfx->CodecProfile = MFX_PROFILE_VP9_0;
/* Check max-resolution */ /* Check max-resolution */
@ -189,22 +186,16 @@ gst_qsv_vp9_dec_register (GstPlugin * plugin, guint rank, guint impl_index,
supported_formats.push_back ("NV12"); supported_formats.push_back ("NV12");
/* Check other profile/formats */ /* Check other profile/formats */
mfx->FrameInfo.FourCC = MFX_FOURCC_P010; gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_P010_10LE);
mfx->FrameInfo.BitDepthLuma = 10;
mfx->FrameInfo.BitDepthChroma = 10;
mfx->FrameInfo.Shift = 1;
mfx->CodecProfile = MFX_PROFILE_VP9_2; mfx->CodecProfile = MFX_PROFILE_VP9_2;
if (MFXVideoDECODE_Query (session, &param, &param) == MFX_ERR_NONE) { if (MFXVideoDECODE_Query (session, &param, &param) == MFX_ERR_NONE) {
have_profile_2 = TRUE; have_profile_2 = TRUE;
supported_formats.push_back ("P010_10LE"); supported_formats.push_back ("P010_10LE");
mfx->FrameInfo.FourCC = MFX_FOURCC_P016; gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_P012_LE);
mfx->FrameInfo.BitDepthLuma = 12;
mfx->FrameInfo.BitDepthChroma = 12;
if (MFXVideoDECODE_Query (session, &param, &param) == MFX_ERR_NONE) { if (MFXVideoDECODE_Query (session, &param, &param) == MFX_ERR_NONE) {
have_profile_2_12bits = TRUE; have_profile_2_12bits = TRUE;
supported_formats.push_back ("P016_LE"); supported_formats.push_back ("P012_LE");
} }
} }

View file

@ -647,6 +647,7 @@ gst_qsv_vp9_enc_set_format (GstQsvEncoder * encoder,
GstVideoInfo *info = &state->info; GstVideoInfo *info = &state->info;
mfxExtVP9Param *vp9_param; mfxExtVP9Param *vp9_param;
mfxFrameInfo *frame_info; mfxFrameInfo *frame_info;
GstVideoFormat format;
frame_info = &param->mfx.FrameInfo; frame_info = &param->mfx.FrameInfo;
@ -669,45 +670,28 @@ gst_qsv_vp9_enc_set_format (GstQsvEncoder * encoder,
frame_info->AspectRatioW = GST_VIDEO_INFO_PAR_N (info); frame_info->AspectRatioW = GST_VIDEO_INFO_PAR_N (info);
frame_info->AspectRatioH = GST_VIDEO_INFO_PAR_D (info); frame_info->AspectRatioH = GST_VIDEO_INFO_PAR_D (info);
switch (GST_VIDEO_INFO_FORMAT (info)) { format = GST_VIDEO_INFO_FORMAT (info);
switch (format) {
case GST_VIDEO_FORMAT_NV12: case GST_VIDEO_FORMAT_NV12:
mfx_profile = MFX_PROFILE_VP9_0; mfx_profile = MFX_PROFILE_VP9_0;
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV420;
frame_info->FourCC = MFX_FOURCC_NV12;
frame_info->BitDepthLuma = 8;
frame_info->BitDepthChroma = 8;
frame_info->Shift = 0;
break; break;
case GST_VIDEO_FORMAT_VUYA: case GST_VIDEO_FORMAT_VUYA:
mfx_profile = MFX_PROFILE_VP9_1; mfx_profile = MFX_PROFILE_VP9_1;
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV444;
frame_info->FourCC = MFX_FOURCC_AYUV;
frame_info->BitDepthLuma = 8;
frame_info->BitDepthChroma = 8;
frame_info->Shift = 0;
break; break;
case GST_VIDEO_FORMAT_P010_10LE: case GST_VIDEO_FORMAT_P010_10LE:
mfx_profile = MFX_PROFILE_VP9_2; mfx_profile = MFX_PROFILE_VP9_2;
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV420;
frame_info->FourCC = MFX_FOURCC_P010;
frame_info->BitDepthLuma = 10;
frame_info->BitDepthChroma = 10;
frame_info->Shift = 1;
break; break;
case GST_VIDEO_FORMAT_Y410: case GST_VIDEO_FORMAT_Y410:
mfx_profile = MFX_PROFILE_VP9_3; mfx_profile = MFX_PROFILE_VP9_3;
frame_info->ChromaFormat = MFX_CHROMAFORMAT_YUV444;
frame_info->FourCC = MFX_FOURCC_Y410;
frame_info->BitDepthLuma = 10;
frame_info->BitDepthChroma = 10;
frame_info->Shift = 0;
break; break;
default: default:
GST_ERROR_OBJECT (self, "Unexpected format %s", GST_ERROR_OBJECT (self, "Unexpected format %s",
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (info))); gst_video_format_to_string (format));
return FALSE; return FALSE;
} }
gst_qsv_frame_info_set_format (frame_info, format);
gst_qsv_vp9_enc_init_vp9_param (&self->vp9_param); gst_qsv_vp9_enc_init_vp9_param (&self->vp9_param);
vp9_param = &self->vp9_param; vp9_param = &self->vp9_param;
@ -872,6 +856,8 @@ gst_qsv_vp9_enc_register (GstPlugin * plugin, guint rank, guint impl_index,
param.ExtParam = ext_bufs; param.ExtParam = ext_bufs;
for (guint i = 0; i < G_N_ELEMENTS (profile_map); i++) { for (guint i = 0; i < G_N_ELEMENTS (profile_map); i++) {
GstVideoFormat format;
mfx->CodecProfile = profile_map[i].profile; mfx->CodecProfile = profile_map[i].profile;
gst_qsv_vp9_enc_init_vp9_param (&vp9_param); gst_qsv_vp9_enc_init_vp9_param (&vp9_param);
@ -882,38 +868,24 @@ gst_qsv_vp9_enc_register (GstPlugin * plugin, guint rank, guint impl_index,
switch (mfx->CodecProfile) { switch (mfx->CodecProfile) {
case MFX_PROFILE_VP9_0: case MFX_PROFILE_VP9_0:
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; format = GST_VIDEO_FORMAT_NV12;
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.Shift = 0;
break; break;
case MFX_PROFILE_VP9_1: case MFX_PROFILE_VP9_1:
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV444; format = GST_VIDEO_FORMAT_VUYA;
mfx->FrameInfo.FourCC = MFX_FOURCC_AYUV;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.Shift = 0;
break; break;
case MFX_PROFILE_VP9_2: case MFX_PROFILE_VP9_2:
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; format = GST_VIDEO_FORMAT_P010_10LE;
mfx->FrameInfo.FourCC = MFX_FOURCC_P010;
mfx->FrameInfo.BitDepthLuma = 10;
mfx->FrameInfo.BitDepthChroma = 10;
mfx->FrameInfo.Shift = 1;
break; break;
case MFX_PROFILE_VP9_3: case MFX_PROFILE_VP9_3:
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV444; format = GST_VIDEO_FORMAT_Y410;
mfx->FrameInfo.FourCC = MFX_FOURCC_Y410;
mfx->FrameInfo.BitDepthLuma = 10;
mfx->FrameInfo.BitDepthChroma = 10;
mfx->FrameInfo.Shift = 0;
break; break;
default: default:
g_assert_not_reached (); g_assert_not_reached ();
return; return;
} }
gst_qsv_frame_info_set_format (&mfx->FrameInfo, format);
if (MFXVideoENCODE_Query (session, &param, &param) != MFX_ERR_NONE) if (MFXVideoENCODE_Query (session, &param, &param) != MFX_ERR_NONE)
continue; continue;
@ -927,11 +899,7 @@ gst_qsv_vp9_enc_register (GstPlugin * plugin, guint rank, guint impl_index,
} }
mfx->CodecProfile = MFX_PROFILE_VP9_0; mfx->CodecProfile = MFX_PROFILE_VP9_0;
mfx->FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; gst_qsv_frame_info_set_format (&mfx->FrameInfo, GST_VIDEO_FORMAT_NV12);
mfx->FrameInfo.FourCC = MFX_FOURCC_NV12;
mfx->FrameInfo.BitDepthLuma = 8;
mfx->FrameInfo.BitDepthChroma = 8;
mfx->FrameInfo.Shift = 0;
/* Check max-resolution */ /* Check max-resolution */
for (guint i = 0; i < G_N_ELEMENTS (gst_qsv_resolutions); i++) { for (guint i = 0; i < G_N_ELEMENTS (gst_qsv_resolutions); i++) {