1/*
2 * GStreamer
3 * Copyright (C) 2014 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_SYNC_META_H__
22#define __GST_GL_SYNC_META_H__
23
24#include <gst/gl/gstgl_fwd.h>
25
26G_BEGIN_DECLS
27
28#define GST_GL_SYNC_META_API_TYPE (gst_gl_sync_meta_api_get_type())
29#define GST_GL_SYNC_META_INFO (gst_gl_sync_meta_get_info())
30typedef struct _GstGLSyncMeta GstGLSyncMeta;
31
32/**
33 * GST_BUFFER_POOL_OPTION_GL_SYNC_META:
34 *
35 * An option that can be activated on bufferpools to request OpenGL
36 * synchronization metadata on buffers from the pool.
37 */
38#define GST_BUFFER_POOL_OPTION_GL_SYNC_META "GstBufferPoolOptionGLSyncMeta"
39
40/**
41 * GstGLSyncMeta:
42 * @parent: the parent #GstMeta
43 * @context: the #GstGLContext used to allocate the meta
44 * @data: a custom data pointer for the implementation
45 * @set_sync: set a sync point in the OpenGL command stream
46 * @set_sync_gl: the same as @set_sync but called from @context's thread
47 * @wait: execute a wait on the previously set sync point into the OpenGL command stream
48 * @wait_gl: the same as @wait but called from @context's thread
49 * @wait_cpu: wait for the previously set sync point to pass from the CPU
50 * @wait_cpu_gl: the same as @wait_cpu but called from @context's thread
51 * @copy: copy @data into a new #GstGLSyncMeta
52 * @free: free @data
53 * @free_gl: free @data in @context's thread
54 */
55struct _GstGLSyncMeta
56{
57 GstMeta parent;
58
59 GstGLContext *context;
60
61 gpointer data;
62
63 void (*set_sync) (GstGLSyncMeta * sync, GstGLContext * context);
64 void (*set_sync_gl) (GstGLSyncMeta * sync, GstGLContext * context);
65 void (*wait) (GstGLSyncMeta * sync, GstGLContext * context);
66 void (*wait_gl) (GstGLSyncMeta * sync, GstGLContext * context);
67 void (*wait_cpu) (GstGLSyncMeta * sync, GstGLContext * context);
68 void (*wait_cpu_gl) (GstGLSyncMeta * sync, GstGLContext * context);
69 void (*copy) (GstGLSyncMeta * src, GstBuffer * sbuffer, GstGLSyncMeta * dest, GstBuffer * dbuffer);
70 void (*free) (GstGLSyncMeta * sync, GstGLContext * context);
71 void (*free_gl) (GstGLSyncMeta * sync, GstGLContext * context);
72};
73
74GST_GL_API
75GType gst_gl_sync_meta_api_get_type (void);
76GST_GL_API
77const GstMetaInfo * gst_gl_sync_meta_get_info (void);
78
79#define gst_buffer_get_gl_sync_meta(b) ((GstGLSyncMeta*)gst_buffer_get_meta((b),GST_GL_SYNC_META_API_TYPE))
80
81GST_GL_API
82GstGLSyncMeta * gst_buffer_add_gl_sync_meta (GstGLContext * context, GstBuffer *buffer);
83GST_GL_API
84GstGLSyncMeta * gst_buffer_add_gl_sync_meta_full (GstGLContext * context, GstBuffer * buffer,
85 gpointer data);
86GST_GL_API
87void gst_gl_sync_meta_set_sync_point (GstGLSyncMeta * sync_meta, GstGLContext * context);
88GST_GL_API
89void gst_gl_sync_meta_wait (GstGLSyncMeta * sync_meta, GstGLContext * context);
90GST_GL_API
91void gst_gl_sync_meta_wait_cpu (GstGLSyncMeta * sync_meta, GstGLContext * context);
92
93G_END_DECLS
94
95#endif /* __GST_GL_SYNC_META_H__ */
96

source code of include/gstreamer-1.0/gst/gl/gstglsyncmeta.h