1 /* GStreamer 2 * Copyright (C) 2007 David Schleef <ds@schleef.org> 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public 15 * License along with this library; if not, write to the 16 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20 #ifndef _GST_APP_SINK_H_ 21 #define _GST_APP_SINK_H_ 22 23 #include <gst/gst.h> 24 #include <gst/base/gstbasesink.h> 25 #include <gst/app/app-prelude.h> 26 27 G_BEGIN_DECLS 28 29 #define GST_TYPE_APP_SINK \ 30 (gst_app_sink_get_type()) 31 #define GST_APP_SINK(obj) \ 32 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_APP_SINK,GstAppSink)) 33 #define GST_APP_SINK_CLASS(klass) \ 34 (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_APP_SINK,GstAppSinkClass)) 35 #define GST_IS_APP_SINK(obj) \ 36 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_APP_SINK)) 37 #define GST_IS_APP_SINK_CLASS(klass) \ 38 (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_APP_SINK)) 39 #define GST_APP_SINK_CAST(obj) \ 40 ((GstAppSink*)(obj)) 41 42 typedef struct _GstAppSink GstAppSink; 43 typedef struct _GstAppSinkClass GstAppSinkClass; 44 typedef struct _GstAppSinkPrivate GstAppSinkPrivate; 45 46 /* FIXME 2.0: Make the instance/class struct private */ 47 48 /** 49 * GstAppSinkCallbacks: (skip) 50 * @eos: Called when the end-of-stream has been reached. This callback 51 * is called from the streaming thread. 52 * @new_preroll: Called when a new preroll sample is available. 53 * This callback is called from the streaming thread. 54 * The new preroll sample can be retrieved with 55 * gst_app_sink_pull_preroll() either from this callback 56 * or from any other thread. 57 * @new_sample: Called when a new sample is available. 58 * This callback is called from the streaming thread. 59 * The new sample can be retrieved with 60 * gst_app_sink_pull_sample() either from this callback 61 * or from any other thread. 62 * @new_event: Called when a new event is available. 63 * This callback is called from the streaming thread. 64 * The new event can be retrieved with 65 * gst_app_sink_pull_event() either from this callback 66 * or from any other thread. 67 * The callback should return %TRUE if the event has been handled, 68 * %FALSE otherwise. 69 * Since: 1.20 70 * 71 * A set of callbacks that can be installed on the appsink with 72 * gst_app_sink_set_callbacks(). 73 */ 74 typedef struct { 75 void (*eos) (GstAppSink *appsink, gpointer user_data); 76 GstFlowReturn (*new_preroll) (GstAppSink *appsink, gpointer user_data); 77 GstFlowReturn (*new_sample) (GstAppSink *appsink, gpointer user_data); 78 gboolean (*new_event) (GstAppSink *appsink, gpointer user_data); 79 80 /*< private >*/ 81 gpointer _gst_reserved[GST_PADDING - 1]; 82 } GstAppSinkCallbacks; 83 84 struct _GstAppSink 85 { 86 GstBaseSink basesink; 87 88 /*< private >*/ 89 GstAppSinkPrivate *priv; 90 91 /*< private >*/ 92 gpointer _gst_reserved[GST_PADDING]; 93 }; 94 95 struct _GstAppSinkClass 96 { 97 GstBaseSinkClass basesink_class; 98 99 /* signals */ 100 void (*eos) (GstAppSink *appsink); 101 GstFlowReturn (*new_preroll) (GstAppSink *appsink); 102 GstFlowReturn (*new_sample) (GstAppSink *appsink); 103 /* new_event is missing as we ran out padding */ 104 105 /* actions */ 106 GstSample * (*pull_preroll) (GstAppSink *appsink); 107 GstSample * (*pull_sample) (GstAppSink *appsink); 108 GstSample * (*try_pull_preroll) (GstAppSink *appsink, GstClockTime timeout); 109 GstSample * (*try_pull_sample) (GstAppSink *appsink, GstClockTime timeout); 110 /** 111 * GstAppSinkClass::try_pull_object: 112 * 113 * See #GstAppSink::try-pull-object: signal. 114 * 115 * Since: 1.20 116 */ 117 GstMiniObject * (*try_pull_object) (GstAppSink *appsink, GstClockTime timeout); 118 119 /*< private >*/ 120 gpointer _gst_reserved[GST_PADDING - 3]; 121 }; 122 123 GST_APP_API 124 GType gst_app_sink_get_type (void); 125 126 GST_APP_API 127 void gst_app_sink_set_caps (GstAppSink *appsink, const GstCaps *caps); 128 129 GST_APP_API 130 GstCaps * gst_app_sink_get_caps (GstAppSink *appsink); 131 132 GST_APP_API 133 gboolean gst_app_sink_is_eos (GstAppSink *appsink); 134 135 GST_APP_API 136 void gst_app_sink_set_emit_signals (GstAppSink *appsink, gboolean emit); 137 138 GST_APP_API 139 gboolean gst_app_sink_get_emit_signals (GstAppSink *appsink); 140 141 GST_APP_API 142 void gst_app_sink_set_max_buffers (GstAppSink *appsink, guint max); 143 144 GST_APP_API 145 guint gst_app_sink_get_max_buffers (GstAppSink *appsink); 146 147 GST_APP_API 148 void gst_app_sink_set_drop (GstAppSink *appsink, gboolean drop); 149 150 GST_APP_API 151 gboolean gst_app_sink_get_drop (GstAppSink *appsink); 152 153 GST_APP_API 154 void gst_app_sink_set_buffer_list_support (GstAppSink *appsink, gboolean enable_lists); 155 156 GST_APP_API 157 gboolean gst_app_sink_get_buffer_list_support (GstAppSink *appsink); 158 159 GST_APP_API 160 void gst_app_sink_set_wait_on_eos (GstAppSink *appsink, gboolean wait); 161 162 GST_APP_API 163 gboolean gst_app_sink_get_wait_on_eos (GstAppSink *appsink); 164 165 GST_APP_API 166 GstSample * gst_app_sink_pull_preroll (GstAppSink *appsink); 167 168 GST_APP_API 169 GstSample * gst_app_sink_pull_sample (GstAppSink *appsink); 170 171 GST_APP_API 172 GstMiniObject * gst_app_sink_pull_object (GstAppSink *appsink); 173 174 GST_APP_API 175 GstSample * gst_app_sink_try_pull_preroll (GstAppSink *appsink, GstClockTime timeout); 176 177 GST_APP_API 178 GstSample * gst_app_sink_try_pull_sample (GstAppSink *appsink, GstClockTime timeout); 179 180 GST_APP_API 181 GstMiniObject * gst_app_sink_try_pull_object (GstAppSink *appsink, GstClockTime timeout); 182 183 GST_APP_API 184 void gst_app_sink_set_callbacks (GstAppSink * appsink, 185 GstAppSinkCallbacks *callbacks, 186 gpointer user_data, 187 GDestroyNotify notify); 188 189 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAppSink, gst_object_unref) 190 191 G_END_DECLS 192 193 #endif 194 195