1 /* GStreamer Intel MSDK plugin 2 * Copyright (c) 2018, Intel Corporation 3 * Copyright (c) 2018, Igalia S.L. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice, 10 * this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice, 13 * this list of conditions and the following disclaimer in the documentation 14 * and/or other materials provided with the distribution. 15 * 16 * 3. Neither the name of the copyright holder nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGDECE 29 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #ifndef GST_MSDK_SYSTEM_MEMORY_H 34 #define GST_MSDK_SYSTEM_MEMORY_H 35 36 #include "msdk.h" 37 38 G_BEGIN_DECLS 39 40 typedef struct _GstMsdkSystemMemory GstMsdkSystemMemory; 41 typedef struct _GstMsdkSystemAllocator GstMsdkSystemAllocator; 42 typedef struct _GstMsdkSystemAllocatorClass GstMsdkSystemAllocatorClass; 43 44 /* ---------------------------------------------------------------------*/ 45 /* GstMsdkSystemMemory */ 46 /* ---------------------------------------------------------------------*/ 47 48 #define GST_MSDK_SYSTEM_MEMORY_CAST(mem) \ 49 ((GstMsdkSystemMemory *) (mem)) 50 51 #define GST_IS_MSDK_SYSTEM_MEMORY(mem) \ 52 ((mem) && (mem)->allocator && GST_IS_MSDK_SYSTEM_ALLOCATOR((mem)->allocator)) 53 54 #define GST_MSDK_SYSTEM_MEMORY_NAME "GstMsdkSystemMemory" 55 56 /** 57 * GstMsdkSystemMemory: 58 * 59 * A MSDK memory object holder, including mfxFrameSurface, 60 * video info of the surface. 61 */ 62 struct _GstMsdkSystemMemory 63 { 64 GstMemory parent_instance; 65 66 mfxFrameSurface1 *surface; 67 68 guint8 *cache; 69 mfxU8 *cached_data[4]; 70 guint destination_pitches[4]; 71 }; 72 73 GstMemory * 74 gst_msdk_system_memory_new (GstAllocator * base_allocator); 75 76 /* ---------------------------------------------------------------------*/ 77 /* GstMsdkSystemAllocator */ 78 /* ---------------------------------------------------------------------*/ 79 80 #define GST_MSDK_SYSTEM_ALLOCATOR_CAST(allocator) \ 81 ((GstMsdkSystemAllocator *) (allocator)) 82 83 #define GST_TYPE_MSDK_SYSTEM_ALLOCATOR \ 84 (gst_msdk_system_allocator_get_type ()) 85 #define GST_MSDK_SYSTEM_ALLOCATOR(obj) \ 86 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MSDK_SYSTEM_ALLOCATOR, \ 87 GstMsdkSystemAllocator)) 88 #define GST_IS_MSDK_SYSTEM_ALLOCATOR(obj) \ 89 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MSDK_SYSTEM_ALLOCATOR)) 90 91 /** 92 * GstMsdkSystemAllocator: 93 * 94 * A MSDK memory allocator object. 95 */ 96 struct _GstMsdkSystemAllocator 97 { 98 GstAllocator parent_instance; 99 100 GstVideoInfo image_info; 101 }; 102 103 /** 104 * GstMsdkSystemAllocatorClass: 105 * 106 * A MSDK memory allocator class. 107 */ 108 struct _GstMsdkSystemAllocatorClass 109 { 110 GstAllocatorClass parent_class; 111 }; 112 113 GType gst_msdk_system_allocator_get_type (void); 114 115 GstAllocator * gst_msdk_system_allocator_new (GstVideoInfo *image_info); 116 117 G_END_DECLS 118 119 #endif /* GST_MSDK_SYSTEM_MEMORY_H */ 120