2011-08-01 05:42:16 -07:00
|
|
|
#include <glib.h>
|
|
|
|
#include <gst/gst.h>
|
|
|
|
#include <gst/video/video.h>
|
|
|
|
#include <gst/video/gstvideosink.h>
|
|
|
|
|
|
|
|
#include <Ecore.h>
|
|
|
|
|
|
|
|
#include "emotion_gstreamer.h"
|
|
|
|
|
|
|
|
Emotion_Gstreamer_Buffer *
|
|
|
|
emotion_gstreamer_buffer_alloc(EvasVideoSinkPrivate *sink,
|
|
|
|
GstBuffer *buffer,
|
|
|
|
Eina_Bool preroll)
|
|
|
|
{
|
|
|
|
Emotion_Gstreamer_Buffer *send;
|
|
|
|
|
2011-08-16 09:11:50 -07:00
|
|
|
if (!sink->ev) return NULL;
|
|
|
|
|
2011-08-01 05:42:16 -07:00
|
|
|
send = malloc(sizeof (Emotion_Gstreamer_Buffer));
|
|
|
|
if (!send) return NULL;
|
|
|
|
|
|
|
|
send->sink = sink;
|
|
|
|
send->frame = gst_buffer_ref(buffer);
|
|
|
|
send->preroll = preroll;
|
2011-08-16 09:11:50 -07:00
|
|
|
sink->ev->out++;
|
|
|
|
send->ev = sink->ev;
|
2011-08-01 05:42:16 -07:00
|
|
|
|
|
|
|
return send;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
emotion_gstreamer_buffer_free(Emotion_Gstreamer_Buffer *send)
|
|
|
|
{
|
2011-08-16 09:11:50 -07:00
|
|
|
send->ev->in++;
|
|
|
|
|
|
|
|
if (send->ev->in == send->ev->out
|
|
|
|
&& send->ev->threads == NULL
|
|
|
|
&& send->ev->delete_me)
|
|
|
|
em_shutdown(send->ev);
|
|
|
|
|
2011-08-01 05:42:16 -07:00
|
|
|
gst_buffer_unref(send->frame);
|
|
|
|
free(send);
|
|
|
|
}
|
2011-08-02 07:04:08 -07:00
|
|
|
|
|
|
|
Emotion_Gstreamer_Message *
|
|
|
|
emotion_gstreamer_message_alloc(Emotion_Gstreamer_Video *ev,
|
|
|
|
GstMessage *msg)
|
|
|
|
{
|
|
|
|
Emotion_Gstreamer_Message *send;
|
|
|
|
|
2011-08-16 09:11:50 -07:00
|
|
|
if (!ev) return NULL;
|
|
|
|
|
2011-08-02 07:04:08 -07:00
|
|
|
send = malloc(sizeof (Emotion_Gstreamer_Message));
|
|
|
|
if (!send) return NULL;
|
|
|
|
|
2011-08-11 09:16:10 -07:00
|
|
|
ev->out++;
|
2011-08-02 07:04:08 -07:00
|
|
|
send->ev = ev;
|
|
|
|
send->msg = gst_message_ref(msg);
|
|
|
|
|
|
|
|
return send;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
emotion_gstreamer_message_free(Emotion_Gstreamer_Message *send)
|
|
|
|
{
|
2011-08-11 09:16:10 -07:00
|
|
|
send->ev->in++;
|
|
|
|
|
2011-08-16 09:11:50 -07:00
|
|
|
if (send->ev->in == send->ev->out
|
|
|
|
&& send->ev->threads == NULL
|
|
|
|
&& send->ev->delete_me)
|
2011-08-11 09:16:10 -07:00
|
|
|
em_shutdown(send->ev);
|
|
|
|
|
2011-08-02 07:04:08 -07:00
|
|
|
gst_message_unref(send->msg);
|
|
|
|
free(send);
|
|
|
|
}
|