mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-06 10:42:22 +00:00
vorbisdec: reduce some hard-coding
... such as assuming float all over, and base src caps on template caps.
This commit is contained in:
parent
40a841e377
commit
5e06eaa517
2 changed files with 12 additions and 10 deletions
|
@ -237,7 +237,7 @@ vorbis_dec_convert (GstPad * pad,
|
||||||
case GST_FORMAT_TIME:
|
case GST_FORMAT_TIME:
|
||||||
switch (*dest_format) {
|
switch (*dest_format) {
|
||||||
case GST_FORMAT_BYTES:
|
case GST_FORMAT_BYTES:
|
||||||
scale = sizeof (float) * dec->vi.channels;
|
scale = dec->width * dec->vi.channels;
|
||||||
case GST_FORMAT_DEFAULT:
|
case GST_FORMAT_DEFAULT:
|
||||||
*dest_value =
|
*dest_value =
|
||||||
scale * gst_util_uint64_scale_int (src_value, dec->vi.rate,
|
scale * gst_util_uint64_scale_int (src_value, dec->vi.rate,
|
||||||
|
@ -250,7 +250,7 @@ vorbis_dec_convert (GstPad * pad,
|
||||||
case GST_FORMAT_DEFAULT:
|
case GST_FORMAT_DEFAULT:
|
||||||
switch (*dest_format) {
|
switch (*dest_format) {
|
||||||
case GST_FORMAT_BYTES:
|
case GST_FORMAT_BYTES:
|
||||||
*dest_value = src_value * sizeof (float) * dec->vi.channels;
|
*dest_value = src_value * dec->width * dec->vi.channels;
|
||||||
break;
|
break;
|
||||||
case GST_FORMAT_TIME:
|
case GST_FORMAT_TIME:
|
||||||
*dest_value =
|
*dest_value =
|
||||||
|
@ -263,11 +263,11 @@ vorbis_dec_convert (GstPad * pad,
|
||||||
case GST_FORMAT_BYTES:
|
case GST_FORMAT_BYTES:
|
||||||
switch (*dest_format) {
|
switch (*dest_format) {
|
||||||
case GST_FORMAT_DEFAULT:
|
case GST_FORMAT_DEFAULT:
|
||||||
*dest_value = src_value / (sizeof (float) * dec->vi.channels);
|
*dest_value = src_value / (dec->width * dec->vi.channels);
|
||||||
break;
|
break;
|
||||||
case GST_FORMAT_TIME:
|
case GST_FORMAT_TIME:
|
||||||
*dest_value = gst_util_uint64_scale_int (src_value, GST_SECOND,
|
*dest_value = gst_util_uint64_scale_int (src_value, GST_SECOND,
|
||||||
dec->vi.rate * sizeof (float) * dec->vi.channels);
|
dec->vi.rate * dec->width * dec->vi.channels);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
res = FALSE;
|
res = FALSE;
|
||||||
|
@ -589,10 +589,11 @@ vorbis_handle_identification_packet (GstVorbisDec * vd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
caps = gst_caps_new_simple ("audio/x-raw-float",
|
vd->width = 4;
|
||||||
"rate", G_TYPE_INT, vd->vi.rate,
|
|
||||||
"channels", G_TYPE_INT, vd->vi.channels,
|
caps = gst_caps_copy (gst_pad_get_pad_template_caps (vd->srcpad));
|
||||||
"endianness", G_TYPE_INT, G_BYTE_ORDER, "width", G_TYPE_INT, 32, NULL);
|
gst_caps_set_simple (caps, "rate", G_TYPE_INT, vd->vi.rate,
|
||||||
|
"channels", G_TYPE_INT, vd->vi.channels);
|
||||||
|
|
||||||
if (pos) {
|
if (pos) {
|
||||||
gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), pos);
|
gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), pos);
|
||||||
|
@ -797,7 +798,7 @@ vorbis_dec_push_forward (GstVorbisDec * dec, GstBuffer * buf)
|
||||||
|
|
||||||
/* clip */
|
/* clip */
|
||||||
if (!(buf = gst_audio_buffer_clip (buf, &dec->segment, dec->vi.rate,
|
if (!(buf = gst_audio_buffer_clip (buf, &dec->segment, dec->vi.rate,
|
||||||
dec->vi.channels * sizeof (float)))) {
|
dec->vi.channels * dec->width))) {
|
||||||
GST_LOG_OBJECT (dec, "clipped buffer");
|
GST_LOG_OBJECT (dec, "clipped buffer");
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
@ -882,7 +883,7 @@ vorbis_handle_data_packet (GstVorbisDec * vd, ogg_packet * packet,
|
||||||
if ((sample_count = vorbis_synthesis_pcmout (&vd->vd, NULL)) == 0)
|
if ((sample_count = vorbis_synthesis_pcmout (&vd->vd, NULL)) == 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
size = sample_count * vd->vi.channels * sizeof (float);
|
size = sample_count * vd->vi.channels * vd->width;
|
||||||
GST_LOG_OBJECT (vd, "%d samples ready for reading, size %d", sample_count,
|
GST_LOG_OBJECT (vd, "%d samples ready for reading, size %d", sample_count,
|
||||||
size);
|
size);
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@ struct _GstVorbisDec {
|
||||||
vorbis_block vb;
|
vorbis_block vb;
|
||||||
|
|
||||||
gboolean initialized;
|
gboolean initialized;
|
||||||
|
guint width;
|
||||||
|
|
||||||
/* list of buffers that need timestamps */
|
/* list of buffers that need timestamps */
|
||||||
GList *queued;
|
GList *queued;
|
||||||
|
|
Loading…
Reference in a new issue