gl: add support for P012_LE / P012_BE format
authorHaihao Xiang <haihao.xiang@intel.com>
Tue, 24 Mar 2020 04:39:50 +0000 (12:39 +0800)
committerHaihao Xiang <haihao.xiang@intel.com>
Tue, 24 Mar 2020 06:29:38 +0000 (14:29 +0800)
Because the color value is stored in MSB, so we can reuse the
P016_LE / P016_BE code for P012_LE / P012_BE

gst-libs/gst/gl/egl/gsteglimage.c
gst-libs/gst/gl/gstglcolorconvert.c
gst-libs/gst/gl/gstglcolorconvert.h
gst-libs/gst/gl/gstglformat.c
gst-libs/gst/gl/gstglmemory.h

index a7a39ea..2280c07 100644 (file)
@@ -534,11 +534,13 @@ _drm_rgba_fourcc_from_info (GstVideoInfo * info, int plane,
       return DRM_FORMAT_RGBA1010102;
 
     case GST_VIDEO_FORMAT_P010_10LE:
+    case GST_VIDEO_FORMAT_P012_LE:
     case GST_VIDEO_FORMAT_P016_LE:
       *out_format = plane == 0 ? GST_GL_R16 : GST_GL_RG16;
       return plane == 0 ? DRM_FORMAT_R16 : DRM_FORMAT_GR1616;
 
     case GST_VIDEO_FORMAT_P010_10BE:
+    case GST_VIDEO_FORMAT_P012_BE:
     case GST_VIDEO_FORMAT_P016_BE:
       *out_format = plane == 0 ? GST_GL_R16 : GST_GL_RG16;
       return plane == 0 ? DRM_FORMAT_R16 : DRM_FORMAT_RG1616;
index 2758d16..4e33937 100644 (file)
@@ -937,9 +937,11 @@ _init_supported_formats (GstGLContext * context, gboolean output,
   if (!context || (gst_gl_format_is_supported (context, GST_GL_R16) &&
           gst_gl_format_is_supported (context, GST_GL_RG16))) {
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
-    _append_value_string_list (supported_formats, "P010_10LE", "P016_LE", NULL);
+    _append_value_string_list (supported_formats, "P010_10LE", "P012_LE",
+        "P016_LE", NULL);
 #else
-    _append_value_string_list (supported_formats, "P010_10BE", "P016_BE", NULL);
+    _append_value_string_list (supported_formats, "P010_10BE", "P012_BE",
+        "P016_BE", NULL);
 #endif
   }
 
@@ -1542,6 +1544,8 @@ _get_n_textures (GstVideoFormat v_format)
     case GST_VIDEO_FORMAT_NV61:
     case GST_VIDEO_FORMAT_P010_10LE:
     case GST_VIDEO_FORMAT_P010_10BE:
+    case GST_VIDEO_FORMAT_P012_LE:
+    case GST_VIDEO_FORMAT_P012_BE:
     case GST_VIDEO_FORMAT_P016_LE:
     case GST_VIDEO_FORMAT_P016_BE:
       return 2;
@@ -1722,6 +1726,8 @@ _YUV_to_RGB (GstGLColorConvert * convert)
       }
       case GST_VIDEO_FORMAT_P010_10LE:
       case GST_VIDEO_FORMAT_P010_10BE:
+      case GST_VIDEO_FORMAT_P012_LE:
+      case GST_VIDEO_FORMAT_P012_BE:
       case GST_VIDEO_FORMAT_P016_LE:
       case GST_VIDEO_FORMAT_P016_BE:
       {
index 6ce2119..7563db6 100644 (file)
@@ -88,9 +88,9 @@ struct _GstGLColorConvertClass
  * The currently supported formats that can be converted
  */
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define COLOR_CONVERT_EXT_FORMATS ", BGR10A2_LE, RGB10A2_LE, P010_10LE, P016_LE"
+#define COLOR_CONVERT_EXT_FORMATS ", BGR10A2_LE, RGB10A2_LE, P010_10LE, P012_LE, P016_LE"
 #else
-#define COLOR_CONVERT_EXT_FORMATS ", P010_10BE, P016_BE"
+#define COLOR_CONVERT_EXT_FORMATS ", P010_10BE, P012_BE, P016_BE"
 #endif
 
 #define GST_GL_COLOR_CONVERT_FORMATS "{ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, " \
index 303951f..af8eb4c 100644 (file)
@@ -208,6 +208,8 @@ gst_gl_format_from_video_info (GstGLContext * context, GstVideoInfo * vinfo,
       return GST_GL_RGB10_A2;
     case GST_VIDEO_FORMAT_P010_10LE:
     case GST_VIDEO_FORMAT_P010_10BE:
+    case GST_VIDEO_FORMAT_P012_LE:
+    case GST_VIDEO_FORMAT_P012_BE:
     case GST_VIDEO_FORMAT_P016_LE:
     case GST_VIDEO_FORMAT_P016_BE:
       return plane == 0 ? GST_GL_R16 : GST_GL_RG16;
index 005e1ed..3c84cce 100644 (file)
@@ -51,9 +51,9 @@ GType gst_gl_memory_allocator_get_type(void);
  * List of video formats that are supported by #GstGLMemory
  */
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define MEMORY_VIDEO_EXT_FORMATS ", BGR10A2_LE, RGB10A2_LE, P010_10LE, P016_LE"
+#define MEMORY_VIDEO_EXT_FORMATS ", BGR10A2_LE, RGB10A2_LE, P010_10LE, P012_LE, P016_LE"
 #else
-#define MEMORY_VIDEO_EXT_FORMATS ", P010_10BE, P016_BE"
+#define MEMORY_VIDEO_EXT_FORMATS ", P010_10BE, P012_BE, P016_BE"
 #endif
 
 #define GST_GL_MEMORY_VIDEO_FORMATS_STR \