const GValue * value, GParamSpec * pspec)
{
GstVideoMixerPad *pad;
-
GstVideoMixer *mix;
pad = GST_VIDEO_MIXER_PAD (object);
gst_videomixer_set_master_geometry (GstVideoMixer * mix)
{
GSList *walk;
-
gint width = 0, height = 0, fps_n = 0, fps_d = 0;
-
GstVideoMixerPad *master = NULL;
walk = mix->sinkpads;
gst_videomixer_pad_sink_setcaps (GstPad * pad, GstCaps * vscaps)
{
GstVideoMixer *mix;
-
GstVideoMixerPad *mixpad;
-
GstStructure *structure;
-
gint in_width, in_height;
-
gboolean ret = FALSE;
-
const GValue *framerate;
mix = GST_VIDEO_MIXER (gst_pad_get_parent (pad));
static void gst_videomixer_finalize (GObject * object);
static GstCaps *gst_videomixer_getcaps (GstPad * pad);
-
static gboolean gst_videomixer_query (GstPad * pad, GstQuery * query);
static GstFlowReturn gst_videomixer_collected (GstCollectPads * pads,
guint index)
{
GstVideoMixer *mix = GST_VIDEO_MIXER (child_proxy);
-
GstObject *obj;
GST_VIDEO_MIXER_STATE_LOCK (mix);
gst_videomixer_child_proxy_get_children_count (GstChildProxy * child_proxy)
{
guint count = 0;
-
GstVideoMixer *mix = GST_VIDEO_MIXER (child_proxy);
GST_VIDEO_MIXER_STATE_LOCK (mix);
gst_videomixer_class_init (GstVideoMixerClass * klass)
{
GObjectClass *gobject_class;
-
GstElementClass *gstelement_class;
gobject_class = (GObjectClass *) klass;
gst_videomixer_query_duration (GstVideoMixer * mix, GstQuery * query)
{
gint64 max;
-
gboolean res;
-
GstFormat format;
-
GstIterator *it;
-
gboolean done;
/* parse format */
it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (mix));
while (!done) {
GstIteratorResult ires;
-
gpointer item;
ires = gst_iterator_next (it, &item);
case GST_ITERATOR_OK:
{
GstPad *pad = GST_PAD_CAST (item);
-
gint64 duration;
/* ask sink peer for duration */
gst_videomixer_query_latency (GstVideoMixer * mix, GstQuery * query)
{
GstClockTime min, max;
-
gboolean live;
-
gboolean res;
-
GstIterator *it;
-
gboolean done;
res = TRUE;
done = FALSE;
-
live = FALSE;
min = 0;
max = GST_CLOCK_TIME_NONE;
it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (mix));
while (!done) {
GstIteratorResult ires;
-
gpointer item;
ires = gst_iterator_next (it, &item);
gst_videomixer_query (GstPad * pad, GstQuery * query)
{
GstVideoMixer *mix = GST_VIDEO_MIXER (gst_pad_get_parent (pad));
-
gboolean res = FALSE;
switch (GST_QUERY_TYPE (query)) {
gst_videomixer_getcaps (GstPad * pad)
{
GstVideoMixer *mix;
-
GstCaps *caps;
-
GstStructure *structure;
mix = GST_VIDEO_MIXER (gst_pad_get_parent (pad));
GstPadTemplate * templ, const gchar * req_name)
{
GstVideoMixer *mix = NULL;
-
GstVideoMixerPad *mixpad = NULL;
-
GstElementClass *klass = GST_ELEMENT_GET_CLASS (element);
g_return_val_if_fail (templ != NULL, NULL);
if (templ == gst_element_class_get_pad_template (klass, "sink_%d")) {
gint serial = 0;
-
gchar *name = NULL;
-
GstVideoMixerCollect *mixcol = NULL;
if (req_name == NULL || strlen (req_name) < 6) {
gst_videomixer_release_pad (GstElement * element, GstPad * pad)
{
GstVideoMixer *mix = NULL;
-
GstVideoMixerPad *mixpad;
mix = GST_VIDEO_MIXER (element);
guint8 * dest, gint dest_width, gint dest_height)
{
gint alpha, b_alpha;
-
gint i, j;
-
gint src_stride, dest_stride;
-
gint src_add, dest_add;
-
gint Y, U, V;
src_stride = src_width * 4;
gst_videomixer_fill_queues (GstVideoMixer * mix)
{
GSList *walk = NULL;
-
gboolean eos = TRUE;
g_return_val_if_fail (GST_IS_VIDEO_MIXER (mix), FALSE);
walk = mix->collect->data;
while (walk) {
GstCollectData *data = (GstCollectData *) walk->data;
-
GstVideoMixerCollect *mixcol = (GstVideoMixerCollect *) data;
-
GstVideoMixerPad *mixpad = mixcol->mixpad;
walk = g_slist_next (walk);
if (mix->sendseg && (mixpad == mix->master)) {
GstEvent *event;
gint64 stop, start;
-
GstSegment *segment = &data->segment;
/* FIXME, use rate/applied_rate as set on all sinkpads.
walk = mix->sinkpads;
while (walk) { /* We walk with this list because it's ordered */
GstVideoMixerPad *pad = GST_VIDEO_MIXER_PAD (walk->data);
-
GstVideoMixerCollect *mixcol = pad->mixcol;
walk = g_slist_next (walk);
gst_videomixer_update_queues (GstVideoMixer * mix)
{
GSList *walk;
-
guint64 interval;
interval = mix->master->queued;
walk = mix->sinkpads;
while (walk) {
GstVideoMixerPad *pad = GST_VIDEO_MIXER_PAD (walk->data);
-
GstVideoMixerCollect *mixcol = pad->mixcol;
walk = g_slist_next (walk);
gst_videomixer_collected (GstCollectPads * pads, GstVideoMixer * mix)
{
GstFlowReturn ret = GST_FLOW_OK;
-
GstBuffer *outbuf = NULL;
-
size_t outsize = 0;
-
gboolean eos = FALSE;
g_return_val_if_fail (GST_IS_VIDEO_MIXER (mix), GST_FLOW_ERROR);
forward_event (GstVideoMixer * mix, GstEvent * event)
{
gboolean ret;
-
GstIterator *it;
GValue vret = { 0 };
gst_videomixer_src_event (GstPad * pad, GstEvent * event)
{
GstVideoMixer *mix;
-
gboolean result;
mix = GST_VIDEO_MIXER (gst_pad_get_parent (pad));
gst_videomixer_sink_event (GstPad * pad, GstEvent * event)
{
GstVideoMixer *videomixer;
-
gboolean ret;
videomixer = GST_VIDEO_MIXER (gst_pad_get_parent (pad));
gst_videomixer_change_state (GstElement * element, GstStateChange transition)
{
GstVideoMixer *mix;
-
GstStateChangeReturn ret;
g_return_val_if_fail (GST_IS_VIDEO_MIXER (element), GST_STATE_CHANGE_FAILURE);