gstmsdkvpp: add RGBP and BGRP in src pad
authorHaihao Xiang <haihao.xiang@intel.com>
Tue, 11 May 2021 06:07:14 +0000 (14:07 +0800)
committerHaihao Xiang <haihao.xiang@intel.com>
Mon, 5 Jul 2021 03:47:05 +0000 (03:47 +0000)
It requires MFX version 2.4+

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2234>

sys/msdk/gstmsdkallocator_libva.c
sys/msdk/gstmsdksystemmemory.c
sys/msdk/gstmsdkvideomemory.c
sys/msdk/gstmsdkvpp.c
sys/msdk/msdk.c
sys/msdk/msdk_libva.c

index 1ddda23..9f711b0 100644 (file)
@@ -151,6 +151,12 @@ gst_msdk_frame_alloc (mfxHDL pthis, mfxFrameAllocRequest * req,
       format = VA_RT_FORMAT_YUV444_12;
 #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),
         format,
         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;
         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:
         g_assert_not_reached ();
         break;
@@ -620,6 +641,16 @@ gst_msdk_export_dmabuf_to_vasurface (GstMsdkContext * context,
       va_fourcc = VA_FOURCC_Y416;
       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
     default:
       goto error_unsupported_format;
   }
index 39ff647..e36d014 100644 (file)
@@ -160,6 +160,20 @@ ensure_data (GstMsdkSystemMemory * mem)
       mem->surface->Data.A = mem->surface->Data.U + 6;
       mem->surface->Data.Pitch = mem->destination_pitches[0];
       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:
       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 */
 #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:
       return mem->surface->Data.Y;
   }
index 5d5d411..69c2492 100644 (file)
@@ -332,6 +332,14 @@ gst_msdk_video_memory_map_full (GstMemory * base_mem, GstMapInfo * info,
       return mem->surface->Data.U;
 #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:
       return mem->surface->Data.Y;
   }
index b4a6570..5431a4e 100644 (file)
 #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_SRC_FORMATS         ", YV12, Y410, Y210"
 #elif (MFX_VERSION >= 1028)
index 541e2ec..6c87b8a 100644 (file)
@@ -75,6 +75,10 @@ static const struct map gst_msdk_video_format_to_mfx_map[] = {
   /* Y416 is used for 12bit 4:4:4:4 format in MSDK */
   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
   {0, 0, 0}
 };
 
index 0a55a8b..8ebc3e1 100644 (file)
@@ -79,6 +79,12 @@ static const struct fourcc_map gst_msdk_fourcc_mfx_to_va[] = {
   FOURCC_MFX_TO_VA (Y410, Y410),
 #endif
   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}
 };