| 1 | /* | 
| 2 |  * GStreamer | 
| 3 |  * Copyright (C) 2020 Matthew Waters <matthew@centricular.com> | 
| 4 |  * | 
| 5 |  * This library is free software; you can redistribute it and/or | 
| 6 |  * modify it under the terms of the GNU Library General Public | 
| 7 |  * License as published by the Free Software Foundation; either | 
| 8 |  * version 2 of the License, or (at your option) any later version. | 
| 9 |  * | 
| 10 |  * This library is distributed in the hope that it will be useful, | 
| 11 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 12 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
| 13 |  * Library General Public License for more details. | 
| 14 |  * | 
| 15 |  * You should have received a copy of the GNU Library General Public | 
| 16 |  * License along with this library; if not, write to the | 
| 17 |  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, | 
| 18 |  * Boston, MA 02110-1301, USA. | 
| 19 |  */ | 
| 20 |  | 
| 21 | #ifndef __GST_GL_CONTEXT_CONFIG_H__ | 
| 22 | #define __GST_GL_CONTEXT_CONFIG_H__ | 
| 23 |  | 
| 24 | #include <gst/gst.h> | 
| 25 |  | 
| 26 | #include <gst/gl/gstgl_fwd.h> | 
| 27 |  | 
| 28 | G_BEGIN_DECLS | 
| 29 |  | 
| 30 | /** | 
| 31 |  * GST_GL_CONFIG_STRUCTURE_NAME: | 
| 32 |  * | 
| 33 |  * The canonical name of a #GstStructure that contains a configuration for a | 
| 34 |  * #GstGLContext. | 
| 35 |  * | 
| 36 |  * Since: 1.20 | 
| 37 |  */ | 
| 38 | #define GST_GL_CONFIG_STRUCTURE_NAME "gst-gl-context-config" | 
| 39 |  | 
| 40 | /** | 
| 41 |  * GST_GL_CONFIG_ATTRIB_NAME: | 
| 42 |  * | 
| 43 |  * Get a reference to the variable name of a particular configuration field. | 
| 44 |  * | 
| 45 |  * e.g. for `CONFIG_ID`: `GST_GL_CONFIG_ATTRIB_NAME (CONFIG_ID)` | 
| 46 |  * | 
| 47 |  * Since: 1.20 | 
| 48 |  */ | 
| 49 | #define GST_GL_CONFIG_ATTRIB_NAME(UPPER_NAME) \ | 
| 50 |   G_PASTE(G_PASTE(GST_GL_CONFIG_ATTRIB_,UPPER_NAME),_NAME) | 
| 51 | /** | 
| 52 |  * GST_GL_CONFIG_ATTRIB_GTYPE: | 
| 53 |  * | 
| 54 |  * Get a reference to the #GType of a particular configuration field. | 
| 55 |  * | 
| 56 |  * e.g. for `CONFIG_ID`: `GST_GL_CONFIG_ATTRIB_GTYPE (CONFIG_ID)` | 
| 57 |  * | 
| 58 |  * Since: 1.20 | 
| 59 |  */ | 
| 60 | #define GST_GL_CONFIG_ATTRIB_GTYPE(UPPER_NAME) \ | 
| 61 |   G_PASTE(G_PASTE(GST_GL_CONFIG_ATTRIB_,UPPER_NAME),_GTYPE) | 
| 62 |  | 
| 63 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_CONFIG_ID_NAME; | 
| 64 | #define GST_GL_CONFIG_ATTRIB_CONFIG_ID_GTYPE G_TYPE_UINT | 
| 65 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_PLATFORM_NAME; | 
| 66 | #define GST_GL_CONFIG_ATTRIB_PLATFORM_GTYPE GST_TYPE_GL_PLATFORM | 
| 67 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_CAVEAT_NAME; | 
| 68 | #define GST_GL_CONFIG_ATTRIB_CAVEAT_GTYPE GST_TYPE_GL_CONFIG_CAVEAT | 
| 69 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_SURFACE_TYPE_NAME; | 
| 70 | #define GST_GL_CONFIG_ATTRIB_SURFACE_TYPE_GTYPE GST_TYPE_GL_CONFIG_SURFACE_TYPE | 
| 71 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_CONFORMANT_API_NAME; | 
| 72 | #define GST_GL_CONFIG_ATTRIB_CONFORMANT_API_GTYPE GST_TYPE_GL_API | 
| 73 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_RENDERABLE_API_NAME; | 
| 74 | #define GST_GL_CONFIG_ATTRIB_RENDERABLE_API_GTYPE GST_TYPE_GL_API | 
| 75 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_RED_SIZE_NAME; | 
| 76 | #define GST_GL_CONFIG_ATTRIB_RED_SIZE_GTYPE G_TYPE_INT | 
| 77 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_GREEN_SIZE_NAME; | 
| 78 | #define GST_GL_CONFIG_ATTRIB_GREEN_SIZE_GTYPE G_TYPE_INT | 
| 79 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_BLUE_SIZE_NAME; | 
| 80 | #define GST_GL_CONFIG_ATTRIB_BLUE_SIZE_GTYPE G_TYPE_INT | 
| 81 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_ALPHA_SIZE_NAME; | 
| 82 | #define GST_GL_CONFIG_ATTRIB_ALPHA_SIZE_GTYPE G_TYPE_INT | 
| 83 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_LUMINANCE_SIZE_NAME; | 
| 84 | #define GST_GL_CONFIG_ATTRIB_LUMINANCE_SIZE_GTYPE G_TYPE_INT | 
| 85 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_DEPTH_SIZE_NAME; | 
| 86 | #define GST_GL_CONFIG_ATTRIB_DEPTH_SIZE_GTYPE G_TYPE_INT | 
| 87 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_STENCIL_SIZE_NAME; | 
| 88 | #define GST_GL_CONFIG_ATTRIB_STENCIL_SIZE_GTYPE G_TYPE_INT | 
| 89 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_MAX_PBUFFER_WIDTH_NAME; | 
| 90 | #define GST_GL_CONFIG_ATTRIB_MAX_PBUFFER_WIDTH_GTYPE G_TYPE_INT | 
| 91 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_MAX_PBUFFER_HEIGHT_NAME; | 
| 92 | #define GST_GL_CONFIG_ATTRIB_MAX_PBUFFER_HEIGHT_GTYPE G_TYPE_INT | 
| 93 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_MAX_PBUFFER_PIXELS_NAME; | 
| 94 | #define GST_GL_CONFIG_ATTRIB_MAX_PBUFFER_PIXELS_GTYPE G_TYPE_INT | 
| 95 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_SAMPLE_BUFFERS_NAME; | 
| 96 | #define GST_GL_CONFIG_ATTRIB_SAMPLE_BUFFERS_GTYPE G_TYPE_INT | 
| 97 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_SAMPLES_NAME; | 
| 98 | #define GST_GL_CONFIG_ATTRIB_SAMPLES_GTYPE G_TYPE_INT | 
| 99 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_NATIVE_RENDERABLE_NAME; | 
| 100 | #define GST_GL_CONFIG_ATTRIB_NATIVE_RENDERABLE_GTYPE G_TYPE_BOOLEAN | 
| 101 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_NATIVE_VISUAL_ID_NAME; | 
| 102 | #define GST_GL_CONFIG_ATTRIB_NATIVE_VISUAL_ID_GTYPE G_TYPE_UINT | 
| 103 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_LEVEL_NAME; | 
| 104 | #define GST_GL_CONFIG_ATTRIB_LEVEL_GTYPE G_TYPE_INT | 
| 105 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_MIN_SWAP_INTERVAL_NAME; | 
| 106 | #define GST_GL_CONFIG_ATTRIB_MIN_SWAP_INTERVAL_GTYPE G_TYPE_INT | 
| 107 | GST_GL_API const char * GST_GL_CONFIG_ATTRIB_MAX_SWAP_INTERVAL_NAME; | 
| 108 | #define GST_GL_CONFIG_ATTRIB_MAX_SWAP_INTERVAL_GTYPE G_TYPE_INT | 
| 109 |  | 
| 110 | /** | 
| 111 |  * GST_GL_CONFIG_STRUCTURE_SET_ARGS: | 
| 112 |  * | 
| 113 |  * Since: 1.20 | 
| 114 |  */ | 
| 115 | #define GST_GL_CONFIG_STRUCTURE_SET_ARGS(def_name,ctype,val) \ | 
| 116 |     GST_GL_CONFIG_ATTRIB_NAME(def_name), \ | 
| 117 |     GST_GL_CONFIG_ATTRIB_GTYPE(def_name), \ | 
| 118 |     (ctype) (val) | 
| 119 |  | 
| 120 | /** | 
| 121 |  * GstGLConfigCaveat: | 
| 122 |  * @GST_GL_CONFIG_CAVEAT_NONE: none | 
| 123 |  * @GST_GL_CONFIG_CAVEAT_SLOW: slow | 
| 124 |  * @GST_GL_CONFIG_CAVEAT_NON_CONFORMANT: non-conformant | 
| 125 |  * | 
| 126 |  * Since: 1.20 | 
| 127 |  */ | 
| 128 | typedef enum | 
| 129 | { | 
| 130 |   GST_GL_CONFIG_CAVEAT_NONE, | 
| 131 |   GST_GL_CONFIG_CAVEAT_SLOW, | 
| 132 |   GST_GL_CONFIG_CAVEAT_NON_CONFORMANT, | 
| 133 | } GstGLConfigCaveat; | 
| 134 |  | 
| 135 | GST_GL_API | 
| 136 | const gchar * gst_gl_config_caveat_to_string (GstGLConfigCaveat caveat); | 
| 137 |  | 
| 138 | /** | 
| 139 |  * GstGLConfigSurfaceType: | 
| 140 |  * @GST_GL_CONFIG_SURFACE_TYPE_NONE: none | 
| 141 |  * @GST_GL_CONFIG_SURFACE_TYPE_WINDOW: window | 
| 142 |  * @GST_GL_CONFIG_SURFACE_TYPE_PBUFFER: pbuffer | 
| 143 |  * @GST_GL_CONFIG_SURFACE_TYPE_PIXMAP: pixmap | 
| 144 |  * | 
| 145 |  * Since: 1.20 | 
| 146 |  */ | 
| 147 | typedef enum | 
| 148 | { | 
| 149 |   GST_GL_CONFIG_SURFACE_TYPE_NONE = 0, | 
| 150 |   GST_GL_CONFIG_SURFACE_TYPE_WINDOW = (1 << 0), | 
| 151 |   GST_GL_CONFIG_SURFACE_TYPE_PBUFFER = (1 << 1), | 
| 152 |   GST_GL_CONFIG_SURFACE_TYPE_PIXMAP = (1 << 2), | 
| 153 | } GstGLConfigSurfaceType; | 
| 154 |  | 
| 155 | GST_GL_API | 
| 156 | const gchar * gst_gl_config_surface_type_to_string (GstGLConfigSurfaceType surface_type); | 
| 157 |  | 
| 158 | G_END_DECLS | 
| 159 |  | 
| 160 | #endif /* __GST_GL_CONTEXT_CONFIG_H__ */ | 
| 161 |  |