From 055ee4d5ccb7640d987d1476ebe69fd80f699823 Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Sat, 28 Jun 2003 14:21:47 +0000 Subject: [PATCH] make flacdec work with unconnected src pad Original commit message from CVS: make flacdec work with unconnected src pad --- ext/flac/gstflacdec.c | 88 ++++++++++++++++++++++++++++----------------------- 1 file changed, 48 insertions(+), 40 deletions(-) diff --git a/ext/flac/gstflacdec.c b/ext/flac/gstflacdec.c index c46756e..459d954 100644 --- a/ext/flac/gstflacdec.c +++ b/ext/flac/gstflacdec.c @@ -428,25 +428,30 @@ gst_flacdec_write (const FLAC__SeekableStreamDecoder *decoder, GstEvent *discont; flacdec->need_discont = FALSE; - + + + + if (!GST_PAD_CAPS (flacdec->srcpad)) { if (flacdec->seek_pending) { flacdec->total_samples = flacdec->seek_value; } - GST_DEBUG (0, "send discont"); - - format = GST_FORMAT_TIME; - gst_pad_convert (flacdec->srcpad, GST_FORMAT_DEFAULT, flacdec->total_samples, - &format, &time); - format = GST_FORMAT_BYTES; - gst_pad_convert (flacdec->srcpad, GST_FORMAT_DEFAULT, flacdec->total_samples, - &format, &bytes); - discont = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME, time, - GST_FORMAT_BYTES, bytes, - GST_FORMAT_DEFAULT, flacdec->total_samples, + if (GST_PAD_IS_USABLE (flacdec->srcpad)) { + GST_DEBUG (0, "send discont"); + + format = GST_FORMAT_TIME; + gst_pad_convert (flacdec->srcpad, GST_FORMAT_DEFAULT, + flacdec->total_samples, &format, &time); + format = GST_FORMAT_BYTES; + gst_pad_convert (flacdec->srcpad, GST_FORMAT_DEFAULT, + flacdec->total_samples, &format, &bytes); + discont = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME, time, + GST_FORMAT_BYTES, bytes, + GST_FORMAT_DEFAULT, flacdec->total_samples, NULL); - gst_pad_push (flacdec->srcpad, GST_BUFFER (discont)); + gst_pad_push (flacdec->srcpad, GST_BUFFER (discont)); + } } if (!GST_PAD_CAPS (flacdec->srcpad)) { @@ -469,38 +474,38 @@ gst_flacdec_write (const FLAC__SeekableStreamDecoder *decoder, flacdec->frequency = frame->header.sample_rate; } - outbuf = gst_buffer_new (); - GST_BUFFER_SIZE (outbuf) = samples * channels * ((depth+7)>>3); - GST_BUFFER_DATA (outbuf) = g_malloc (GST_BUFFER_SIZE (outbuf)); - GST_BUFFER_TIMESTAMP (outbuf) = flacdec->total_samples * GST_SECOND / frame->header.sample_rate; - - if (depth == 8) { - guint8 *outbuffer = (guint8 *)GST_BUFFER_DATA (outbuf); - - for (i=0; isrcpad)) { + outbuf = gst_buffer_new (); + GST_BUFFER_SIZE (outbuf) = samples * channels * ((depth+7)>>3); + GST_BUFFER_DATA (outbuf) = g_malloc (GST_BUFFER_SIZE (outbuf)); + GST_BUFFER_TIMESTAMP (outbuf) = flacdec->total_samples * GST_SECOND / frame->header.sample_rate; + + if (depth == 8) { + guint8 *outbuffer = (guint8 *)GST_BUFFER_DATA (outbuf); + + for (i=0; isrcpad, outbuf); } - else { - g_warning ("flacdec: invalid depth %d found\n", depth); - return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT; - } - flacdec->total_samples += samples; - gst_pad_push (flacdec->srcpad, outbuf); - return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } @@ -548,8 +553,10 @@ gst_flacdec_loop (GstElement *element) FLAC__seekable_stream_decoder_finish(flacdec->decoder); flacdec->init = TRUE; - event = gst_event_new (GST_EVENT_EOS); - gst_pad_push (flacdec->srcpad, GST_BUFFER (event)); + if (GST_PAD_IS_USABLE (flacdec->srcpad)) { + event = gst_event_new (GST_EVENT_EOS); + gst_pad_push (flacdec->srcpad, GST_BUFFER (event)); + } gst_element_set_eos (element); } GST_DEBUG (GST_CAT_PLUGIN_INFO, "flacdec: _loop end"); @@ -764,3 +771,4 @@ gst_flacdec_get_property (GObject *object, guint prop_id, g_warning ("Unknown property id\n"); } } + -- 2.7.4