im anhang ist meine art, DD 2.0 und 5.1 über n 5.1 pcm device analog wiederzugeben, ohne dass ac3dec beim umschalten auf nen sender mit DD2.0 meckert oder der vdr hängt.
gruss,
woppr
Diff
diff -r e82775d19938 ac3dec/Makefile.am
--- a/ac3dec/Makefile.am Mon Jun 04 15:16:24 2007 +0200
+++ b/ac3dec/Makefile.am Sun Sep 30 15:37:12 2007 +0200
@@ -3,7 +3,7 @@ AUTOMAKE_OPTIONS = 1.3 foreign
bin_PROGRAMS = ac3dec
-ac3dec_LDADD= -L./libac3 -lac3 -lm
+ac3dec_LDADD= -L./libac3 -lac3 -lm -lasound
noinst_HEADERS = output.h
ac3dec_SOURCES = ac3dec.c output.c ac3spdif.c
diff -r e82775d19938 ac3dec/libac3/downmix.c
--- a/ac3dec/libac3/downmix.c Mon Jun 04 15:16:24 2007 +0200
+++ b/ac3dec/libac3/downmix.c Sun Sep 30 15:37:12 2007 +0200
@@ -251,7 +251,23 @@ downmix_3f_0r_to_2ch(bsi_t* bsi, stream_
s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f);
}
}
-
+
+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);
+ s16_samples[j * 6 + 1] = (sint_16) (*right++ * 32767.0f);
+ } //FIXME enable output on surround channels, too.
+}
+
static void
downmix_2f_0r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples)
{
@@ -368,13 +384,19 @@ void downmix(bsi_t* bsi, stream_samples_
downmix_3f_0r_to_2ch(bsi,samples,s16_samples);
break;
- // 2/0
+ // 2/0 - 2f_0r_to_6ch not really, but allows -D pcm.surround51:1 with 2/0 and 3/2 input (VDR e.g.)
case 2:
- if (ac3_config.num_output_ch != 2) {
+ 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