mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +00:00
Massive leak fixing, plus code cleanups.
Original commit message from CVS: * ext/audioresample/gstaudioresample.c: * ext/x264/gstx264enc.c: * gst/dvdspu/gstdvdspu.c: * gst/dvdspu/gstdvdspu.h: * gst/festival/gstfestival.c: * gst/h264parse/gsth264parse.c: * gst/mpegtsparse/mpegtspacketizer.c: * gst/mpegtsparse/mpegtsparse.c: * gst/multifile/gstmultifilesink.c: * gst/multifile/gstmultifilesrc.c: * gst/nuvdemux/gstnuvdemux.c: * sys/dshowsrcwrapper/gstdshowaudiosrc.c: * sys/dshowsrcwrapper/gstdshowvideosrc.c: * sys/vcd/vcdsrc.c: Massive leak fixing, plus code cleanups.
This commit is contained in:
parent
9525b8056f
commit
1af510f8d5
15 changed files with 154 additions and 77 deletions
18
ChangeLog
18
ChangeLog
|
@ -1,3 +1,21 @@
|
||||||
|
2007-09-24 Stefan Kost <ensonic@users.sf.net>
|
||||||
|
|
||||||
|
* ext/audioresample/gstaudioresample.c:
|
||||||
|
* ext/x264/gstx264enc.c:
|
||||||
|
* gst/dvdspu/gstdvdspu.c:
|
||||||
|
* gst/dvdspu/gstdvdspu.h:
|
||||||
|
* gst/festival/gstfestival.c:
|
||||||
|
* gst/h264parse/gsth264parse.c:
|
||||||
|
* gst/mpegtsparse/mpegtspacketizer.c:
|
||||||
|
* gst/mpegtsparse/mpegtsparse.c:
|
||||||
|
* gst/multifile/gstmultifilesink.c:
|
||||||
|
* gst/multifile/gstmultifilesrc.c:
|
||||||
|
* gst/nuvdemux/gstnuvdemux.c:
|
||||||
|
* sys/dshowsrcwrapper/gstdshowaudiosrc.c:
|
||||||
|
* sys/dshowsrcwrapper/gstdshowvideosrc.c:
|
||||||
|
* sys/vcd/vcdsrc.c:
|
||||||
|
Massive leak fixing, plus code cleanups.
|
||||||
|
|
||||||
2007-09-22 Thomas Vander Stichele <thomas at apestaart dot org>
|
2007-09-22 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||||
|
|
||||||
* po/LINGUAS:
|
* po/LINGUAS:
|
||||||
|
|
|
@ -61,15 +61,16 @@ enum
|
||||||
"endianness = (int) BYTE_ORDER, " \
|
"endianness = (int) BYTE_ORDER, " \
|
||||||
"width = (int) 16, " \
|
"width = (int) 16, " \
|
||||||
"depth = (int) 16, " \
|
"depth = (int) 16, " \
|
||||||
"signed = (boolean) true")
|
"signed = (boolean) true"
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* disabled because it segfaults */
|
/* disabled because it segfaults */
|
||||||
"audio/x-raw-float, "
|
"audio/x-raw-float, "
|
||||||
"rate = (int) [ 1, MAX ], "
|
"rate = (int) [ 1, MAX ], "
|
||||||
"channels = (int) [ 1, MAX ], "
|
"channels = (int) [ 1, MAX ], "
|
||||||
"endianness = (int) BYTE_ORDER, " "width = (int) 32")
|
"endianness = (int) BYTE_ORDER, " "width = (int) 32"
|
||||||
#endif
|
#endif
|
||||||
|
)
|
||||||
|
|
||||||
static GstStaticPadTemplate gst_audioresample_sink_template =
|
static GstStaticPadTemplate gst_audioresample_sink_template =
|
||||||
GST_STATIC_PAD_TEMPLATE ("sink",
|
GST_STATIC_PAD_TEMPLATE ("sink",
|
||||||
GST_PAD_SINK, GST_PAD_ALWAYS, SUPPORTED_CAPS);
|
GST_PAD_SINK, GST_PAD_ALWAYS, SUPPORTED_CAPS);
|
||||||
|
|
|
@ -664,10 +664,9 @@ gst_x264_enc_dispose (GObject * object)
|
||||||
encoder->buffer = NULL;
|
encoder->buffer = NULL;
|
||||||
|
|
||||||
gst_x264_enc_timestamp_queue_free (encoder);
|
gst_x264_enc_timestamp_queue_free (encoder);
|
||||||
|
gst_x264_enc_close_encoder (encoder);
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
|
|
||||||
gst_x264_enc_close_encoder (encoder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
|
@ -16,6 +16,22 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* SECTION:element-dvdspu
|
||||||
|
*
|
||||||
|
* <refsect2>
|
||||||
|
* <para>
|
||||||
|
* DVD sub picture overlay element.
|
||||||
|
* </para>
|
||||||
|
* <title>Example launch line</title>
|
||||||
|
* <para>
|
||||||
|
* <programlisting>
|
||||||
|
* FIXME: gst-launch ...
|
||||||
|
* </programlisting>
|
||||||
|
* FIXME: description for the sample launch pipeline
|
||||||
|
* </para>
|
||||||
|
* </refsect2>
|
||||||
|
*/
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -65,8 +81,8 @@ GST_STATIC_PAD_TEMPLATE ("subpicture",
|
||||||
|
|
||||||
GST_BOILERPLATE (GstDVDSpu, dvdspu, GstElement, GST_TYPE_ELEMENT);
|
GST_BOILERPLATE (GstDVDSpu, dvdspu, GstElement, GST_TYPE_ELEMENT);
|
||||||
|
|
||||||
static void dvdspu_dispose (GstDVDSpu * dvdspu);
|
static void dvdspu_dispose (GObject * object);
|
||||||
static void dvdspu_finalize (GstDVDSpu * dvdspu);
|
static void dvdspu_finalize (GObject * object);
|
||||||
static GstStateChangeReturn dvdspu_change_state (GstElement * element,
|
static GstStateChangeReturn dvdspu_change_state (GstElement * element,
|
||||||
GstStateChange transition);
|
GstStateChange transition);
|
||||||
|
|
||||||
|
@ -172,17 +188,22 @@ dvdspu_clear (GstDVDSpu * dvdspu)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dvdspu_dispose (GstDVDSpu * dvdspu)
|
dvdspu_dispose (GObject * object)
|
||||||
{
|
{
|
||||||
|
GstDVDSpu *dvdspu = DVD_SPU (object);
|
||||||
|
|
||||||
/* need to hold the SPU lock in case other stuff is still running... */
|
/* need to hold the SPU lock in case other stuff is still running... */
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
dvdspu_clear (dvdspu);
|
dvdspu_clear (dvdspu);
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dvdspu_finalize (GstDVDSpu * dvdspu)
|
dvdspu_finalize (GObject * object)
|
||||||
{
|
{
|
||||||
|
GstDVDSpu *dvdspu = DVD_SPU (object);
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
|
@ -193,6 +214,8 @@ dvdspu_finalize (GstDVDSpu * dvdspu)
|
||||||
}
|
}
|
||||||
g_queue_free (dvdspu->pending_spus);
|
g_queue_free (dvdspu->pending_spus);
|
||||||
g_mutex_free (dvdspu->spu_lock);
|
g_mutex_free (dvdspu->spu_lock);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* With SPU lock held, clear the queue of SPU packets */
|
/* With SPU lock held, clear the queue of SPU packets */
|
||||||
|
@ -253,7 +276,7 @@ static GstFlowReturn
|
||||||
dvdspu_buffer_alloc (GstPad * sinkpad, guint64 offset, guint size,
|
dvdspu_buffer_alloc (GstPad * sinkpad, guint64 offset, guint size,
|
||||||
GstCaps * caps, GstBuffer ** buf)
|
GstCaps * caps, GstBuffer ** buf)
|
||||||
{
|
{
|
||||||
GstDVDSpu *dvdspu = GSTDVDSPU (gst_pad_get_parent (sinkpad));
|
GstDVDSpu *dvdspu = DVD_SPU (gst_pad_get_parent (sinkpad));
|
||||||
GstFlowReturn ret = GST_FLOW_OK;
|
GstFlowReturn ret = GST_FLOW_OK;
|
||||||
|
|
||||||
ret = gst_pad_alloc_buffer (dvdspu->srcpad, offset, size, caps, buf);
|
ret = gst_pad_alloc_buffer (dvdspu->srcpad, offset, size, caps, buf);
|
||||||
|
@ -266,7 +289,7 @@ dvdspu_buffer_alloc (GstPad * sinkpad, guint64 offset, guint size,
|
||||||
static gboolean
|
static gboolean
|
||||||
dvdspu_src_event (GstPad * pad, GstEvent * event)
|
dvdspu_src_event (GstPad * pad, GstEvent * event)
|
||||||
{
|
{
|
||||||
GstDVDSpu *dvdspu = GSTDVDSPU (gst_pad_get_parent (pad));
|
GstDVDSpu *dvdspu = DVD_SPU (gst_pad_get_parent (pad));
|
||||||
GstPad *peer;
|
GstPad *peer;
|
||||||
gboolean res = TRUE;
|
gboolean res = TRUE;
|
||||||
|
|
||||||
|
@ -283,7 +306,7 @@ dvdspu_src_event (GstPad * pad, GstEvent * event)
|
||||||
static gboolean
|
static gboolean
|
||||||
dvdspu_video_set_caps (GstPad * pad, GstCaps * caps)
|
dvdspu_video_set_caps (GstPad * pad, GstCaps * caps)
|
||||||
{
|
{
|
||||||
GstDVDSpu *dvdspu = GSTDVDSPU (gst_pad_get_parent (pad));
|
GstDVDSpu *dvdspu = DVD_SPU (gst_pad_get_parent (pad));
|
||||||
gboolean res = FALSE;
|
gboolean res = FALSE;
|
||||||
GstStructure *s;
|
GstStructure *s;
|
||||||
gint w, h;
|
gint w, h;
|
||||||
|
@ -299,7 +322,7 @@ dvdspu_video_set_caps (GstPad * pad, GstCaps * caps)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
|
|
||||||
state = &dvdspu->spu_state;
|
state = &dvdspu->spu_state;
|
||||||
|
|
||||||
|
@ -319,7 +342,7 @@ dvdspu_video_set_caps (GstPad * pad, GstCaps * caps)
|
||||||
sizeof (guint16) * state->UV_stride);
|
sizeof (guint16) * state->UV_stride);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
|
|
||||||
res = TRUE;
|
res = TRUE;
|
||||||
done:
|
done:
|
||||||
|
@ -330,7 +353,7 @@ done:
|
||||||
static GstCaps *
|
static GstCaps *
|
||||||
dvdspu_video_proxy_getcaps (GstPad * pad)
|
dvdspu_video_proxy_getcaps (GstPad * pad)
|
||||||
{
|
{
|
||||||
GstDVDSpu *dvdspu = GSTDVDSPU (gst_pad_get_parent (pad));
|
GstDVDSpu *dvdspu = DVD_SPU (gst_pad_get_parent (pad));
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
GstPad *otherpad;
|
GstPad *otherpad;
|
||||||
|
|
||||||
|
@ -384,7 +407,7 @@ dvdspu_video_event (GstPad * pad, GstEvent * event)
|
||||||
gboolean in_still;
|
gboolean in_still;
|
||||||
|
|
||||||
if (gst_structure_get_boolean (structure, "still-state", &in_still)) {
|
if (gst_structure_get_boolean (structure, "still-state", &in_still)) {
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
if (in_still) {
|
if (in_still) {
|
||||||
state->flags |= SPU_STATE_STILL_FRAME;
|
state->flags |= SPU_STATE_STILL_FRAME;
|
||||||
/* Entering still. Advance the SPU to make sure the state is
|
/* Entering still. Advance the SPU to make sure the state is
|
||||||
|
@ -396,7 +419,7 @@ dvdspu_video_event (GstPad * pad, GstEvent * event)
|
||||||
dvdspu_redraw_still (dvdspu);
|
dvdspu_redraw_still (dvdspu);
|
||||||
} else
|
} else
|
||||||
state->flags &= ~(SPU_STATE_STILL_FRAME);
|
state->flags &= ~(SPU_STATE_STILL_FRAME);
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
}
|
}
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
res = TRUE;
|
res = TRUE;
|
||||||
|
@ -425,7 +448,7 @@ dvdspu_video_event (GstPad * pad, GstEvent * event)
|
||||||
update, rate, arate, format, GST_TIME_ARGS (start),
|
update, rate, arate, format, GST_TIME_ARGS (start),
|
||||||
GST_TIME_ARGS (stop), GST_TIME_ARGS (time));
|
GST_TIME_ARGS (stop), GST_TIME_ARGS (time));
|
||||||
|
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
|
|
||||||
if (update && start > dvdspu->video_seg.last_stop) {
|
if (update && start > dvdspu->video_seg.last_stop) {
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -435,19 +458,19 @@ dvdspu_video_event (GstPad * pad, GstEvent * event)
|
||||||
#endif
|
#endif
|
||||||
while (dvdspu->video_seg.last_stop < start &&
|
while (dvdspu->video_seg.last_stop < start &&
|
||||||
!(state->flags & SPU_STATE_STILL_FRAME)) {
|
!(state->flags & SPU_STATE_STILL_FRAME)) {
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
if (dvspu_handle_vid_buffer (dvdspu, NULL) != GST_FLOW_OK) {
|
if (dvspu_handle_vid_buffer (dvdspu, NULL) != GST_FLOW_OK) {
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_segment_set_newsegment_full (&dvdspu->video_seg, update, rate, arate,
|
gst_segment_set_newsegment_full (&dvdspu->video_seg, update, rate, arate,
|
||||||
format, start, stop, time);
|
format, start, stop, time);
|
||||||
|
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
|
|
||||||
res = gst_pad_event_default (pad, event);
|
res = gst_pad_event_default (pad, event);
|
||||||
break;
|
break;
|
||||||
|
@ -458,12 +481,12 @@ dvdspu_video_event (GstPad * pad, GstEvent * event)
|
||||||
case GST_EVENT_FLUSH_STOP:
|
case GST_EVENT_FLUSH_STOP:
|
||||||
res = gst_pad_event_default (pad, event);
|
res = gst_pad_event_default (pad, event);
|
||||||
|
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
gst_segment_init (&dvdspu->video_seg, GST_FORMAT_UNDEFINED);
|
gst_segment_init (&dvdspu->video_seg, GST_FORMAT_UNDEFINED);
|
||||||
gst_buffer_replace (&dvdspu->ref_frame, NULL);
|
gst_buffer_replace (&dvdspu->ref_frame, NULL);
|
||||||
gst_buffer_replace (&dvdspu->pending_frame, NULL);
|
gst_buffer_replace (&dvdspu->pending_frame, NULL);
|
||||||
|
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
goto done;
|
goto done;
|
||||||
default:
|
default:
|
||||||
res = gst_pad_event_default (pad, event);
|
res = gst_pad_event_default (pad, event);
|
||||||
|
@ -505,7 +528,7 @@ dvspu_handle_vid_buffer (GstDVDSpu * dvdspu, GstBuffer * buf)
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
gboolean using_ref = FALSE;
|
gboolean using_ref = FALSE;
|
||||||
|
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
|
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
GstClockTime next_ts = dvdspu->video_seg.last_stop;
|
GstClockTime next_ts = dvdspu->video_seg.last_stop;
|
||||||
|
@ -581,7 +604,7 @@ dvspu_handle_vid_buffer (GstDVDSpu * dvdspu, GstBuffer * buf)
|
||||||
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
|
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
|
||||||
}
|
}
|
||||||
|
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
|
|
||||||
/* just push out the incoming buffer without touching it */
|
/* just push out the incoming buffer without touching it */
|
||||||
ret = gst_pad_push (dvdspu->srcpad, buf);
|
ret = gst_pad_push (dvdspu->srcpad, buf);
|
||||||
|
@ -590,7 +613,7 @@ dvspu_handle_vid_buffer (GstDVDSpu * dvdspu, GstBuffer * buf)
|
||||||
|
|
||||||
no_ref_frame:
|
no_ref_frame:
|
||||||
|
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
|
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
@ -1122,7 +1145,7 @@ dvdspu_subpic_chain (GstPad * pad, GstBuffer * buf)
|
||||||
GST_TIME_FORMAT " and size %u",
|
GST_TIME_FORMAT " and size %u",
|
||||||
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_BUFFER_SIZE (buf));
|
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_BUFFER_SIZE (buf));
|
||||||
|
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
|
|
||||||
if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
|
if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
|
||||||
gst_segment_set_last_stop (&dvdspu->subp_seg, GST_FORMAT_TIME,
|
gst_segment_set_last_stop (&dvdspu->subp_seg, GST_FORMAT_TIME,
|
||||||
|
@ -1215,7 +1238,7 @@ dvdspu_subpic_chain (GstPad * pad, GstBuffer * buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
|
|
||||||
gst_object_unref (dvdspu);
|
gst_object_unref (dvdspu);
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
|
@ -1243,7 +1266,7 @@ dvdspu_subpic_event (GstPad * pad, GstEvent * event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
if (GST_EVENT_IS_SERIALIZED (event)) {
|
if (GST_EVENT_IS_SERIALIZED (event)) {
|
||||||
SpuPacket *spu_packet = g_new0 (SpuPacket, 1);
|
SpuPacket *spu_packet = g_new0 (SpuPacket, 1);
|
||||||
|
|
||||||
|
@ -1258,7 +1281,7 @@ dvdspu_subpic_event (GstPad * pad, GstEvent * event)
|
||||||
* This requires some dancing to preserve locking order and handle
|
* This requires some dancing to preserve locking order and handle
|
||||||
* flushes correctly */
|
* flushes correctly */
|
||||||
need_push = (dvdspu->pending_frame != NULL);
|
need_push = (dvdspu->pending_frame != NULL);
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
if (need_push) {
|
if (need_push) {
|
||||||
GstBuffer *to_push = NULL;
|
GstBuffer *to_push = NULL;
|
||||||
gboolean flushing;
|
gboolean flushing;
|
||||||
|
@ -1270,15 +1293,15 @@ dvdspu_subpic_event (GstPad * pad, GstEvent * event)
|
||||||
flushing = GST_PAD_IS_FLUSHING (dvdspu->videosinkpad);
|
flushing = GST_PAD_IS_FLUSHING (dvdspu->videosinkpad);
|
||||||
GST_OBJECT_UNLOCK (dvdspu->videosinkpad);
|
GST_OBJECT_UNLOCK (dvdspu->videosinkpad);
|
||||||
|
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
if (dvdspu->pending_frame == NULL || flushing) {
|
if (dvdspu->pending_frame == NULL || flushing) {
|
||||||
/* Got flushed while waiting for the stream lock */
|
/* Got flushed while waiting for the stream lock */
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
} else {
|
} else {
|
||||||
to_push = dvdspu->pending_frame;
|
to_push = dvdspu->pending_frame;
|
||||||
dvdspu->pending_frame = NULL;
|
dvdspu->pending_frame = NULL;
|
||||||
|
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
gst_pad_push (dvdspu->srcpad, to_push);
|
gst_pad_push (dvdspu->srcpad, to_push);
|
||||||
}
|
}
|
||||||
GST_LOG_OBJECT (dvdspu, "Dropping stream lock");
|
GST_LOG_OBJECT (dvdspu, "Dropping stream lock");
|
||||||
|
@ -1306,10 +1329,10 @@ dvdspu_subpic_event (GstPad * pad, GstEvent * event)
|
||||||
update, rate, arate, format, GST_TIME_ARGS (start),
|
update, rate, arate, format, GST_TIME_ARGS (start),
|
||||||
GST_TIME_ARGS (stop), GST_TIME_ARGS (time));
|
GST_TIME_ARGS (stop), GST_TIME_ARGS (time));
|
||||||
|
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
gst_segment_set_newsegment_full (&dvdspu->subp_seg, update, rate, arate,
|
gst_segment_set_newsegment_full (&dvdspu->subp_seg, update, rate, arate,
|
||||||
format, start, stop, time);
|
format, start, stop, time);
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
|
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
break;
|
break;
|
||||||
|
@ -1318,9 +1341,9 @@ dvdspu_subpic_event (GstPad * pad, GstEvent * event)
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
goto done;
|
goto done;
|
||||||
case GST_EVENT_FLUSH_STOP:
|
case GST_EVENT_FLUSH_STOP:
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
dvdspu_flush_spu_info (dvdspu);
|
dvdspu_flush_spu_info (dvdspu);
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
|
|
||||||
/* We don't forward flushes on the spu pad */
|
/* We don't forward flushes on the spu pad */
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
|
@ -1346,9 +1369,9 @@ dvdspu_change_state (GstElement * element, GstStateChange transition)
|
||||||
|
|
||||||
switch (transition) {
|
switch (transition) {
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||||
GSTDVDSPU_LOCK (dvdspu);
|
DVD_SPU_LOCK (dvdspu);
|
||||||
dvdspu_clear (dvdspu);
|
dvdspu_clear (dvdspu);
|
||||||
GSTDVDSPU_UNLOCK (dvdspu);
|
DVD_SPU_UNLOCK (dvdspu);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -1364,7 +1387,7 @@ gstdvdspu_plugin_init (GstPlugin * plugin)
|
||||||
0, "DVD Sub-picture Overlay decoder/renderer");
|
0, "DVD Sub-picture Overlay decoder/renderer");
|
||||||
|
|
||||||
return gst_element_register (plugin, "dvdspu",
|
return gst_element_register (plugin, "dvdspu",
|
||||||
GST_RANK_NONE, GST_TYPE_GSTDVDSPU);
|
GST_RANK_NONE, GST_TYPE_DVD_SPU);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
|
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
|
||||||
|
|
|
@ -16,26 +16,26 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
#ifndef __GSTDVDSPU_H__
|
#ifndef __DVD_SPU_H__
|
||||||
#define __GSTDVDSPU_H__
|
#define __DVD_SPU_H__
|
||||||
|
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GST_TYPE_GSTDVDSPU \
|
#define GST_TYPE_DVD_SPU \
|
||||||
(dvdspu_get_type())
|
(dvdspu_get_type())
|
||||||
#define GSTDVDSPU(obj) \
|
#define DVD_SPU(obj) \
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GSTDVDSPU,GstDVDSpu))
|
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_SPU,GstDVDSpu))
|
||||||
#define GSTDVDSPU_CLASS(klass) \
|
#define DVD_SPU_CLASS(klass) \
|
||||||
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GSTDVDSPU,GstDVDSpuClass))
|
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_SPU,GstDVDSpuClass))
|
||||||
#define GST_IS_PLUGIN_TEMPLATE(obj) \
|
#define GST_IS_DVD_SPU(obj) \
|
||||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GSTDVDSPU))
|
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_SPU))
|
||||||
#define GST_IS_PLUGIN_TEMPLATE_CLASS(klass) \
|
#define GST_IS_DVD_SPU_CLASS(klass) \
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GSTDVDSPU))
|
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_SPU))
|
||||||
|
|
||||||
#define GSTDVDSPU_LOCK(s) g_mutex_lock ((s)->spu_lock);
|
#define DVD_SPU_LOCK(s) g_mutex_lock ((s)->spu_lock);
|
||||||
#define GSTDVDSPU_UNLOCK(s) g_mutex_unlock ((s)->spu_lock);
|
#define DVD_SPU_UNLOCK(s) g_mutex_unlock ((s)->spu_lock);
|
||||||
|
|
||||||
typedef struct GstDVDSpu GstDVDSpu;
|
typedef struct GstDVDSpu GstDVDSpu;
|
||||||
typedef struct GstDVDSpuClass GstDVDSpuClass;
|
typedef struct GstDVDSpuClass GstDVDSpuClass;
|
||||||
|
@ -223,4 +223,4 @@ void gstdvdspu_render_spu (GstDVDSpu *dvdspu, GstBuffer *buf);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GSTDVDSPU_H__ */
|
#endif /* __DVD_SPU_H__ */
|
||||||
|
|
|
@ -97,6 +97,8 @@
|
||||||
GST_DEBUG_CATEGORY_STATIC (festival_debug);
|
GST_DEBUG_CATEGORY_STATIC (festival_debug);
|
||||||
#define GST_CAT_DEFAULT festival_debug
|
#define GST_CAT_DEFAULT festival_debug
|
||||||
|
|
||||||
|
static void gst_festival_finalize (GObject * object);
|
||||||
|
|
||||||
static void gst_festival_base_init (gpointer g_class);
|
static void gst_festival_base_init (gpointer g_class);
|
||||||
static void gst_festival_class_init (GstFestivalClass * klass);
|
static void gst_festival_class_init (GstFestivalClass * klass);
|
||||||
static void gst_festival_init (GstFestival * festival);
|
static void gst_festival_init (GstFestival * festival);
|
||||||
|
@ -189,13 +191,17 @@ gst_festival_base_init (gpointer g_class)
|
||||||
static void
|
static void
|
||||||
gst_festival_class_init (GstFestivalClass * klass)
|
gst_festival_class_init (GstFestivalClass * klass)
|
||||||
{
|
{
|
||||||
|
GObjectClass *gobject_class;
|
||||||
GstElementClass *gstelement_class;
|
GstElementClass *gstelement_class;
|
||||||
|
|
||||||
gstelement_class = (GstElementClass *) klass;
|
gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
gstelement_class = GST_ELEMENT_CLASS (klass);
|
||||||
|
|
||||||
parent_class = g_type_class_peek_parent (klass);
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
gstelement_class->change_state = gst_festival_change_state;
|
gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_festival_finalize);
|
||||||
|
gstelement_class->change_state =
|
||||||
|
GST_DEBUG_FUNCPTR (gst_festival_change_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -213,6 +219,16 @@ gst_festival_init (GstFestival * festival)
|
||||||
festival->info = festival_default_info ();
|
festival->info = festival_default_info ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_festival_finalize (GObject * object)
|
||||||
|
{
|
||||||
|
GstFestival *festival = GST_FESTIVAL (object);
|
||||||
|
|
||||||
|
g_free (festival->info);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
read_response (GstFestival * festival)
|
read_response (GstFestival * festival)
|
||||||
{
|
{
|
||||||
|
|
|
@ -75,6 +75,8 @@ gst_h264_parse_finalize (GObject * object)
|
||||||
|
|
||||||
h264parse = GST_H264PARSE (object);
|
h264parse = GST_H264PARSE (object);
|
||||||
|
|
||||||
|
g_object_unref (h264parse->adapter);
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,6 @@ mpegts_packetizer_dispose (GObject * object)
|
||||||
packetizer->disposed = TRUE;
|
packetizer->disposed = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (G_OBJECT_CLASS (mpegts_packetizer_parent_class)->dispose)
|
|
||||||
G_OBJECT_CLASS (mpegts_packetizer_parent_class)->dispose (object);
|
G_OBJECT_CLASS (mpegts_packetizer_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +126,6 @@ mpegts_packetizer_finalize (GObject * object)
|
||||||
stream_foreach_remove, packetizer);
|
stream_foreach_remove, packetizer);
|
||||||
g_hash_table_destroy (packetizer->streams);
|
g_hash_table_destroy (packetizer->streams);
|
||||||
|
|
||||||
if (G_OBJECT_CLASS (mpegts_packetizer_parent_class)->finalize)
|
|
||||||
G_OBJECT_CLASS (mpegts_packetizer_parent_class)->finalize (object);
|
G_OBJECT_CLASS (mpegts_packetizer_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -241,7 +241,6 @@ mpegts_parse_dispose (GObject * object)
|
||||||
parse->disposed = TRUE;
|
parse->disposed = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (G_OBJECT_CLASS (parent_class)->dispose)
|
|
||||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,7 +255,6 @@ mpegts_parse_finalize (GObject * object)
|
||||||
g_hash_table_destroy (parse->programs);
|
g_hash_table_destroy (parse->programs);
|
||||||
g_hash_table_destroy (parse->psi_pids);
|
g_hash_table_destroy (parse->psi_pids);
|
||||||
|
|
||||||
if (G_OBJECT_CLASS (parent_class)->finalize)
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,10 +142,10 @@ gst_multi_file_sink_dispose (GObject * object)
|
||||||
{
|
{
|
||||||
GstMultiFileSink *sink = GST_MULTI_FILE_SINK (object);
|
GstMultiFileSink *sink = GST_MULTI_FILE_SINK (object);
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
|
||||||
|
|
||||||
g_free (sink->filename);
|
g_free (sink->filename);
|
||||||
sink->filename = NULL;
|
sink->filename = NULL;
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
|
@ -147,12 +147,12 @@ gst_multi_file_src_dispose (GObject * object)
|
||||||
{
|
{
|
||||||
GstMultiFileSrc *src = GST_MULTI_FILE_SRC (object);
|
GstMultiFileSrc *src = GST_MULTI_FILE_SRC (object);
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
|
||||||
|
|
||||||
g_free (src->filename);
|
g_free (src->filename);
|
||||||
src->filename = NULL;
|
src->filename = NULL;
|
||||||
if (src->caps)
|
if (src->caps)
|
||||||
gst_caps_unref (src->caps);
|
gst_caps_unref (src->caps);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstCaps *
|
static GstCaps *
|
||||||
|
|
|
@ -802,11 +802,16 @@ gst_nuv_demux_sink_activate (GstPad * sinkpad)
|
||||||
|
|
||||||
if (gst_pad_check_pull_range (sinkpad)) {
|
if (gst_pad_check_pull_range (sinkpad)) {
|
||||||
nuv->mode = 0;
|
nuv->mode = 0;
|
||||||
|
if (nuv->adapter != NULL) {
|
||||||
|
gst_object_unref (nuv->adapter);
|
||||||
nuv->adapter = NULL;
|
nuv->adapter = NULL;
|
||||||
|
}
|
||||||
res = gst_pad_activate_pull (sinkpad, TRUE);
|
res = gst_pad_activate_pull (sinkpad, TRUE);
|
||||||
} else {
|
} else {
|
||||||
nuv->mode = 1;
|
nuv->mode = 1;
|
||||||
|
if (!nuv->adapter) {
|
||||||
nuv->adapter = gst_adapter_new ();
|
nuv->adapter = gst_adapter_new ();
|
||||||
|
}
|
||||||
res = gst_pad_activate_push (sinkpad, TRUE);
|
res = gst_pad_activate_push (sinkpad, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -239,6 +239,8 @@ gst_dshowaudiosrc_dispose (GObject * gobject)
|
||||||
}
|
}
|
||||||
|
|
||||||
CoUninitialize ();
|
CoUninitialize ();
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,9 +35,9 @@ GST_DEBUG_CATEGORY_STATIC (dshowvideosrc_debug);
|
||||||
#define GST_CAT_DEFAULT dshowvideosrc_debug
|
#define GST_CAT_DEFAULT dshowvideosrc_debug
|
||||||
|
|
||||||
const GUID MEDIASUBTYPE_I420
|
const GUID MEDIASUBTYPE_I420
|
||||||
=
|
= { 0x30323449, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B,
|
||||||
{ 0x30323449, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B,
|
0x71}
|
||||||
0x71} };
|
};
|
||||||
|
|
||||||
static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
|
static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
|
||||||
GST_PAD_SRC,
|
GST_PAD_SRC,
|
||||||
|
@ -245,6 +245,8 @@ gst_dshowvideosrc_dispose (GObject * gobject)
|
||||||
}
|
}
|
||||||
|
|
||||||
CoUninitialize ();
|
CoUninitialize ();
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
|
@ -83,6 +83,8 @@ gst_vcdsrc_setup_interfaces (GType type)
|
||||||
GST_BOILERPLATE_FULL (GstVCDSrc, gst_vcdsrc, GstPushSrc, GST_TYPE_PUSH_SRC,
|
GST_BOILERPLATE_FULL (GstVCDSrc, gst_vcdsrc, GstPushSrc, GST_TYPE_PUSH_SRC,
|
||||||
gst_vcdsrc_setup_interfaces);
|
gst_vcdsrc_setup_interfaces);
|
||||||
|
|
||||||
|
static void gst_vcdsrc_finalize (GObject * object);
|
||||||
|
|
||||||
static void gst_vcdsrc_set_property (GObject * object, guint prop_id,
|
static void gst_vcdsrc_set_property (GObject * object, guint prop_id,
|
||||||
const GValue * value, GParamSpec * pspec);
|
const GValue * value, GParamSpec * pspec);
|
||||||
static void gst_vcdsrc_get_property (GObject * object, guint prop_id,
|
static void gst_vcdsrc_get_property (GObject * object, guint prop_id,
|
||||||
|
@ -116,6 +118,7 @@ gst_vcdsrc_class_init (GstVCDSrcClass * klass)
|
||||||
|
|
||||||
gobject_class->set_property = gst_vcdsrc_set_property;
|
gobject_class->set_property = gst_vcdsrc_set_property;
|
||||||
gobject_class->get_property = gst_vcdsrc_get_property;
|
gobject_class->get_property = gst_vcdsrc_get_property;
|
||||||
|
gobject_class->finalize = gst_vcdsrc_finalize;
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class, PROP_DEVICE,
|
g_object_class_install_property (gobject_class, PROP_DEVICE,
|
||||||
g_param_spec_string ("device", "Device",
|
g_param_spec_string ("device", "Device",
|
||||||
|
@ -149,6 +152,16 @@ gst_vcdsrc_init (GstVCDSrc * vcdsrc, GstVCDSrcClass * klass)
|
||||||
vcdsrc->max_errors = 16;
|
vcdsrc->max_errors = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_vcdsrc_finalize (GObject * object)
|
||||||
|
{
|
||||||
|
GstVCDSrc *vcdsrc = GST_VCDSRC (object);
|
||||||
|
|
||||||
|
g_free (vcdsrc->device);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline guint64
|
static inline guint64
|
||||||
gst_vcdsrc_msf (GstVCDSrc * vcdsrc, gint track)
|
gst_vcdsrc_msf (GstVCDSrc * vcdsrc, gint track)
|
||||||
|
|
Loading…
Reference in a new issue