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