msdk: Avoid build failures on Windows until d3d allocator is implemented
authorHyunjun Ko <zzoon@igalia.com>
Tue, 13 Feb 2018 22:54:03 +0000 (13:54 -0900)
committerSreerenj Balachandran <sreerenj.balachandran@intel.com>
Tue, 13 Feb 2018 22:54:03 +0000 (13:54 -0900)
https://bugzilla.gnome.org/show_bug.cgi?id=790752

sys/msdk/gstmsdkallocator.h
sys/msdk/gstmsdkallocator_d3d.c [new file with mode: 0644]
sys/msdk/gstmsdkvideomemory.c
sys/msdk/meson.build

index 64cd6a1..cbe03e6 100644 (file)
@@ -46,6 +46,12 @@ struct _GstMsdkMemoryID {
 #ifndef _WIN32
   VASurfaceID *surface;
   VAImage image;
+#else
+  /* TODO: This is just to avoid compile errors on Windows.
+   * Implement handling Windows-specific video-memory.
+   */
+  gint pitch;
+  guint offset;
 #endif
 };
 
diff --git a/sys/msdk/gstmsdkallocator_d3d.c b/sys/msdk/gstmsdkallocator_d3d.c
new file mode 100644 (file)
index 0000000..75b147e
--- /dev/null
@@ -0,0 +1,80 @@
+/* GStreamer Intel MSDK plugin
+ * Copyright (c) 2018, Intel Corporation
+ * Copyright (c) 2018, Igalia S.L.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGDECE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "gstmsdkallocator.h"
+
+mfxStatus
+gst_msdk_frame_alloc (mfxHDL pthis, mfxFrameAllocRequest * req,
+    mfxFrameAllocResponse * resp)
+{
+  return MFX_ERR_NONE;
+}
+
+mfxStatus
+gst_msdk_frame_free (mfxHDL pthis, mfxFrameAllocResponse * resp)
+{
+  return MFX_ERR_NONE;
+}
+
+mfxStatus
+gst_msdk_frame_lock (mfxHDL pthis, mfxMemId mid, mfxFrameData * data)
+{
+  return MFX_ERR_NONE;
+}
+
+mfxStatus
+gst_msdk_frame_unlock (mfxHDL pthis, mfxMemId mid, mfxFrameData * ptr)
+{
+  return MFX_ERR_NONE;
+}
+
+mfxStatus
+gst_msdk_frame_get_hdl (mfxHDL pthis, mfxMemId mid, mfxHDL * hdl)
+{
+  return MFX_ERR_NONE;
+}
+
+void
+gst_msdk_set_frame_allocator (GstMsdkContext * context)
+{
+  mfxFrameAllocator gst_msdk_frame_allocator = {
+    .pthis = context,
+    .Alloc = gst_msdk_frame_alloc,
+    .Lock = gst_msdk_frame_lock,
+    .Unlock = gst_msdk_frame_unlock,
+    .GetHDL = gst_msdk_frame_get_hdl,
+    .Free = gst_msdk_frame_free,
+  };
+
+  MFXVideoCORE_SetFrameAllocator (gst_msdk_context_get_session (context),
+      &gst_msdk_frame_allocator);
+}
index 6428b59..831a540 100644 (file)
@@ -117,6 +117,8 @@ gst_video_meta_map_msdk_memory (GstVideoMeta * meta, guint plane,
   GstMsdkVideoMemory *mem =
       GST_MSDK_VIDEO_MEMORY_CAST (gst_buffer_peek_memory (meta->buffer, 0));
   GstMsdkMemoryID *mem_id;
+  guint offset = 0;
+  gint pitch = 0;
 
   g_return_val_if_fail (mem, FALSE);
 
@@ -146,8 +148,19 @@ gst_video_meta_map_msdk_memory (GstVideoMeta * meta, guint plane,
   mem->mapped++;
   mem_id = mem->surface->Data.MemId;
 
-  *data = mem->surface->Data.Y + mem_id->image.offsets[plane];
-  *stride = mem_id->image.pitches[plane];
+#ifndef _WIN32
+  offset = mem_id->image.offsets[plane];
+  pitch = mem_id->image.pitches[plane];
+#else
+  /* TODO: This is just to avoid compile errors on Windows.
+   * Implement handling Windows-specific video-memory.
+   */
+  offset = mem_id->offset;
+  pitch = mem_id->pitch;
+#endif
+
+  *data = mem->surface->Data.Y + offset;
+  *stride = pitch;
 
   info->flags = flags;
   ret = (*data != NULL);
index 2d49143..ece91aa 100644 (file)
@@ -21,7 +21,7 @@ msdk_sources = [
 ]
 
 if host_machine.system() == 'windows'
-  msdk_sources += 'msdk_d3d.c'
+  msdk_sources += ['msdk_d3d.c', 'gstmsdkallocator_d3d.c' ]
 else
   msdk_sources += ['msdk_libva.c', 'gstmsdkallocator_libva.c']
 endif