summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2005-10-02 23:08:35 +0000
committerAndy Wingo <wingo@pobox.com>2005-10-02 23:08:35 +0000
commit03f926ce2e0c8155003669344a719fe56ae614eb (patch)
tree137810725ec3b26fac0cff4a39f29d0c24bdcf45
parent94bcb7452db28b8559cd01cd9517395ab760cce7 (diff)
ext/flac/gstflacdec.c (gst_flacdec_write): Deal with pad_alloc error returns.
Original commit message from CVS: 2005-10-03 Andy Wingo <wingo@pobox.com> * ext/flac/gstflacdec.c (gst_flacdec_write): Deal with pad_alloc error returns.
-rw-r--r--ChangeLog5
-rw-r--r--ext/flac/gstflacdec.c14
2 files changed, 14 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 6ab94599..ec39e44b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-10-03 Andy Wingo <wingo@pobox.com>
+
+ * ext/flac/gstflacdec.c (gst_flacdec_write): Deal with pad_alloc
+ error returns.
+
2005-10-02 Andy Wingo <wingo@pobox.com>
* configure.ac (GST_PLUGIN_LDFLAGS): Change to be like -base.
diff --git a/ext/flac/gstflacdec.c b/ext/flac/gstflacdec.c
index 51238847..24c2d8ec 100644
--- a/ext/flac/gstflacdec.c
+++ b/ext/flac/gstflacdec.c
@@ -464,9 +464,14 @@ gst_flacdec_write (const FLAC__SeekableStreamDecoder * decoder,
flacdec->frequency = frame->header.sample_rate;
}
- gst_pad_alloc_buffer (flacdec->srcpad, flacdec->total_samples,
+ ret = gst_pad_alloc_buffer (flacdec->srcpad, flacdec->total_samples,
samples * channels * ((width + 7) >> 3), GST_PAD_CAPS (flacdec->srcpad),
&outbuf);
+ if (ret != GST_FLOW_NOT_LINKED && ret != GST_FLOW_OK) {
+ GST_DEBUG ("stopping flac decoder engine (%d)", (gint) ret);
+ return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
+ }
+
GST_BUFFER_TIMESTAMP (outbuf) =
flacdec->total_samples * GST_SECOND / frame->header.sample_rate;
GST_BUFFER_DURATION (outbuf) =
@@ -786,12 +791,11 @@ gst_flacdec_sink_activate_pull (GstPad * sinkpad, gboolean active)
if (active) {
/* if we have a scheduler we can start the task */
GST_FLACDEC (GST_OBJECT_PARENT (sinkpad))->offset = 0;
- gst_pad_start_task (sinkpad, (GstTaskFunction) gst_flacdec_loop, sinkpad);
+ return gst_pad_start_task (sinkpad, (GstTaskFunction) gst_flacdec_loop,
+ sinkpad);
} else {
- gst_pad_stop_task (sinkpad);
+ return gst_pad_stop_task (sinkpad);
}
-
- return TRUE;
}
static GstStateChangeReturn