Commit b7ab2f0b authored by Aurélien Zanelli's avatar Aurélien Zanelli Committed by Sebastian Dröge

vorbisdec: don't reorder streams with channels count greater than eight

vorbis_reorder_map is defined for eight channels max. If we have more
than eight channels, it's the application which shall define the order.
Since we set audio position to none, we just interleave all the channels
without any particular reordering.

https://bugzilla.gnome.org/show_bug.cgi?id=737742
parent 09872442
......@@ -81,6 +81,28 @@ copy_samples (vorbis_sample_t * out, vorbis_sample_t ** in, guint samples,
#endif
}
static void
copy_samples_no_reorder (vorbis_sample_t * out, vorbis_sample_t ** in,
guint samples, gint channels)
{
#ifdef GST_VORBIS_DEC_SEQUENTIAL
gint i;
for (i = 0; i < channels; i++) {
memcpy (out, in[i], samples * sizeof (float));
out += samples;
}
#else
gint i, j;
for (j = 0; j < samples; j++) {
for (i = 0; i < channels; i++) {
*out++ = in[i][j];
}
}
#endif
}
CopySampleFunc
gst_vorbis_get_copy_sample_func (gint channels)
{
......@@ -93,9 +115,17 @@ gst_vorbis_get_copy_sample_func (gint channels)
case 2:
f = copy_samples_s;
break;
default:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
f = copy_samples;
break;
default:
f = copy_samples_no_reorder;
break;
}
return f;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment