gst/effectv/gstquark.c: Flush the planes list on reverse caps negotiation. This was crashing because of differently s...
Original commit message from CVS: 2005-11-24 Julien MOUTTE <julien@moutte.net> * gst/effectv/gstquark.c: (gst_quarktv_set_caps), (gst_quarktv_get_unit_size), (gst_quarktv_transform), (gst_quarktv_planetable_clear), (gst_quarktv_change_state), (gst_quarktv_base_init), (gst_quarktv_class_init), (gst_quarktv_init): Flush the planes list on reverse caps negotiation. This was crashing because of differently sized buffers.
This commit is contained in:
parent
20c7083ccd
commit
b47757e510
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2005-11-24 Julien MOUTTE <julien@moutte.net>
|
||||||
|
|
||||||
|
* gst/effectv/gstquark.c: (gst_quarktv_set_caps),
|
||||||
|
(gst_quarktv_get_unit_size), (gst_quarktv_transform),
|
||||||
|
(gst_quarktv_planetable_clear), (gst_quarktv_change_state),
|
||||||
|
(gst_quarktv_base_init), (gst_quarktv_class_init),
|
||||||
|
(gst_quarktv_init): Flush the planes list on reverse caps
|
||||||
|
negotiation. This was crashing because of differently sized
|
||||||
|
buffers.
|
||||||
|
|
||||||
2005-11-24 Julien MOUTTE <julien@moutte.net>
|
2005-11-24 Julien MOUTTE <julien@moutte.net>
|
||||||
|
|
||||||
* gst/debug/gstnavigationtest.c: (draw_box_planar411):
|
* gst/debug/gstnavigationtest.c: (draw_box_planar411):
|
||||||
|
@ -74,6 +74,8 @@ enum
|
|||||||
|
|
||||||
GType gst_quarktv_get_type (void);
|
GType gst_quarktv_get_type (void);
|
||||||
|
|
||||||
|
static void gst_quarktv_planetable_clear (GstQuarkTV * filter);
|
||||||
|
|
||||||
static GstElementDetails quarktv_details = GST_ELEMENT_DETAILS ("QuarkTV",
|
static GstElementDetails quarktv_details = GST_ELEMENT_DETAILS ("QuarkTV",
|
||||||
"Filter/Effect/Video",
|
"Filter/Effect/Video",
|
||||||
"Motion dissolver",
|
"Motion dissolver",
|
||||||
@ -107,6 +109,7 @@ gst_quarktv_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
|
|||||||
|
|
||||||
if (gst_structure_get_int (structure, "width", &filter->width) &&
|
if (gst_structure_get_int (structure, "width", &filter->width) &&
|
||||||
gst_structure_get_int (structure, "height", &filter->height)) {
|
gst_structure_get_int (structure, "height", &filter->height)) {
|
||||||
|
gst_quarktv_planetable_clear (filter);
|
||||||
filter->area = filter->width * filter->height;
|
filter->area = filter->width * filter->height;
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
}
|
}
|
||||||
@ -188,6 +191,19 @@ gst_quarktv_transform (GstBaseTransform * trans, GstBuffer * in,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_quarktv_planetable_clear (GstQuarkTV * filter)
|
||||||
|
{
|
||||||
|
gint i;
|
||||||
|
|
||||||
|
for (i = 0; i < filter->planes; i++) {
|
||||||
|
if (GST_IS_BUFFER (filter->planetable[i])) {
|
||||||
|
gst_buffer_unref (filter->planetable[i]);
|
||||||
|
}
|
||||||
|
filter->planetable[i] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static GstStateChangeReturn
|
static GstStateChangeReturn
|
||||||
gst_quarktv_change_state (GstElement * element, GstStateChange transition)
|
gst_quarktv_change_state (GstElement * element, GstStateChange transition)
|
||||||
{
|
{
|
||||||
@ -198,8 +214,7 @@ gst_quarktv_change_state (GstElement * element, GstStateChange transition)
|
|||||||
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
||||||
{
|
{
|
||||||
filter->planetable =
|
filter->planetable =
|
||||||
(GstBuffer **) g_malloc (filter->planes * sizeof (GstBuffer *));
|
(GstBuffer **) g_malloc0 (filter->planes * sizeof (GstBuffer *));
|
||||||
memset (filter->planetable, 0, filter->planes * sizeof (GstBuffer *));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -212,13 +227,7 @@ gst_quarktv_change_state (GstElement * element, GstStateChange transition)
|
|||||||
switch (transition) {
|
switch (transition) {
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||||
{
|
{
|
||||||
gint i;
|
gst_quarktv_planetable_clear (filter);
|
||||||
|
|
||||||
for (i = 0; i < filter->planes; i++) {
|
|
||||||
if (filter->planetable[i])
|
|
||||||
gst_buffer_unref (filter->planetable[i]);
|
|
||||||
filter->planetable[i] = NULL;
|
|
||||||
}
|
|
||||||
g_free (filter->planetable);
|
g_free (filter->planetable);
|
||||||
filter->planetable = NULL;
|
filter->planetable = NULL;
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user