+struct _EvasVideoSink {
+ /*< private >*/
+ GstVideoSink parent;
+ EvasVideoSinkPrivate *priv;
+};
+
+struct _EvasVideoSinkClass {
+ /*< private >*/
+ GstVideoSinkClass parent_class;
+};
+
+struct _EvasVideoSinkPrivate {
+ EINA_REFCOUNT;
+
+ Evas_Object *o;
+
+ int width;
+ int height;
+ Evas_Colorspace eformat;
+ GstVideoFormat gformat;
+
+ GMutex* buffer_mutex;
+ GCond* data_cond;
+
+ /* We need to keep a copy of the last inserted buffer as evas doesn't copy YUV data around */
+ GstBuffer *last_buffer;
+
+ // If this is TRUE all processing should finish ASAP
+ // This is necessary because there could be a race between
+ // unlock() and render(), where unlock() wins, signals the
+ // GCond, then render() tries to render a frame although
+ // everything else isn't running anymore. This will lead
+ // to deadlocks because render() holds the stream lock.
+ //
+ // Protected by the buffer mutex
+ Eina_Bool unlocked : 1;
+};
+
+struct _Emotion_Gstreamer_Buffer
+{
+ EvasVideoSinkPrivate *sink;
+
+ GstBuffer *frame;
+
+ Eina_Bool preroll : 1;
+};
+