libs: dec: h265: support decode for main-10-422 10bit streams.
authorWangfei <fei.w.wang@intel.com>
Wed, 24 Oct 2018 18:18:37 +0000 (14:18 -0400)
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Thu, 1 Nov 2018 13:03:23 +0000 (14:03 +0100)
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

gst-libs/gst/vaapi/gstvaapiimage.c
gst-libs/gst/vaapi/gstvaapisurface.h
gst-libs/gst/vaapi/gstvaapiutils.c
gst-libs/gst/vaapi/gstvaapiutils_h265.c
gst-libs/gst/vaapi/video-format.c
gst/vaapi/gstvaapidecode.c
gst/vaapi/gstvaapipluginutil.h

index e4cb590..0d4878c 100644 (file)
@@ -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'):
index e9ffeb8..83e25e0 100644 (file)
@@ -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;
 
 /**
index 030f595..7a01d4d 100644 (file)
@@ -407,6 +407,11 @@ to_GstVaapiChromaType (guint va_rt_format)
       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;
       break;
@@ -455,6 +460,11 @@ from_GstVaapiChromaType (guint chroma_type)
       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;
       break;
index 080967b..ae36eab 100644 (file)
@@ -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;
index 8aef43c..e5ff3bf 100644 (file)
@@ -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;
   }
index e9275f4..d735a3b 100644 (file)
@@ -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 =
index b13d7cc..6390a23 100644 (file)
@@ -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(                                 \