mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-28 11:55:39 +00:00
libs: dec: h265: support decode for main-10-422 10bit streams.
Add 422 10bit yuv format Y210, which can be used to decode main-10-422 10bit streams. Currently, this feature is only supported by media-driver in Icelake. https://bugzilla.gnome.org/show_bug.cgi?id=797264
This commit is contained in:
parent
d8442e479e
commit
638004875b
7 changed files with 23 additions and 4 deletions
|
@ -91,6 +91,7 @@ vaapi_image_is_linear (const VAImage * va_image)
|
|||
case VA_FOURCC ('R', 'G', 'B', 'X'):
|
||||
case VA_FOURCC ('X', 'B', 'G', 'R'):
|
||||
case VA_FOURCC ('B', 'G', 'R', 'X'):
|
||||
case VA_FOURCC ('Y', '2', '1', '0'):
|
||||
data_size = 4 * width * height;
|
||||
break;
|
||||
case VA_FOURCC ('P', '0', '1', '0'):
|
||||
|
|
|
@ -66,6 +66,7 @@ G_BEGIN_DECLS
|
|||
* @GST_VAAPI_CHROMA_TYPE_RGB32: 32-bit RGB chroma format
|
||||
* @GST_VAAPI_CHROMA_TYPE_RGB16: 16-bit RGB chroma format
|
||||
* @GST_VAAPI_CHROMA_TYPE_YUV420_10BPP: YUV 4:2:0 chroma format, more than 8 bits per channel
|
||||
* @GST_VAAPI_CHROMA_TYPE_YUV422_10BPP: YUV 4:2:2 chroma format, more than 8 bits per channel
|
||||
*
|
||||
* The set of all chroma types for #GstVaapiSurface.
|
||||
*/
|
||||
|
@ -79,7 +80,8 @@ typedef enum
|
|||
GST_VAAPI_CHROMA_TYPE_YUV400,
|
||||
GST_VAAPI_CHROMA_TYPE_RGB32,
|
||||
GST_VAAPI_CHROMA_TYPE_RGB16,
|
||||
GST_VAAPI_CHROMA_TYPE_YUV420_10BPP
|
||||
GST_VAAPI_CHROMA_TYPE_YUV420_10BPP,
|
||||
GST_VAAPI_CHROMA_TYPE_YUV422_10BPP,
|
||||
} GstVaapiChromaType;
|
||||
|
||||
/**
|
||||
|
|
|
@ -406,6 +406,11 @@ to_GstVaapiChromaType (guint va_rt_format)
|
|||
case VA_RT_FORMAT_YUV420_10BPP:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV420_10BPP;
|
||||
break;
|
||||
#endif
|
||||
#if VA_CHECK_VERSION(1,2,0)
|
||||
case VA_RT_FORMAT_YUV422_10:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422_10BPP;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
chroma_type = 0;
|
||||
|
@ -454,6 +459,11 @@ from_GstVaapiChromaType (guint chroma_type)
|
|||
case GST_VAAPI_CHROMA_TYPE_YUV420_10BPP:
|
||||
format = VA_RT_FORMAT_YUV420_10BPP;
|
||||
break;
|
||||
#endif
|
||||
#if VA_CHECK_VERSION(1,2,0)
|
||||
case GST_VAAPI_CHROMA_TYPE_YUV422_10BPP:
|
||||
format = VA_RT_FORMAT_YUV422_10;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
format = 0;
|
||||
|
|
|
@ -317,7 +317,10 @@ gst_vaapi_utils_h265_get_chroma_type (guint chroma_format_idc,
|
|||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV420_10BPP;
|
||||
break;
|
||||
case 2:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422;
|
||||
if (luma_bit_depth == 8)
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422;
|
||||
else if (luma_bit_depth > 8)
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422_10BPP;
|
||||
break;
|
||||
case 3:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV444;
|
||||
|
|
|
@ -57,6 +57,7 @@ static const GstVideoFormatMap gst_vaapi_video_formats[] = {
|
|||
DEF_YUV (I420, ('I', '4', '2', '0'), LSB, 12, 420),
|
||||
DEF_YUV (YUY2, ('Y', 'U', 'Y', '2'), LSB, 16, 422),
|
||||
DEF_YUV (UYVY, ('U', 'Y', 'V', 'Y'), LSB, 16, 422),
|
||||
DEF_YUV (Y210, ('Y', '2', '1', '0'), LSB, 32, 422_10BPP),
|
||||
DEF_YUV (AYUV, ('A', 'Y', 'U', 'V'), LSB, 32, 444),
|
||||
#if G_BYTE_ORDER == G_BIG_ENDIAN
|
||||
DEF_RGB (ARGB, ('A', 'R', 'G', 'B'), MSB, 32,
|
||||
|
@ -298,6 +299,8 @@ gst_vaapi_video_format_from_chroma (guint chroma_type)
|
|||
return GST_VIDEO_FORMAT_P010_10LE;
|
||||
case GST_VAAPI_CHROMA_TYPE_YUV444:
|
||||
return GST_VIDEO_FORMAT_AYUV;
|
||||
case GST_VAAPI_CHROMA_TYPE_YUV422_10BPP:
|
||||
return GST_VIDEO_FORMAT_Y210;
|
||||
default:
|
||||
return GST_VIDEO_FORMAT_UNKNOWN;
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ static const char gst_vaapidecode_src_caps_str[] =
|
|||
#if (USE_GLX || USE_EGL)
|
||||
GST_VAAPI_MAKE_GLTEXUPLOAD_CAPS ";"
|
||||
#endif
|
||||
GST_VIDEO_CAPS_MAKE("{ NV12, I420, YV12, YUY2, UYVY, P010_10LE }") ";"
|
||||
GST_VIDEO_CAPS_MAKE("{ NV12, I420, YV12, YUY2, UYVY, Y210, P010_10LE }") ";"
|
||||
GST_VAAPI_MAKE_DMABUF_CAPS;
|
||||
|
||||
static GstStaticPadTemplate gst_vaapidecode_src_factory =
|
||||
|
|
|
@ -105,7 +105,7 @@ gst_vaapi_caps_feature_contains (const GstCaps * caps,
|
|||
|
||||
#define GST_VAAPI_MAKE_SURFACE_CAPS \
|
||||
GST_VIDEO_CAPS_MAKE_WITH_FEATURES( \
|
||||
GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE, "{ ENCODED, NV12, I420, YV12, YUY2, UYVY, P010_10LE }")
|
||||
GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE, "{ ENCODED, NV12, I420, YV12, YUY2, UYVY, Y210, P010_10LE }")
|
||||
|
||||
#define GST_VAAPI_MAKE_GLTEXUPLOAD_CAPS \
|
||||
GST_VIDEO_CAPS_MAKE_WITH_FEATURES( \
|
||||
|
|
Loading…
Reference in a new issue