efl/src/modules/emotion/gstreamer1/emotion_alloc.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);
}