From 76a82feae7b541281b7d39822a62a7bfb6993bec Mon Sep 17 00:00:00 2001 From: Hyunjun Ko Date: Tue, 13 Feb 2018 13:54:03 -0900 Subject: [PATCH] msdk: Avoid build failures on Windows until d3d allocator is implemented https://bugzilla.gnome.org/show_bug.cgi?id=790752 --- sys/msdk/gstmsdkallocator.h | 6 ++++ sys/msdk/gstmsdkallocator_d3d.c | 80 +++++++++++++++++++++++++++++++++++++++++ sys/msdk/gstmsdkvideomemory.c | 17 +++++++-- sys/msdk/meson.build | 2 +- 4 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 sys/msdk/gstmsdkallocator_d3d.c diff --git a/sys/msdk/gstmsdkallocator.h b/sys/msdk/gstmsdkallocator.h index 64cd6a1..cbe03e6 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 0000000..75b147e --- /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 6428b59..831a540 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 2d49143..ece91aa 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 -- 2.7.4