1 #ifdef HAVE_CONFIG_H
2 # include "config.h"
3 #endif
4
5 #include "emotion_gstreamer.h"
6
7 Emotion_Gstreamer_Buffer *
emotion_gstreamer_buffer_alloc(EmotionVideoSink * sink,GstBuffer * buffer,GstVideoInfo * info,Evas_Colorspace eformat,int eheight,Evas_Video_Convert_Cb func)8 emotion_gstreamer_buffer_alloc(EmotionVideoSink *sink,
9 GstBuffer *buffer,
10 GstVideoInfo *info,
11 Evas_Colorspace eformat,
12 int eheight,
13 Evas_Video_Convert_Cb func)
14 {
15 Emotion_Gstreamer_Buffer *send;
16
17 if (!sink->priv->emotion_object) return NULL;
18
19 send = calloc(1, sizeof(Emotion_Gstreamer_Buffer));
20 if (!send) return NULL;
21
22 send->sink = gst_object_ref(sink);
23 send->frame = gst_buffer_ref(buffer);
24 send->info = *info;
25 if (gst_video_frame_map(&(send->vframe), info, buffer, GST_MAP_READ))
26 send->vfmapped = EINA_TRUE;
27 else
28 send->vfmapped = EINA_FALSE;
29 send->eformat = eformat;
30 send->eheight = eheight;
31 send->func = func;
32 return send;
33 }
34
35 void
emotion_gstreamer_buffer_free(Emotion_Gstreamer_Buffer * send)36 emotion_gstreamer_buffer_free(Emotion_Gstreamer_Buffer *send)
37 {
38 gst_object_unref(send->sink);
39 gst_buffer_replace(&send->frame, NULL);
40 free(send);
41 }
42
43 Emotion_Gstreamer_Message *
emotion_gstreamer_message_alloc(Emotion_Gstreamer * ev,GstMessage * msg)44 emotion_gstreamer_message_alloc(Emotion_Gstreamer *ev,
45 GstMessage *msg)
46 {
47 Emotion_Gstreamer_Message *send;
48
49 if (!ev) return NULL;
50
51 send = malloc(sizeof (Emotion_Gstreamer_Message));
52 if (!send) return NULL;
53
54 send->ev = emotion_gstreamer_ref(ev);
55 send->msg = gst_message_ref(msg);
56
57 return send;
58 }
59
60 void
emotion_gstreamer_message_free(Emotion_Gstreamer_Message * send)61 emotion_gstreamer_message_free(Emotion_Gstreamer_Message *send)
62 {
63 emotion_gstreamer_unref(send->ev);
64 gst_message_unref(send->msg);
65 free(send);
66 }
67