Imported Upstream version 1.7.1
[platform/upstream/emotion.git] / src / modules / gstreamer / emotion_alloc.c
1 #ifdef HAVE_CONFIG_H
2 # include "config.h"
3 #endif
4
5 #include <Eina.h>
6 #include <Evas.h>
7 #include <Ecore.h>
8
9 #include <glib.h>
10 #include <gst/gst.h>
11 #include <gst/video/video.h>
12 #include <gst/video/gstvideosink.h>
13
14 #ifdef HAVE_ECORE_X
15 # include <Ecore_X.h>
16 # include <Ecore_Evas.h>
17 # ifdef HAVE_XOVERLAY_H
18 #  include <gst/interfaces/xoverlay.h>
19 # endif
20 #endif
21
22 #include "Emotion.h"
23 #include "emotion_gstreamer.h"
24
25 Emotion_Gstreamer_Buffer *
26 emotion_gstreamer_buffer_alloc(EvasVideoSinkPrivate *sink,
27                                GstBuffer *buffer,
28                                Eina_Bool preroll)
29 {
30    Emotion_Gstreamer_Buffer *send;
31
32    if (!sink->ev) return NULL;
33
34    send = malloc(sizeof (Emotion_Gstreamer_Buffer));
35    if (!send) return NULL;
36
37    send->sink = sink;
38    send->frame = gst_buffer_ref(buffer);
39    send->preroll = preroll;
40    send->force = EINA_FALSE;
41    sink->ev->out++;
42    send->ev = sink->ev;
43
44    return send;
45 }
46
47 void
48 emotion_gstreamer_buffer_free(Emotion_Gstreamer_Buffer *send)
49 {
50    send->ev->in++;
51
52    if (send->ev->in == send->ev->out
53        && send->ev->threads == NULL
54        && send->ev->delete_me)
55      em_shutdown(send->ev);
56
57    gst_buffer_unref(send->frame);
58    free(send);
59 }
60
61 Emotion_Gstreamer_Message *
62 emotion_gstreamer_message_alloc(Emotion_Gstreamer_Video *ev,
63                                 GstMessage *msg)
64 {
65    Emotion_Gstreamer_Message *send;
66
67    if (!ev) return NULL;
68
69    send = malloc(sizeof (Emotion_Gstreamer_Message));
70    if (!send) return NULL;
71
72    ev->out++;
73    send->ev = ev;
74    send->msg = gst_message_ref(msg);
75
76    return send;
77 }
78
79 void
80 emotion_gstreamer_message_free(Emotion_Gstreamer_Message *send)
81 {
82    send->ev->in++;
83
84    if (send->ev->in == send->ev->out
85        && send->ev->threads == NULL
86        && send->ev->delete_me)
87      em_shutdown(send->ev);
88
89    gst_message_unref(send->msg);
90    free(send);
91 }