mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-02 08:42:32 +00:00
gstmsdkvpp: add RGBP and BGRP in src pad
It requires MFX version 2.4+ Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2234>
This commit is contained in:
parent
d4f8e3cf53
commit
04de66ee7b
6 changed files with 75 additions and 1 deletions
|
@ -151,6 +151,12 @@ gst_msdk_frame_alloc (mfxHDL pthis, mfxFrameAllocRequest * req,
|
||||||
format = VA_RT_FORMAT_YUV444_12;
|
format = VA_RT_FORMAT_YUV444_12;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (MFX_VERSION >= 2004)
|
||||||
|
if (format == VA_RT_FORMAT_YUV444 && (va_fourcc == VA_FOURCC_RGBP
|
||||||
|
|| va_fourcc == VA_FOURCC_BGRP))
|
||||||
|
format = VA_RT_FORMAT_RGBP;
|
||||||
|
#endif
|
||||||
|
|
||||||
va_status = vaCreateSurfaces (gst_msdk_context_get_handle (context),
|
va_status = vaCreateSurfaces (gst_msdk_context_get_handle (context),
|
||||||
format,
|
format,
|
||||||
req->Info.Width, req->Info.Height, surfaces, surfaces_num, attribs,
|
req->Info.Width, req->Info.Height, surfaces, surfaces_num, attribs,
|
||||||
|
@ -437,6 +443,21 @@ gst_msdk_frame_lock (mfxHDL pthis, mfxMemId mid, mfxFrameData * data)
|
||||||
data->A = data->R + 3;
|
data->A = data->R + 3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if (MFX_VERSION >= 2004)
|
||||||
|
case VA_FOURCC_RGBP:
|
||||||
|
data->Pitch = mem_id->image.pitches[0];
|
||||||
|
data->R = buf + mem_id->image.offsets[0];
|
||||||
|
data->G = buf + mem_id->image.offsets[1];
|
||||||
|
data->B = buf + mem_id->image.offsets[2];
|
||||||
|
break;
|
||||||
|
case VA_FOURCC_BGRP:
|
||||||
|
data->Pitch = mem_id->image.pitches[0];
|
||||||
|
data->B = buf + mem_id->image.offsets[0];
|
||||||
|
data->G = buf + mem_id->image.offsets[1];
|
||||||
|
data->R = buf + mem_id->image.offsets[2];
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
break;
|
break;
|
||||||
|
@ -619,6 +640,16 @@ gst_msdk_export_dmabuf_to_vasurface (GstMsdkContext * context,
|
||||||
va_chroma = VA_RT_FORMAT_YUV444_12;
|
va_chroma = VA_RT_FORMAT_YUV444_12;
|
||||||
va_fourcc = VA_FOURCC_Y416;
|
va_fourcc = VA_FOURCC_Y416;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#if (MFX_VERSION >= 2004)
|
||||||
|
case GST_VIDEO_FORMAT_RGBP:
|
||||||
|
va_chroma = VA_RT_FORMAT_RGBP;
|
||||||
|
va_fourcc = VA_FOURCC_RGBP;
|
||||||
|
break;
|
||||||
|
case GST_VIDEO_FORMAT_BGRP:
|
||||||
|
va_chroma = VA_RT_FORMAT_RGBP;
|
||||||
|
va_fourcc = VA_FOURCC_BGRP;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
goto error_unsupported_format;
|
goto error_unsupported_format;
|
||||||
|
|
|
@ -160,6 +160,20 @@ ensure_data (GstMsdkSystemMemory * mem)
|
||||||
mem->surface->Data.A = mem->surface->Data.U + 6;
|
mem->surface->Data.A = mem->surface->Data.U + 6;
|
||||||
mem->surface->Data.Pitch = mem->destination_pitches[0];
|
mem->surface->Data.Pitch = mem->destination_pitches[0];
|
||||||
break;
|
break;
|
||||||
|
#if (MFX_VERSION >= 2004)
|
||||||
|
case GST_VIDEO_FORMAT_RGBP:
|
||||||
|
mem->surface->Data.Pitch = mem->destination_pitches[0];
|
||||||
|
mem->surface->Data.R = mem->cached_data[0];
|
||||||
|
mem->surface->Data.G = mem->cached_data[1];
|
||||||
|
mem->surface->Data.B = mem->cached_data[2];
|
||||||
|
break;
|
||||||
|
case GST_VIDEO_FORMAT_BGRP:
|
||||||
|
mem->surface->Data.Pitch = mem->destination_pitches[0];
|
||||||
|
mem->surface->Data.B = mem->cached_data[0];
|
||||||
|
mem->surface->Data.G = mem->cached_data[1];
|
||||||
|
mem->surface->Data.R = mem->cached_data[2];
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
|
@ -266,6 +280,14 @@ gst_msdk_system_memory_map_full (GstMemory * base_mem, GstMapInfo * info,
|
||||||
return mem->surface->Data.U; /* The first channel is U */
|
return mem->surface->Data.U; /* The first channel is U */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (MFX_VERSION >= 2004)
|
||||||
|
case MFX_FOURCC_RGBP:
|
||||||
|
return mem->surface->Data.R;
|
||||||
|
|
||||||
|
case MFX_FOURCC_BGRP:
|
||||||
|
return mem->surface->Data.B;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return mem->surface->Data.Y;
|
return mem->surface->Data.Y;
|
||||||
}
|
}
|
||||||
|
|
|
@ -332,6 +332,14 @@ gst_msdk_video_memory_map_full (GstMemory * base_mem, GstMapInfo * info,
|
||||||
return mem->surface->Data.U;
|
return mem->surface->Data.U;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (MFX_VERSION >= 2004)
|
||||||
|
case MFX_FOURCC_RGBP:
|
||||||
|
return mem->surface->Data.R;
|
||||||
|
|
||||||
|
case MFX_FOURCC_BGRP:
|
||||||
|
return mem->surface->Data.B;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return mem->surface->Data.Y;
|
return mem->surface->Data.Y;
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,10 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (MFX_VERSION >= 1032)
|
#if (MFX_VERSION >= 2004)
|
||||||
|
#define EXT_SINK_FORMATS ", RGB16, Y410, Y210"
|
||||||
|
#define EXT_SRC_FORMATS ", YV12, Y410, Y210, RGBP, BGRP"
|
||||||
|
#elif (MFX_VERSION >= 1032)
|
||||||
#define EXT_SINK_FORMATS ", RGB16, Y410, Y210"
|
#define EXT_SINK_FORMATS ", RGB16, Y410, Y210"
|
||||||
#define EXT_SRC_FORMATS ", YV12, Y410, Y210"
|
#define EXT_SRC_FORMATS ", YV12, Y410, Y210"
|
||||||
#elif (MFX_VERSION >= 1028)
|
#elif (MFX_VERSION >= 1028)
|
||||||
|
|
|
@ -74,6 +74,10 @@ static const struct map gst_msdk_video_format_to_mfx_map[] = {
|
||||||
GST_VIDEO_INFO_TO_MFX_MAP (Y212_LE, YUV422, Y216),
|
GST_VIDEO_INFO_TO_MFX_MAP (Y212_LE, YUV422, Y216),
|
||||||
/* Y416 is used for 12bit 4:4:4:4 format in MSDK */
|
/* Y416 is used for 12bit 4:4:4:4 format in MSDK */
|
||||||
GST_VIDEO_INFO_TO_MFX_MAP (Y412_LE, YUV444, Y416),
|
GST_VIDEO_INFO_TO_MFX_MAP (Y412_LE, YUV444, Y416),
|
||||||
|
#endif
|
||||||
|
#if (MFX_VERSION >=2004)
|
||||||
|
GST_VIDEO_INFO_TO_MFX_MAP (RGBP, YUV444, RGBP),
|
||||||
|
GST_VIDEO_INFO_TO_MFX_MAP (BGRP, YUV444, BGRP),
|
||||||
#endif
|
#endif
|
||||||
{0, 0, 0}
|
{0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
|
@ -79,6 +79,12 @@ static const struct fourcc_map gst_msdk_fourcc_mfx_to_va[] = {
|
||||||
FOURCC_MFX_TO_VA (Y410, Y410),
|
FOURCC_MFX_TO_VA (Y410, Y410),
|
||||||
#endif
|
#endif
|
||||||
FOURCC_MFX_TO_VA (BGR4, ABGR),
|
FOURCC_MFX_TO_VA (BGR4, ABGR),
|
||||||
|
|
||||||
|
#if (MFX_VERSION >= 2004)
|
||||||
|
FOURCC_MFX_TO_VA (RGBP, RGBP),
|
||||||
|
FOURCC_MFX_TO_VA (BGRP, BGRP),
|
||||||
|
#endif
|
||||||
|
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue