mfxStatus status;
mfxFrameAllocRequest request[2];
guint i;
+ gboolean need_vpp = TRUE;
if (thiz->initialized)
return TRUE;
if (thiz->use_video_memory)
gst_msdk_set_frame_allocator (thiz->context);
- /* Check 10bit input */
- if (GST_VIDEO_INFO_COMP_DEPTH (info, 0) == 10) {
- if (GST_VIDEO_INFO_FORMAT (info) != GST_VIDEO_FORMAT_P010_10LE) {
- GST_WARNING_OBJECT (thiz,
- "P010_10LE is the only supported 10bit format\n");
- goto failed;
- }
- } else if (GST_VIDEO_INFO_FORMAT (info) != GST_VIDEO_FORMAT_NV12) {
+ switch (GST_VIDEO_INFO_FORMAT (info)) {
+ case GST_VIDEO_FORMAT_NV12:
+ case GST_VIDEO_FORMAT_P010_10LE:
+ need_vpp = FALSE;
+ break;
+ case GST_VIDEO_FORMAT_YV12:
+ case GST_VIDEO_FORMAT_I420:
+ thiz->vpp_param.vpp.In.FourCC = MFX_FOURCC_YV12;
+ thiz->vpp_param.vpp.In.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
+ break;
+ case GST_VIDEO_FORMAT_YUY2:
+ thiz->vpp_param.vpp.In.FourCC = MFX_FOURCC_YUY2;
+ thiz->vpp_param.vpp.In.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
+ break;
+ case GST_VIDEO_FORMAT_UYVY:
+ thiz->vpp_param.vpp.In.FourCC = MFX_FOURCC_UYVY;
+ thiz->vpp_param.vpp.In.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
+ break;
+ case GST_VIDEO_FORMAT_BGRA:
+ thiz->vpp_param.vpp.In.FourCC = MFX_FOURCC_RGB4;
+ thiz->vpp_param.vpp.In.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ if (need_vpp) {
if (thiz->use_video_memory)
thiz->vpp_param.IOPattern =
MFX_IOPATTERN_IN_VIDEO_MEMORY | MFX_IOPATTERN_OUT_VIDEO_MEMORY;
thiz->vpp_param.vpp.In.AspectRatioW = info->par_n;
thiz->vpp_param.vpp.In.AspectRatioH = info->par_d;
thiz->vpp_param.vpp.In.PicStruct = MFX_PICSTRUCT_PROGRESSIVE;
- switch (GST_VIDEO_INFO_FORMAT (info)) {
- case GST_VIDEO_FORMAT_YV12:
- case GST_VIDEO_FORMAT_I420:
- thiz->vpp_param.vpp.In.FourCC = MFX_FOURCC_YV12;
- thiz->vpp_param.vpp.In.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
- break;
- case GST_VIDEO_FORMAT_YUY2:
- thiz->vpp_param.vpp.In.FourCC = MFX_FOURCC_YUY2;
- thiz->vpp_param.vpp.In.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
- break;
- case GST_VIDEO_FORMAT_UYVY:
- thiz->vpp_param.vpp.In.FourCC = MFX_FOURCC_UYVY;
- thiz->vpp_param.vpp.In.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
- break;
- case GST_VIDEO_FORMAT_BGRA:
- thiz->vpp_param.vpp.In.FourCC = MFX_FOURCC_RGB4;
- thiz->vpp_param.vpp.In.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
- break;
- default:
- g_assert_not_reached ();
- break;
- }
/* work-around to avoid zero fps in msdk structure */
if (0 == thiz->vpp_param.vpp.In.FrameRateExtN)
thiz->vpp_param.vpp.In.FrameRateExtN = 30;
thiz->vpp_param.vpp.Out = thiz->vpp_param.vpp.In;
- thiz->vpp_param.vpp.Out.FourCC = MFX_FOURCC_NV12;
- thiz->vpp_param.vpp.Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
+
+ if ((GST_VIDEO_INFO_COMP_DEPTH (info, 0)) == 10) {
+ thiz->vpp_param.vpp.Out.FourCC = MFX_FOURCC_P010;
+ thiz->vpp_param.vpp.Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
+ } else {
+ thiz->vpp_param.vpp.Out.FourCC = MFX_FOURCC_NV12;
+ thiz->vpp_param.vpp.Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
+ }
/* validate parameters and allow the Media SDK to make adjustments */
status = MFXVideoVPP_Query (session, &thiz->vpp_param, &thiz->vpp_param);
thiz->param.mfx.FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE;
thiz->param.mfx.FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
- if (GST_VIDEO_INFO_FORMAT (info) == GST_VIDEO_FORMAT_P010_10LE) {
- thiz->param.mfx.FrameInfo.FourCC = MFX_FOURCC_P010;
- thiz->param.mfx.FrameInfo.BitDepthLuma = 10;
- thiz->param.mfx.FrameInfo.BitDepthChroma = 10;
- thiz->param.mfx.FrameInfo.Shift = 1;
- } else {
- thiz->param.mfx.FrameInfo.FourCC = MFX_FOURCC_NV12;
- thiz->param.mfx.FrameInfo.BitDepthLuma = 8;
- thiz->param.mfx.FrameInfo.BitDepthChroma = 8;
+ switch (GST_VIDEO_INFO_FORMAT (info)) {
+ case GST_VIDEO_FORMAT_P010_10LE:
+ thiz->param.mfx.FrameInfo.FourCC = MFX_FOURCC_P010;
+ thiz->param.mfx.FrameInfo.BitDepthLuma = 10;
+ thiz->param.mfx.FrameInfo.BitDepthChroma = 10;
+ thiz->param.mfx.FrameInfo.Shift = 1;
+ break;
+ default:
+ thiz->param.mfx.FrameInfo.FourCC = MFX_FOURCC_NV12;
+ thiz->param.mfx.FrameInfo.BitDepthLuma = 8;
+ thiz->param.mfx.FrameInfo.BitDepthChroma = 8;
}
/* work-around to avoid zero fps in msdk structure */
encoder->param.mfx.CodecId = MFX_CODEC_HEVC;
- if (encoder->param.mfx.FrameInfo.FourCC == MFX_FOURCC_P010)
- encoder->param.mfx.CodecProfile = MFX_PROFILE_HEVC_MAIN10;
- else
- encoder->param.mfx.CodecProfile = MFX_PROFILE_HEVC_MAIN;
+ switch (encoder->param.mfx.FrameInfo.FourCC) {
+ case MFX_FOURCC_P010:
+ encoder->param.mfx.CodecProfile = MFX_PROFILE_HEVC_MAIN10;
+ break;
+ default:
+ encoder->param.mfx.CodecProfile = MFX_PROFILE_HEVC_MAIN;
+ }
/* IdrInterval field of MediaSDK HEVC encoder behaves differently
* than other encoders. IdrInteval == 1 indicate every
gst_structure_set (structure, "alignment", G_TYPE_STRING, "au", NULL);
- if (encoder->param.mfx.FrameInfo.FourCC == MFX_FOURCC_P010)
- gst_structure_set (structure, "profile", G_TYPE_STRING, "main-10", NULL);
- else
- gst_structure_set (structure, "profile", G_TYPE_STRING, "main", NULL);
+ switch (encoder->param.mfx.FrameInfo.FourCC) {
+ case MFX_FOURCC_P010:
+ gst_structure_set (structure, "profile", G_TYPE_STRING, "main-10", NULL);
+ break;
+ default:
+ gst_structure_set (structure, "profile", G_TYPE_STRING, "main", NULL);
+ break;
+ }
level = level_to_string (encoder->param.mfx.CodecLevel);
if (level)