1 /* GStreamer Intel MSDK plugin 2 * Copyright (c) 2016, Oblong Industries, Inc. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, 12 * this list of conditions and the following disclaimer in the documentation 13 * and/or other materials provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors 16 * may be used to endorse or promote products derived from this software 17 * without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 28 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 29 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #ifndef __MSDK_H__ 33 #define __MSDK_H__ 34 35 #ifdef HAVE_CONFIG_H 36 #include "config.h" 37 #endif 38 39 #include <string.h> 40 41 #include <gst/gst.h> 42 #include <gst/video/video.h> 43 #include <gst/allocators/allocators.h> 44 45 #include <mfxvideo.h> 46 47 #if (MFX_VERSION < 2000) 48 #include <mfxplugin.h> 49 #else 50 #include <mfxdispatcher.h> 51 52 #define mfxPluginUID char 53 static const char MFX_PLUGINID_HEVCD_SW; 54 static const char MFX_PLUGINID_HEVCD_HW; 55 static const char MFX_PLUGINID_HEVCE_SW; 56 static const char MFX_PLUGINID_HEVCE_HW; 57 static const char MFX_PLUGINID_VP8D_HW; 58 static const char MFX_PLUGINID_VP9E_HW; 59 static const char MFX_PLUGINID_VP9D_HW; 60 #endif 61 62 #if (MFX_VERSION >= 2000) 63 #define MFX_API_SDK "Intel(R) oneVPL" 64 #else 65 #define MFX_API_SDK "Intel(R) Media SDK" 66 #endif 67 68 G_BEGIN_DECLS 69 70 #define GST_MSDK_CAPS_MAKE(format) \ 71 GST_VIDEO_CAPS_MAKE (format) ", " \ 72 "interlace-mode = (string) progressive" 73 74 #ifndef _WIN32 75 #define GST_MSDK_CAPS_MAKE_WITH_DMABUF_FEATURE(dmaformat) \ 76 GST_VIDEO_CAPS_MAKE_WITH_FEATURES(GST_CAPS_FEATURE_MEMORY_DMABUF, dmaformat) ", " \ 77 "interlace-mode = (string) progressive" 78 #else 79 #define GST_MSDK_CAPS_MAKE_WITH_DMABUF_FEATURE(dmaformat) "" 80 #endif 81 82 #define GST_MSDK_CAPS_STR(format,dmaformat) \ 83 GST_MSDK_CAPS_MAKE (format) "; " \ 84 GST_MSDK_CAPS_MAKE_WITH_DMABUF_FEATURE (dmaformat) 85 86 #if (MFX_VERSION < 2000) 87 typedef void * mfxLoader; 88 89 void MFXUnload (mfxLoader loader); 90 #endif 91 92 typedef struct _MsdkSession MsdkSession; 93 94 struct _MsdkSession 95 { 96 mfxSession session; 97 mfxLoader loader; 98 }; 99 100 MsdkSession msdk_open_session (mfxIMPL impl); 101 void msdk_close_mfx_session (mfxSession session); 102 void msdk_close_session (MsdkSession * session); 103 104 gboolean msdk_is_available (void); 105 106 mfxFrameSurface1 *msdk_get_free_surface (mfxFrameSurface1 * surfaces, 107 guint size); 108 void msdk_frame_to_surface (GstVideoFrame * frame, mfxFrameSurface1 * surface); 109 110 const gchar *msdk_status_to_string (mfxStatus status); 111 112 void gst_msdk_set_video_alignment (GstVideoInfo * info, guint alloc_w, guint alloc_h, 113 GstVideoAlignment * alignment); 114 115 /* Conversion from Gstreamer to libmfx */ 116 gint gst_msdk_get_mfx_chroma_from_format (GstVideoFormat format); 117 gint gst_msdk_get_mfx_fourcc_from_format (GstVideoFormat format); 118 void gst_msdk_set_mfx_frame_info_from_video_info (mfxFrameInfo * mfx_info, 119 GstVideoInfo * info); 120 121 gboolean 122 gst_msdk_is_msdk_buffer (GstBuffer * buf); 123 124 mfxFrameSurface1 * 125 gst_msdk_get_surface_from_buffer (GstBuffer * buf); 126 127 GstVideoFormat 128 gst_msdk_get_video_format_from_mfx_fourcc (mfxU32 fourcc); 129 130 void 131 gst_msdk_update_mfx_frame_info_from_mfx_video_param (mfxFrameInfo * mfx_info, 132 mfxVideoParam * param); 133 134 void 135 gst_msdk_get_mfx_video_orientation_from_video_direction (guint value, 136 guint * mfx_mirror, guint * mfx_rotation); 137 138 gboolean 139 gst_msdk_load_plugin (mfxSession session, const mfxPluginUID * uid, 140 mfxU32 version, const gchar * plugin); 141 142 mfxU16 143 msdk_get_platform_codename (mfxSession session); 144 145 mfxStatus 146 msdk_init_msdk_session (mfxIMPL impl, mfxVersion * pver, 147 MsdkSession * msdk_session); 148 149 G_END_DECLS 150 151 #endif /* __MSDK_H__ */ 152