mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
video: add GstVideoSinkClass::show_frame()
Add ::show_frame() vfunc which maps to basesink's ::preroll and ::render vfuncs and add some gtk-doc chunks. API: GstVideoSinkClass::show_frame()
This commit is contained in:
parent
3bbbea6212
commit
e2b4187fe3
2 changed files with 84 additions and 11 deletions
|
@ -1,7 +1,6 @@
|
||||||
/*
|
/* GStreamer video sink base class
|
||||||
* GStreamer Video sink.
|
|
||||||
*
|
|
||||||
* Copyright (C) <2003> Julien Moutte <julien@moutte.net>
|
* Copyright (C) <2003> Julien Moutte <julien@moutte.net>
|
||||||
|
* Copyright (C) <2009> Tim-Philipp Müller <tim centricular net>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -44,7 +43,12 @@
|
||||||
GST_DEBUG_CATEGORY_STATIC (video_sink_debug);
|
GST_DEBUG_CATEGORY_STATIC (video_sink_debug);
|
||||||
#define GST_CAT_DEFAULT video_sink_debug
|
#define GST_CAT_DEFAULT video_sink_debug
|
||||||
|
|
||||||
static GstElementClass *parent_class = NULL;
|
static GstBaseSinkClass *parent_class = NULL;
|
||||||
|
|
||||||
|
static GstFlowReturn gst_video_sink_show_preroll_frame (GstBaseSink * bsink,
|
||||||
|
GstBuffer * buf);
|
||||||
|
static GstFlowReturn gst_video_sink_show_frame (GstBaseSink * bsink,
|
||||||
|
GstBuffer * buf);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_video_sink_center_rect:
|
* gst_video_sink_center_rect:
|
||||||
|
@ -112,7 +116,13 @@ gst_video_sink_init (GstVideoSink * videosink)
|
||||||
static void
|
static void
|
||||||
gst_video_sink_class_init (GstVideoSinkClass * klass)
|
gst_video_sink_class_init (GstVideoSinkClass * klass)
|
||||||
{
|
{
|
||||||
|
GstBaseSinkClass *basesink_class = (GstBaseSinkClass *) klass;
|
||||||
|
|
||||||
parent_class = g_type_class_peek_parent (klass);
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
|
basesink_class->render = GST_DEBUG_FUNCPTR (gst_video_sink_show_frame);
|
||||||
|
basesink_class->preroll =
|
||||||
|
GST_DEBUG_FUNCPTR (gst_video_sink_show_preroll_frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -121,6 +131,46 @@ gst_video_sink_base_init (gpointer g_class)
|
||||||
GST_DEBUG_CATEGORY_INIT (video_sink_debug, "videosink", 0, "GstVideoSink");
|
GST_DEBUG_CATEGORY_INIT (video_sink_debug, "videosink", 0, "GstVideoSink");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstFlowReturn
|
||||||
|
gst_video_sink_show_preroll_frame (GstBaseSink * bsink, GstBuffer * buf)
|
||||||
|
{
|
||||||
|
GstVideoSinkClass *klass;
|
||||||
|
|
||||||
|
klass = GST_VIDEO_SINK_GET_CLASS (bsink);
|
||||||
|
|
||||||
|
if (klass->show_frame == NULL) {
|
||||||
|
if (parent_class->preroll != NULL)
|
||||||
|
return parent_class->preroll (bsink, buf);
|
||||||
|
else
|
||||||
|
return GST_FLOW_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_LOG_OBJECT (bsink, "rendering frame, ts=%" GST_TIME_FORMAT,
|
||||||
|
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
|
||||||
|
|
||||||
|
return klass->show_frame (GST_VIDEO_SINK_CAST (bsink), buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GstFlowReturn
|
||||||
|
gst_video_sink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
|
||||||
|
{
|
||||||
|
GstVideoSinkClass *klass;
|
||||||
|
|
||||||
|
klass = GST_VIDEO_SINK_GET_CLASS (bsink);
|
||||||
|
|
||||||
|
if (klass->show_frame == NULL) {
|
||||||
|
if (parent_class->render != NULL)
|
||||||
|
return parent_class->render (bsink, buf);
|
||||||
|
else
|
||||||
|
return GST_FLOW_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_LOG_OBJECT (bsink, "rendering frame, ts=%" GST_TIME_FORMAT,
|
||||||
|
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
|
||||||
|
|
||||||
|
return klass->show_frame (GST_VIDEO_SINK_CAST (bsink), buf);
|
||||||
|
}
|
||||||
|
|
||||||
/* Public methods */
|
/* Public methods */
|
||||||
|
|
||||||
GType
|
GType
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
/*
|
/* GStreamer video sink base class
|
||||||
* GStreamer Video sink.
|
|
||||||
*
|
|
||||||
* Copyright (C) <2003> Julien Moutte <julien@moutte.net>
|
* Copyright (C) <2003> Julien Moutte <julien@moutte.net>
|
||||||
|
* Copyright (C) <2009> Tim-Philipp Müller <tim centricular net>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -19,6 +18,8 @@
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* FIXME 0.11: turn this into a proper base class */
|
||||||
|
|
||||||
#ifndef __GST_VIDEO_SINK_H__
|
#ifndef __GST_VIDEO_SINK_H__
|
||||||
#define __GST_VIDEO_SINK_H__
|
#define __GST_VIDEO_SINK_H__
|
||||||
|
|
||||||
|
@ -80,18 +81,40 @@ struct _GstVideoRectangle {
|
||||||
gint h;
|
gint h;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstVideoSink:
|
||||||
|
* @element: the parent object structure (which is GstBaseSink)
|
||||||
|
* @height: video height (derived class needs to set this)
|
||||||
|
* @width: video width (derived class needs to set this)
|
||||||
|
*
|
||||||
|
* The video sink instance structure. Derived video sinks should set the
|
||||||
|
* @height and @width members.
|
||||||
|
*/
|
||||||
struct _GstVideoSink {
|
struct _GstVideoSink {
|
||||||
GstBaseSink element;
|
GstBaseSink element; /* FIXME 0.11: this should not be called 'element' */
|
||||||
|
|
||||||
gint width, height;
|
gint width, height;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
gpointer _gst_reserved[GST_PADDING];
|
gpointer _gst_reserved[GST_PADDING];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstVideoSinkClass:
|
||||||
|
* @parent_class: the parent class structure
|
||||||
|
* @show_frame: render a video frame. Maps to #GstBaseSink::render and
|
||||||
|
* #GstBaseSink::preroll vfuncs. Since: 0.10.25
|
||||||
|
*
|
||||||
|
* The video sink class structure. Derived classes should override the
|
||||||
|
* @show_frame virtual function.
|
||||||
|
*/
|
||||||
struct _GstVideoSinkClass {
|
struct _GstVideoSinkClass {
|
||||||
GstBaseSinkClass parent_class;
|
GstBaseSinkClass parent_class;
|
||||||
|
|
||||||
gpointer _gst_reserved[GST_PADDING];
|
GstFlowReturn (*show_frame) (GstVideoSink *video_sink, GstBuffer *buf);
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
gpointer _gst_reserved[GST_PADDING - 1];
|
||||||
};
|
};
|
||||||
|
|
||||||
GType gst_video_sink_get_type (void);
|
GType gst_video_sink_get_type (void);
|
||||||
|
|
Loading…
Reference in a new issue