//blocking call, use a FBO
gst_gl_context_use_fbo_v2 (mix->context,
- GST_VIDEO_INFO_WIDTH (&mix->out_info),
- GST_VIDEO_INFO_HEIGHT (&mix->out_info), mix->fbo, mix->depthbuffer,
- out_tex, gst_gl_mosaic_callback, (gpointer) mosaic);
+ GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR (mix)->info),
+ GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR (mix)->info), mix->fbo,
+ mix->depthbuffer, out_tex, gst_gl_mosaic_callback, (gpointer) mosaic);
return TRUE;
}
continue;
}
in_tex = frame->texture;
- width = GST_VIDEO_INFO_WIDTH (&frame->pad->in_info);
- height = GST_VIDEO_INFO_HEIGHT (&frame->pad->in_info);
+ width = GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR_PAD (frame->pad)->info);
+ height =
+ GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR_PAD (frame->pad)->info);
if (!in_tex || width <= 0 || height <= 0) {
GST_DEBUG ("skipping texture:%u frame:%p width:%u height %u",
/* properties */
gint xpos, ypos;
gint width, height;
- guint zorder;
gdouble alpha;
};
static void gst_gl_video_mixer_pad_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec);
-#define DEFAULT_PAD_ZORDER 0
#define DEFAULT_PAD_XPOS 0
#define DEFAULT_PAD_YPOS 0
#define DEFAULT_PAD_WIDTH 0
enum
{
PROP_PAD_0,
- PROP_PAD_ZORDER,
PROP_PAD_XPOS,
PROP_PAD_YPOS,
PROP_PAD_WIDTH,
gobject_class->set_property = gst_gl_video_mixer_pad_set_property;
gobject_class->get_property = gst_gl_video_mixer_pad_get_property;
- g_object_class_install_property (gobject_class, PROP_PAD_ZORDER,
- g_param_spec_uint ("zorder", "Z-Order", "Z Order of the picture",
- 0, 10000, DEFAULT_PAD_ZORDER,
- G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_PAD_XPOS,
g_param_spec_int ("xpos", "X Position", "X Position of the picture",
G_MININT, G_MAXINT, DEFAULT_PAD_XPOS,
GstGLVideoMixerPad *pad = GST_GL_VIDEO_MIXER_PAD (object);
switch (prop_id) {
- case PROP_PAD_ZORDER:
- g_value_set_uint (value, pad->zorder);
- break;
case PROP_PAD_XPOS:
g_value_set_int (value, pad->xpos);
break;
}
}
-static int
-pad_zorder_compare (const GstGLVideoMixerPad * pad1,
- const GstGLVideoMixerPad * pad2)
-{
- return pad1->zorder - pad2->zorder;
-}
-
static void
gst_gl_video_mixer_pad_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
GstGLMixer *mix = GST_GL_MIXER (gst_pad_get_parent (GST_PAD (pad)));
switch (prop_id) {
- case PROP_PAD_ZORDER:
- GST_GL_MIXER_LOCK (mix);
- pad->zorder = g_value_get_uint (value);
-
- mix->sinkpads = g_slist_sort (mix->sinkpads,
- (GCompareFunc) pad_zorder_compare);
- GST_GL_MIXER_UNLOCK (mix);
- break;
case PROP_PAD_XPOS:
pad->xpos = g_value_get_int (value);
break;
{
GObjectClass *gobject_class;
GstElementClass *element_class;
+ GstAggregatorClass *agg_class = (GstAggregatorClass *) klass;
gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (klass);
GST_GL_MIXER_CLASS (klass)->reset = gst_gl_video_mixer_reset;
GST_GL_MIXER_CLASS (klass)->process_textures =
gst_gl_video_mixer_process_textures;
+
+ agg_class->sinkpads_type = GST_TYPE_GL_VIDEO_MIXER_PAD;
+
}
static void
{
video_mixer->shader = NULL;
video_mixer->input_frames = NULL;
-
- gst_gl_mixer_set_pad_type (GST_GL_MIXER (video_mixer),
- GST_TYPE_GL_VIDEO_MIXER_PAD);
}
static void
video_mixer->input_frames = frames;
gst_gl_context_use_fbo_v2 (mix->context,
- GST_VIDEO_INFO_WIDTH (&mix->out_info),
- GST_VIDEO_INFO_HEIGHT (&mix->out_info), mix->fbo, mix->depthbuffer,
+ GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR (mix)->info),
+ GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR (mix)->info),
+ mix->fbo, mix->depthbuffer,
out_tex, gst_gl_video_mixer_callback, (gpointer) video_mixer);
return TRUE;
guint count = 0;
- out_width = GST_VIDEO_INFO_WIDTH (&mixer->out_info);
- out_height = GST_VIDEO_INFO_HEIGHT (&mixer->out_info);
+ out_width = GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR (stuff)->info);
+ out_height = GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR (stuff)->info);
gst_gl_context_clear_shader (mixer->context);
gl->BindTexture (GL_TEXTURE_2D, 0);
continue;
}
pad = (GstGLVideoMixerPad *) frame->pad;
- in_width = GST_VIDEO_INFO_WIDTH (&frame->pad->in_info);
- in_height = GST_VIDEO_INFO_HEIGHT (&frame->pad->in_info);
+ in_width =
+ GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR_PAD (pad)->info);
+ in_height =
+ GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR_PAD (pad)->info);
if (!frame->texture || in_width <= 0 || in_height <= 0) {
GST_DEBUG ("skipping texture:%u frame:%p width:%u height %u",