mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
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
This commit is contained in:
parent
09872442f8
commit
b7ab2f0b08
1 changed files with 31 additions and 1 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue