*u = 'z';
*v = 'x';
break;
+ case GST_VIDEO_FORMAT_Y210:
+ *y = 'r';
+ *u = 'g';
+ *v = 'a';
+ break;
+ case GST_VIDEO_FORMAT_Y410:
+ *y = 'g';
+ *u = 'r';
+ *v = 'b';
+ break;
default:
g_assert_not_reached ();
return FALSE;
case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_UYVY:
case GST_VIDEO_FORMAT_VYUY:
+ case GST_VIDEO_FORMAT_Y210:
+ case GST_VIDEO_FORMAT_Y410:
{
gchar y, u, v;
if (!get_packed_yuv_components (self, GST_VIDEO_INFO_FORMAT (in_info),
GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_I420_10LE);
in_packed = (GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_YUY2 ||
GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_UYVY ||
- GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_VYUY);
+ GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_VYUY ||
+ GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_Y210 ||
+ GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_Y410);
out_planar = (GST_VIDEO_INFO_FORMAT (out_info) == GST_VIDEO_FORMAT_I420 ||
GST_VIDEO_INFO_FORMAT (out_info) == GST_VIDEO_FORMAT_I420_10LE);
DXGI_FORMAT_R8G8_B8G8_UNORM;
n_formats++;
+ /* Y210 and Y410 formats cannot support rtv */
+ priv->format_table[n_formats].format = GST_VIDEO_FORMAT_Y210;
+ priv->format_table[n_formats].resource_format[0] =
+ DXGI_FORMAT_R16G16B16A16_UNORM;
+ if (can_support_format (self, DXGI_FORMAT_Y210,
+ D3D11_FORMAT_SUPPORT_SHADER_SAMPLE))
+ priv->format_table[n_formats].dxgi_format = DXGI_FORMAT_Y210;
+ else
+ priv->format_table[n_formats].dxgi_format = DXGI_FORMAT_UNKNOWN;
+ n_formats++;
+
+ priv->format_table[n_formats].format = GST_VIDEO_FORMAT_Y410;
+ priv->format_table[n_formats].resource_format[0] =
+ DXGI_FORMAT_R10G10B10A2_UNORM;
+ if (can_support_format (self, DXGI_FORMAT_Y410,
+ D3D11_FORMAT_SUPPORT_SHADER_SAMPLE))
+ priv->format_table[n_formats].dxgi_format = DXGI_FORMAT_Y410;
+ else
+ priv->format_table[n_formats].dxgi_format = DXGI_FORMAT_UNKNOWN;
+ n_formats++;
+
/* YUV semi-planar */
priv->format_table[n_formats].format = GST_VIDEO_FORMAT_NV12;
priv->format_table[n_formats].resource_format[0] = DXGI_FORMAT_R8_UNORM;
case DXGI_FORMAT_R16G16_UNORM:
case DXGI_FORMAT_G8R8_G8B8_UNORM:
case DXGI_FORMAT_R8G8_B8G8_UNORM:
+ case DXGI_FORMAT_Y210:
+ case DXGI_FORMAT_Y410:
+ case DXGI_FORMAT_R16G16B16A16_UNORM:
return 1;
case DXGI_FORMAT_NV12:
case DXGI_FORMAT_P010:
case DXGI_FORMAT_R16G16_UNORM:
case DXGI_FORMAT_G8R8_G8B8_UNORM:
case DXGI_FORMAT_R8G8_B8G8_UNORM:
+ case DXGI_FORMAT_Y210:
+ case DXGI_FORMAT_Y410:
+ case DXGI_FORMAT_R16G16B16A16_UNORM:
offset[0] = 0;
stride[0] = pitch;
*size = pitch * height;
"BGRA, RGBA, RGB10A2_LE, VUYA, NV12, P010_10LE, P016_LE, I420, I420_10LE"
#define GST_D3D11_EXTRA_IN_FORMATS \
- "YUY2, UYVY, VYUY"
+ "YUY2, UYVY, VYUY, Y210, Y410"
#define GST_D3D11_SINK_FORMATS \
"{ " GST_D3D11_COMMON_FORMATS " ," GST_D3D11_EXTRA_IN_FORMATS " }"
#define GST_D3D11_ALL_FORMATS \
"{ " GST_D3D11_COMMON_FORMATS " ," GST_D3D11_EXTRA_IN_FORMATS " }"
-#define GST_D3D11_N_FORMATS 12
+#define GST_D3D11_N_FORMATS 14
G_BEGIN_DECLS
case DXGI_FORMAT_R16G16_UNORM:
case DXGI_FORMAT_G8R8_G8B8_UNORM:
case DXGI_FORMAT_R8G8_B8G8_UNORM:
+ case DXGI_FORMAT_R16G16B16A16_UNORM:
num_views = 1;
formats[0] = mem->desc.Format;
break;
formats[0] = DXGI_FORMAT_R16_UNORM;
formats[1] = DXGI_FORMAT_R16G16_UNORM;
break;
+ case DXGI_FORMAT_Y210:
+ num_views = 1;
+ formats[0] = DXGI_FORMAT_R16G16B16A16_UNORM;
+ break;
+ case DXGI_FORMAT_Y410:
+ num_views = 1;
+ formats[0] = DXGI_FORMAT_R10G10B10A2_UNORM;
+ break;
default:
g_assert_not_reached ();
return FALSE;
GST_START_TEST (test_d3d11_color_convert_packed_yuv_yuv)
{
const gchar *in_format_list[] = {
- "YUY2", "UYVY", "VYUY",
+ "YUY2", "UYVY", "VYUY", "Y210", "Y410",
};
const gchar *out_format_list[] = {
"VUYA", "NV12", "P010_10LE", "P016_LE", "I420", "I420_10LE"
GST_START_TEST (test_d3d11_color_convert_packed_yuv_rgb)
{
const gchar *in_format_list[] = {
- "YUY2", "UYVY", "VYUY",
+ "YUY2", "UYVY", "VYUY", "Y210", "Y410",
};
const gchar *out_format_list[] = {
"BGRA", "RGBA", "RGB10A2_LE",