Ich habe mal ein wenig mit den ac3dec patch gespielt, da ich meinen Subwoofer auch mit ans laufen haben wollt.
Herausgekommen ist das:
Diff
--- ac3dec/libac3/downmix.c 2001-04-17 21:31:03.000000000 +0200
+++ ac3dec/libac3/downmix.c 2004-05-07 22:34:43.000000000 +0200
@@ -269,6 +269,26 @@
}
static void
+downmix_2f_0r_to_6ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples)
+{
+ uint_32 j;
+ float *left = 0, *right = 0;
+
+ left = samples[0];
+ right = samples[1];
+
+ for (j = 0; j < 256; j++)
+ {
+ s16_samples[j * 6 ] = (sint_16) (*left++ * 32767.0f * 0.7071f );
+ s16_samples[j * 6 + 1] = (sint_16) (*right++ * 32767.0f * 0.7071f );
+ s16_samples[j * 6 + 2] = 0;
+ s16_samples[j * 6 + 3] = 0;
+ s16_samples[j * 6 + 4] = 0;
+ s16_samples[j * 6 + 5] = s16_samples[j * 6 ];
+ }
+}
+
+static void
downmix_1f_0r_to_2ch(float *centre,sint_16 *s16_samples)
{
uint_32 j;
@@ -370,11 +390,17 @@
// 2/0
case 2:
- if (ac3_config.num_output_ch != 2) {
- fprintf(stderr,"unsupported 2/0 channels %d\n", ac3_config.num_output_ch);
- exit(1);
+ switch(ac3_config.num_output_ch){
+ case 2:
+ downmix_2f_0r_to_2ch(bsi,samples,s16_samples);
+ break;
+ case 6:
+ downmix_2f_0r_to_6ch(bsi,samples,s16_samples);
+ break;
+ default:
+ fprintf(stderr,"unsupported 2/0 channels %d\n", ac3_config.num_output_ch);
+ exit(1);
}
- downmix_2f_0r_to_2ch(bsi,samples,s16_samples);
break;
// 1/0
Alles anzeigen
Ist gleich ein ganz anderer Klang, wenn der Subwoofer mit läuft.
Gruss
Ralf