+2005-11-21 Michael Smith <msmith@fluendo.com>
+
+ * ext/vorbis/vorbisenc.c: (gst_vorbisenc_clear),
+ (gst_vorbisenc_chain), (gst_vorbisenc_output_buffers):
+ Properly handle pad_push return values.
+
2005-11-20 Wim Taymans <wim@fluendo.com>
* ext/vorbis/vorbisenc.c: (gst_vorbisenc_push_buffer),
ARG_LAST_MESSAGE
};
-static void gst_vorbisenc_output_buffers (GstVorbisEnc * vorbisenc);
+static GstFlowReturn gst_vorbisenc_output_buffers (GstVorbisEnc * vorbisenc);
/* FIXME:
* vorbis_granule_time was added between 1.0 and 1.0.1; it's too silly
return TRUE;
}
-static void
+static GstFlowReturn
gst_vorbisenc_clear (GstVorbisEnc * vorbisenc)
{
+ GstFlowReturn ret = GST_FLOW_OK;
+
if (vorbisenc->setup) {
vorbis_analysis_wrote (&vorbisenc->vd, 0);
- gst_vorbisenc_output_buffers (vorbisenc);
+ ret = gst_vorbisenc_output_buffers (vorbisenc);
vorbisenc->setup = FALSE;
}
vorbis_info_clear (&vorbisenc->vi);
vorbisenc->header_sent = FALSE;
+
+ return ret;
}
/* prepare a buffer for transmission by passing data through libvorbis */
{
GstBuffer *buf = GST_BUFFER (buffer);
GstVorbisEnc *vorbisenc;
+ GstFlowReturn ret = GST_FLOW_OK;
vorbisenc = GST_VORBISENC (GST_PAD_PARENT (pad));
gst_buffer_set_caps (buf3, caps);
/* push out buffers */
- gst_vorbisenc_push_buffer (vorbisenc, buf1);
- gst_vorbisenc_push_buffer (vorbisenc, buf2);
- gst_vorbisenc_push_buffer (vorbisenc, buf3);
+ if ((ret = gst_vorbisenc_push_buffer (vorbisenc, buf1)) != GST_FLOW_OK)
+ goto done;
+ if ((ret = gst_vorbisenc_push_buffer (vorbisenc, buf2)) != GST_FLOW_OK)
+ goto done;
+ if ((ret = gst_vorbisenc_push_buffer (vorbisenc, buf3)) != GST_FLOW_OK)
+ goto done;
vorbisenc->header_sent = TRUE;
}
gst_buffer_unref (buf);
}
- gst_vorbisenc_output_buffers (vorbisenc);
+ ret = gst_vorbisenc_output_buffers (vorbisenc);
- return GST_FLOW_OK;
+done:
+ return ret;
}
-static void
+static GstFlowReturn
gst_vorbisenc_output_buffers (GstVorbisEnc * vorbisenc)
{
+ GstFlowReturn ret;
+
/* vorbis does some data preanalysis, then divides up blocks for
more involved (potentially parallel) processing. Get a single
block for encoding now */
while (vorbis_bitrate_flushpacket (&vorbisenc->vd, &op)) {
GST_LOG_OBJECT (vorbisenc, "pushing out a data packet");
- gst_vorbisenc_push_packet (vorbisenc, &op);
+ ret = gst_vorbisenc_push_packet (vorbisenc, &op);
+
+ if (ret != GST_FLOW_OK)
+ return ret;
}
}
+
+ return GST_FLOW_OK;
}
static void