aboutsummaryrefslogtreecommitdiff
path: root/src/views/video/msink.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/video/msink.c')
-rw-r--r--src/views/video/msink.c141
1 files changed, 0 insertions, 141 deletions
diff --git a/src/views/video/msink.c b/src/views/video/msink.c
deleted file mode 100644
index 8e85c6ab..00000000
--- a/src/views/video/msink.c
+++ /dev/null
@@ -1,141 +0,0 @@
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-
-#include "msink.h"
-
-static GstStaticPadTemplate sinktemplate
-= GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ IYUV, I420, YV12 }") ";" \
- GST_VIDEO_CAPS_RGBx ";" \
- GST_VIDEO_CAPS_BGRx ";" \
- GST_VIDEO_CAPS_RGB ";" \
- GST_VIDEO_CAPS_BGR));
-static GstStaticPadTemplate sinktemplate_rgb
-= GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB));
- /*GST_STATIC_CAPS (GST_VIDEO_CAPS_RGBx ";" \
- GST_VIDEO_CAPS_BGRx ";" \
- GST_VIDEO_CAPS_RGB ";" \
- GST_VIDEO_CAPS_BGR));*/
-static GstStaticPadTemplate sinktemplate_yuv
-= GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ IYUV, I420, YV12 }")));
-
-G_DEFINE_TYPE (MGstVideoSink, m_gst_video_sink, GST_TYPE_BASE_SINK)
-
-static void
-m_gst_video_sink_init (MGstVideoSink *sink)
-{
- sink->w = sink->h = 0;
- sink->frameskip = 1;
-}
-
-static GstFlowReturn
-m_gst_video_sink_render (GstBaseSink *bsink, GstBuffer *buffer)
-{
- MGstVideoSink *sink;
- static int n = 1;
-
- sink = M_GST_VIDEO_SINK (bsink);
-
- if (buffer == NULL || G_UNLIKELY (!GST_IS_BUFFER (buffer))) {
- return FALSE;
- }
-
- // take ownership
- gst_buffer_ref (buffer);
-
- if (--n==0) {
- sink->frame_cb (buffer, sink->user_data);
- n = sink->frameskip;
- }
- else {
- gst_buffer_unref (buffer);
- }
-
- return GST_FLOW_OK;
-}
-
-static gboolean
-m_gst_video_sink_set_caps (GstBaseSink *bsink,
- GstCaps *caps)
-{
-
- MGstVideoSink *sink;
- GstStructure *structure;
-
- sink = M_GST_VIDEO_SINK (bsink);
-
- if (sink->yuv_mode) {
- gst_caps_intersect
- (gst_static_pad_template_get_caps (&sinktemplate_yuv),
- caps);
- } else {
- gst_caps_intersect
- (gst_static_pad_template_get_caps (&sinktemplate_rgb),
- caps);
- }
-
- structure = gst_caps_get_structure (caps, 0);
-
- gst_structure_get_int (structure, "width", &sink->w);
- gst_structure_get_int (structure, "height", &sink->h);
-
- //sink->ready_cb(sink->user_data);
- return TRUE;
-}
-
-static GstCaps*
-m_gst_video_sink_get_caps (GstBaseSink *bsink)
-{
- MGstVideoSink *sink;
-
- sink = M_GST_VIDEO_SINK (bsink);
-
- if (sink->yuv_mode)
- return gst_static_pad_template_get_caps (&sinktemplate_yuv);
- else
- return gst_static_pad_template_get_caps (&sinktemplate_rgb);
-}
-
-
-static void
-m_gst_video_sink_class_init (MGstVideoSinkClass *klass)
-{
- GstBaseSinkClass *gstbase_sink_class = GST_BASE_SINK_CLASS (klass);
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gstbase_sink_class->render = m_gst_video_sink_render;
- gstbase_sink_class->preroll = m_gst_video_sink_render;
- gstbase_sink_class->set_caps = m_gst_video_sink_set_caps;
- gstbase_sink_class->get_caps = m_gst_video_sink_get_caps;
-
- gst_element_class_add_pad_template
- (element_class,
- gst_static_pad_template_get (&sinktemplate));
-}
-
-GstElement *
-m_gst_video_sink_new ()
-{
- GstElement *sink = g_object_new (M_GST_TYPE_VIDEO_SINK, NULL);
- M_GST_VIDEO_SINK (sink)->yuv_mode = 0;
-
- return sink;
-}
-
-GstElement *
-m_gst_video_sink_yuv_new ()
-{
- GstElement *sink = g_object_new (M_GST_TYPE_VIDEO_SINK, NULL);
- M_GST_VIDEO_SINK (sink)->yuv_mode = 1;
-
- return sink;
-}