forked from enlightenment/efl
67 lines
1.6 KiB
C
67 lines
1.6 KiB
C
#ifdef HAVE_CONFIG_H
|
|
# include "config.h"
|
|
#endif
|
|
|
|
#include "emotion_gstreamer.h"
|
|
|
|
Emotion_Gstreamer_Buffer *
|
|
emotion_gstreamer_buffer_alloc(EmotionVideoSink *sink,
|
|
GstBuffer *buffer,
|
|
GstVideoInfo *info,
|
|
Evas_Colorspace eformat,
|
|
int eheight,
|
|
Evas_Video_Convert_Cb func)
|
|
{
|
|
Emotion_Gstreamer_Buffer *send;
|
|
|
|
if (!sink->priv->emotion_object) return NULL;
|
|
|
|
send = calloc(1, sizeof(Emotion_Gstreamer_Buffer));
|
|
if (!send) return NULL;
|
|
|
|
send->sink = gst_object_ref(sink);
|
|
send->frame = gst_buffer_ref(buffer);
|
|
send->info = *info;
|
|
if (gst_video_frame_map(&(send->vframe), info, buffer, GST_MAP_READ))
|
|
send->vfmapped = EINA_TRUE;
|
|
else
|
|
send->vfmapped = EINA_FALSE;
|
|
send->eformat = eformat;
|
|
send->eheight = eheight;
|
|
send->func = func;
|
|
return send;
|
|
}
|
|
|
|
void
|
|
emotion_gstreamer_buffer_free(Emotion_Gstreamer_Buffer *send)
|
|
{
|
|
gst_object_unref(send->sink);
|
|
gst_buffer_replace(&send->frame, NULL);
|
|
free(send);
|
|
}
|
|
|
|
Emotion_Gstreamer_Message *
|
|
emotion_gstreamer_message_alloc(Emotion_Gstreamer *ev,
|
|
GstMessage *msg)
|
|
{
|
|
Emotion_Gstreamer_Message *send;
|
|
|
|
if (!ev) return NULL;
|
|
|
|
send = malloc(sizeof (Emotion_Gstreamer_Message));
|
|
if (!send) return NULL;
|
|
|
|
send->ev = emotion_gstreamer_ref(ev);
|
|
send->msg = gst_message_ref(msg);
|
|
|
|
return send;
|
|
}
|
|
|
|
void
|
|
emotion_gstreamer_message_free(Emotion_Gstreamer_Message *send)
|
|
{
|
|
emotion_gstreamer_unref(send->ev);
|
|
gst_message_unref(send->msg);
|
|
free(send);
|
|
}
|