mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
ext/: Propagate error codes from alloc_buffer too.
Original commit message from CVS: * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain_peer): * ext/theora/theoradec.c: (theora_handle_data_packet): * ext/vorbis/vorbisdec.c: (vorbis_handle_data_packet): Propagate error codes from alloc_buffer too.
This commit is contained in:
parent
361eb99af9
commit
d6825b358a
5 changed files with 51 additions and 32 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2005-09-29 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
* ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain_peer):
|
||||||
|
* ext/theora/theoradec.c: (theora_handle_data_packet):
|
||||||
|
* ext/vorbis/vorbisdec.c: (vorbis_handle_data_packet):
|
||||||
|
Propagate error codes from alloc_buffer too.
|
||||||
|
|
||||||
2005-09-29 Wim Taymans <wim@fluendo.com>
|
2005-09-29 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init):
|
* ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init):
|
||||||
|
|
2
common
2
common
|
@ -1 +1 @@
|
||||||
Subproject commit 7caeee4b949b4388927fec7fcf25f767429bde30
|
Subproject commit e6246e87e86c75b2c9c00d0748f0cd2332295eaa
|
|
@ -733,7 +733,6 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet)
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
GstOggDemux *ogg = pad->ogg;
|
GstOggDemux *ogg = pad->ogg;
|
||||||
|
|
||||||
|
|
||||||
ret = gst_pad_alloc_buffer (GST_PAD (pad), GST_BUFFER_OFFSET_NONE,
|
ret = gst_pad_alloc_buffer (GST_PAD (pad), GST_BUFFER_OFFSET_NONE,
|
||||||
packet->bytes, GST_PAD_CAPS (pad), &buf);
|
packet->bytes, GST_PAD_CAPS (pad), &buf);
|
||||||
|
|
||||||
|
@ -747,6 +746,8 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet)
|
||||||
GST_BUFFER_OFFSET_END (buf) = packet->granulepos;
|
GST_BUFFER_OFFSET_END (buf) = packet->granulepos;
|
||||||
|
|
||||||
ret = gst_pad_push (GST_PAD (pad), buf);
|
ret = gst_pad_push (GST_PAD (pad), buf);
|
||||||
|
if (ret == GST_FLOW_NOT_LINKED)
|
||||||
|
ret = GST_FLOW_OK;
|
||||||
|
|
||||||
if (packet->granulepos != -1) {
|
if (packet->granulepos != -1) {
|
||||||
GstFormat format;
|
GstFormat format;
|
||||||
|
|
|
@ -987,7 +987,7 @@ wrong_dimensions:
|
||||||
}
|
}
|
||||||
no_buffer:
|
no_buffer:
|
||||||
{
|
{
|
||||||
return GST_FLOW_OK;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -742,6 +742,7 @@ vorbis_handle_data_packet (GstVorbisDec * vd, ogg_packet * packet)
|
||||||
{
|
{
|
||||||
float **pcm;
|
float **pcm;
|
||||||
guint sample_count;
|
guint sample_count;
|
||||||
|
GstBuffer *out;
|
||||||
GstFlowReturn result;
|
GstFlowReturn result;
|
||||||
|
|
||||||
if (!vd->initialized)
|
if (!vd->initialized)
|
||||||
|
@ -754,43 +755,46 @@ vorbis_handle_data_packet (GstVorbisDec * vd, ogg_packet * packet)
|
||||||
if (vorbis_synthesis_blockin (&vd->vd, &vd->vb) < 0)
|
if (vorbis_synthesis_blockin (&vd->vd, &vd->vb) < 0)
|
||||||
goto not_accepted;
|
goto not_accepted;
|
||||||
|
|
||||||
sample_count = vorbis_synthesis_pcmout (&vd->vd, &pcm);
|
/* assume all goes well here */
|
||||||
if (sample_count > 0) {
|
result = GST_FLOW_OK;
|
||||||
GstBuffer *out;
|
|
||||||
|
|
||||||
result = gst_pad_alloc_buffer (vd->srcpad, GST_BUFFER_OFFSET_NONE,
|
/* count samples ready for reading */
|
||||||
sample_count * vd->vi.channels * sizeof (float),
|
if ((sample_count = vorbis_synthesis_pcmout (&vd->vd, NULL)) == 0)
|
||||||
GST_PAD_CAPS (vd->srcpad), &out);
|
goto done;
|
||||||
|
|
||||||
if (result == GST_FLOW_OK) {
|
/* alloc buffer for it */
|
||||||
float *out_data = (float *) GST_BUFFER_DATA (out);
|
result = gst_pad_alloc_buffer (vd->srcpad, GST_BUFFER_OFFSET_NONE,
|
||||||
|
sample_count * vd->vi.channels * sizeof (float),
|
||||||
|
GST_PAD_CAPS (vd->srcpad), &out);
|
||||||
|
if (result != GST_FLOW_OK)
|
||||||
|
goto done;
|
||||||
|
|
||||||
copy_samples (out_data, pcm, sample_count, vd->vi.channels);
|
/* get samples ready for reading now, should be sample_count */
|
||||||
|
if ((vorbis_synthesis_pcmout (&vd->vd, &pcm)) != sample_count)
|
||||||
|
goto wrong_samples;
|
||||||
|
|
||||||
GST_BUFFER_OFFSET (out) = vd->granulepos;
|
/* copy samples in buffer */
|
||||||
if (vd->granulepos != -1) {
|
copy_samples ((float *) GST_BUFFER_DATA (out), pcm, sample_count,
|
||||||
GST_BUFFER_OFFSET_END (out) = vd->granulepos + sample_count;
|
vd->vi.channels);
|
||||||
GST_BUFFER_TIMESTAMP (out) =
|
|
||||||
gst_util_uint64_scale (vd->granulepos, GST_SECOND, vd->vi.rate);
|
|
||||||
} else {
|
|
||||||
GST_BUFFER_TIMESTAMP (out) = -1;
|
|
||||||
}
|
|
||||||
GST_BUFFER_DURATION (out) = sample_count * GST_SECOND / vd->vi.rate;
|
|
||||||
|
|
||||||
result = vorbis_dec_push (vd, out);
|
GST_BUFFER_OFFSET (out) = vd->granulepos;
|
||||||
|
if (vd->granulepos != -1) {
|
||||||
if (vd->granulepos != -1)
|
GST_BUFFER_OFFSET_END (out) = vd->granulepos + sample_count;
|
||||||
vd->granulepos += sample_count;
|
GST_BUFFER_TIMESTAMP (out) =
|
||||||
} else {
|
gst_util_uint64_scale (vd->granulepos, GST_SECOND, vd->vi.rate);
|
||||||
/* no buffer.. */
|
|
||||||
result = GST_FLOW_OK;
|
|
||||||
}
|
|
||||||
vorbis_synthesis_read (&vd->vd, sample_count);
|
|
||||||
} else {
|
} else {
|
||||||
/* no samples.. */
|
GST_BUFFER_TIMESTAMP (out) = -1;
|
||||||
result = GST_FLOW_OK;
|
|
||||||
}
|
}
|
||||||
|
GST_BUFFER_DURATION (out) = sample_count * GST_SECOND / vd->vi.rate;
|
||||||
|
|
||||||
|
if (vd->granulepos != -1)
|
||||||
|
vd->granulepos += sample_count;
|
||||||
|
|
||||||
|
vorbis_synthesis_read (&vd->vd, sample_count);
|
||||||
|
|
||||||
|
result = vorbis_dec_push (vd, out);
|
||||||
|
|
||||||
|
done:
|
||||||
/* granulepos is the last sample in the packet */
|
/* granulepos is the last sample in the packet */
|
||||||
if (packet->granulepos != -1)
|
if (packet->granulepos != -1)
|
||||||
vd->granulepos = packet->granulepos;
|
vd->granulepos = packet->granulepos;
|
||||||
|
@ -816,6 +820,13 @@ not_accepted:
|
||||||
(NULL), ("vorbis decoder did not accept data packet"));
|
(NULL), ("vorbis decoder did not accept data packet"));
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
wrong_samples:
|
||||||
|
{
|
||||||
|
gst_buffer_unref (out);
|
||||||
|
GST_ELEMENT_ERROR (GST_ELEMENT (vd), STREAM, DECODE,
|
||||||
|
(NULL), ("vorbis decoder reported wrong number of samples"));
|
||||||
|
return GST_FLOW_ERROR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
|
|
Loading…
Reference in a new issue