ext/vorbis/vorbisenc.c: Properly handle pad_push return values.

Original commit message from CVS:
* ext/vorbis/vorbisenc.c: (gst_vorbisenc_clear),
(gst_vorbisenc_chain), (gst_vorbisenc_output_buffers):
Properly handle pad_push return values.
This commit is contained in:
Michael Smith 2005-11-21 10:09:16 +00:00
parent 569286d058
commit 035f96fe88
2 changed files with 32 additions and 10 deletions

View file

@ -1,3 +1,9 @@
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> 2005-11-20 Wim Taymans <wim@fluendo.com>
* ext/vorbis/vorbisenc.c: (gst_vorbisenc_push_buffer), * ext/vorbis/vorbisenc.c: (gst_vorbisenc_push_buffer),

View file

@ -96,7 +96,7 @@ enum
ARG_LAST_MESSAGE ARG_LAST_MESSAGE
}; };
static void gst_vorbisenc_output_buffers (GstVorbisEnc * vorbisenc); static GstFlowReturn gst_vorbisenc_output_buffers (GstVorbisEnc * vorbisenc);
/* FIXME: /* FIXME:
* vorbis_granule_time was added between 1.0 and 1.0.1; it's too silly * vorbis_granule_time was added between 1.0 and 1.0.1; it's too silly
@ -779,12 +779,14 @@ gst_vorbisenc_setup (GstVorbisEnc * vorbisenc)
return TRUE; return TRUE;
} }
static void static GstFlowReturn
gst_vorbisenc_clear (GstVorbisEnc * vorbisenc) gst_vorbisenc_clear (GstVorbisEnc * vorbisenc)
{ {
GstFlowReturn ret = GST_FLOW_OK;
if (vorbisenc->setup) { if (vorbisenc->setup) {
vorbis_analysis_wrote (&vorbisenc->vd, 0); vorbis_analysis_wrote (&vorbisenc->vd, 0);
gst_vorbisenc_output_buffers (vorbisenc); ret = gst_vorbisenc_output_buffers (vorbisenc);
vorbisenc->setup = FALSE; vorbisenc->setup = FALSE;
} }
@ -795,6 +797,8 @@ gst_vorbisenc_clear (GstVorbisEnc * vorbisenc)
vorbis_info_clear (&vorbisenc->vi); vorbis_info_clear (&vorbisenc->vi);
vorbisenc->header_sent = FALSE; vorbisenc->header_sent = FALSE;
return ret;
} }
/* prepare a buffer for transmission by passing data through libvorbis */ /* prepare a buffer for transmission by passing data through libvorbis */
@ -917,6 +921,7 @@ gst_vorbisenc_chain (GstPad * pad, GstBuffer * buffer)
{ {
GstBuffer *buf = GST_BUFFER (buffer); GstBuffer *buf = GST_BUFFER (buffer);
GstVorbisEnc *vorbisenc; GstVorbisEnc *vorbisenc;
GstFlowReturn ret = GST_FLOW_OK;
vorbisenc = GST_VORBISENC (GST_PAD_PARENT (pad)); vorbisenc = GST_VORBISENC (GST_PAD_PARENT (pad));
@ -969,9 +974,12 @@ gst_vorbisenc_chain (GstPad * pad, GstBuffer * buffer)
gst_buffer_set_caps (buf3, caps); gst_buffer_set_caps (buf3, caps);
/* push out buffers */ /* push out buffers */
gst_vorbisenc_push_buffer (vorbisenc, buf1); if ((ret = gst_vorbisenc_push_buffer (vorbisenc, buf1)) != GST_FLOW_OK)
gst_vorbisenc_push_buffer (vorbisenc, buf2); goto done;
gst_vorbisenc_push_buffer (vorbisenc, buf3); 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; vorbisenc->header_sent = TRUE;
} }
@ -998,14 +1006,17 @@ gst_vorbisenc_chain (GstPad * pad, GstBuffer * buffer)
gst_buffer_unref (buf); 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) gst_vorbisenc_output_buffers (GstVorbisEnc * vorbisenc)
{ {
GstFlowReturn ret;
/* vorbis does some data preanalysis, then divides up blocks for /* vorbis does some data preanalysis, then divides up blocks for
more involved (potentially parallel) processing. Get a single more involved (potentially parallel) processing. Get a single
block for encoding now */ block for encoding now */
@ -1020,9 +1031,14 @@ gst_vorbisenc_output_buffers (GstVorbisEnc * vorbisenc)
while (vorbis_bitrate_flushpacket (&vorbisenc->vd, &op)) { while (vorbis_bitrate_flushpacket (&vorbisenc->vd, &op)) {
GST_LOG_OBJECT (vorbisenc, "pushing out a data packet"); 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 static void