summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyunjun Ko <zzoon@igalia.com>2018-02-13 13:54:03 -0900
committerSreerenj Balachandran <sreerenj.balachandran@intel.com>2018-02-13 13:54:03 -0900
commit76a82feae7b541281b7d39822a62a7bfb6993bec (patch)
treedbe915402de6c4c24f60f45b501c61e19a808f2b
parent72c6cd55453fd913ca0fb60192ef649b290bc187 (diff)
msdk: Avoid build failures on Windows until d3d allocator is implemented
https://bugzilla.gnome.org/show_bug.cgi?id=790752
-rw-r--r--sys/msdk/gstmsdkallocator.h6
-rw-r--r--sys/msdk/gstmsdkallocator_d3d.c80
-rw-r--r--sys/msdk/gstmsdkvideomemory.c17
-rw-r--r--sys/msdk/meson.build2
4 files changed, 102 insertions, 3 deletions
diff --git a/sys/msdk/gstmsdkallocator.h b/sys/msdk/gstmsdkallocator.h
index 64cd6a164..cbe03e641 100644
--- a/sys/msdk/gstmsdkallocator.h
+++ b/sys/msdk/gstmsdkallocator.h
@@ -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
index 000000000..75b147e86
--- /dev/null
+++ b/sys/msdk/gstmsdkallocator_d3d.c
@@ -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);
+}
diff --git a/sys/msdk/gstmsdkvideomemory.c b/sys/msdk/gstmsdkvideomemory.c
index 6428b5963..831a54013 100644
--- a/sys/msdk/gstmsdkvideomemory.c
+++ b/sys/msdk/gstmsdkvideomemory.c
@@ -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);
diff --git a/sys/msdk/meson.build b/sys/msdk/meson.build
index 2d491436b..ece91aaa1 100644
--- a/sys/msdk/meson.build
+++ b/sys/msdk/meson.build
@@ -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