]> git.alsa-project.org Git - alsa-tools.git/commitdiff
hdspmixer: Introduce output channel count for all cards.
authorAdrian Knoth <adi@drcomp.erfurt.thur.de>
Mon, 7 Mar 2011 18:03:05 +0000 (19:03 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 8 Mar 2011 12:04:12 +0000 (13:04 +0100)
Some cards (like multiface) have more physical output ports than
playback ports, mostly because of additional headphones out.

For those cards, the old abstraction model of channels_input and
channels_output doesn't fit, so let's introduce channels_output.

Of course, channels_output is always 2*max_dest at the given speed_mode
(SS/DS/QS), so one could extend this idea, store all destination
settings in channels_output[3] (one for each speed mode) and rip off the
massive code duplication for setting maxdest or max_dest respectively.

Note that dest_map_whatever_speed_mode's array size indirectly defines
the right value for channels_output (read: even more unwanted
redundancy)

Signed-off-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
hdspmixer/src/HDSPMixerCard.cxx
hdspmixer/src/HDSPMixerCard.h
hdspmixer/src/HDSPMixerWindow.cxx

index cd6a92241ebf49656d00a71ca46aa7144cf7685f..3ddbf6207724a7033e98f9d3c29ea7bedc40b0f5 100644 (file)
@@ -212,6 +212,7 @@ void HDSPMixerCard::adjustSettings() {
        case 0:
            channels_input = 18;
            channels_playback = 18;
+           channels_output = 20; /* SS 8xAnalog+8xADAT+2xSPDIF+2xHeadphone */
            channel_map_input = channel_map_playback = channel_map_mf_ss;
            dest_map = dest_map_mf_ss;
            meter_map_input = meter_map_playback = channel_map_mf_ss;
@@ -219,6 +220,7 @@ void HDSPMixerCard::adjustSettings() {
        case 1:
            channels_input = 14;
            channels_playback = 14;
+           channels_output = 16; /* DS 8xAnalog+4xADAT(SMUX)+2xSPDIF+2xHeadphone */
            channel_map_input = channel_map_playback = meter_map_ds;
            dest_map = dest_map_ds;
            meter_map_input = meter_map_playback = meter_map_ds;
@@ -231,12 +233,14 @@ void HDSPMixerCard::adjustSettings() {
        switch (speed_mode) {
        case 0:
            channels_input = channels_playback = 26;
+           channels_output = 28; /* SS 3x8xADAT+2xSPDIF+2xHeadphone */
            channel_map_input = channel_map_playback = channel_map_df_ss;
            dest_map = dest_map_df_ss;
            meter_map_input = meter_map_playback = channel_map_df_ss;
            break;
        case 1:
            channels_input = channels_playback = 14;
+           channels_output = 16; /* DS 3x4xADAT(SMUX)+2xSPDIF+2xHeadphone */
            channel_map_input = channel_map_playback = meter_map_ds;
            dest_map = dest_map_ds;
            meter_map_input = meter_map_playback = meter_map_ds;
@@ -249,12 +253,14 @@ void HDSPMixerCard::adjustSettings() {
        switch (speed_mode) {
        case 0:
            channels_input = channels_playback = 26;
+        channels_output = 26; /* SS like Digiface, but no Headphones */
            channel_map_input = channel_map_playback = channel_map_df_ss;
            dest_map = dest_map_h9652_ss;
            meter_map_input = meter_map_playback = channel_map_df_ss;
            break;
        case 1:
            channels_input = channels_playback = 14;
+        channels_output = 14; /* DS like Digiface, but no Headphones */
            channel_map_input = channel_map_playback = channel_map_ds;
            dest_map = dest_map_h9652_ds;
            meter_map_input = meter_map_playback = meter_map_ds;
@@ -267,18 +273,21 @@ void HDSPMixerCard::adjustSettings() {
        switch (speed_mode) {
        case 0:
            channels_input = channels_playback = 12 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0);
+        channels_output = channels_playback; /* untested, no idea about this card */
            channel_map_input = channel_map_playback = channel_map_h9632_ss;
            dest_map = dest_map_h9632_ss;
            meter_map_input = meter_map_playback = channel_map_h9632_ss;
            break;
        case 1:
            channels_input = channels_playback = 8 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0);
+        channels_output = channels_playback; /* untested, no idea about this card */
            channel_map_input = channel_map_playback = channel_map_h9632_ds;
            dest_map = dest_map_h9632_ds;
            meter_map_input = meter_map_playback = channel_map_h9632_ds;
            break;
        case 2:
            channels_input = channels_playback = 4 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0);
+        channels_output = channels_playback; /* untested, no idea about this card */
            channel_map_input = channel_map_playback = channel_map_h9632_qs;
            dest_map = dest_map_h9632_qs;
            meter_map_input = meter_map_playback = channel_map_h9632_qs;
@@ -290,18 +299,21 @@ void HDSPMixerCard::adjustSettings() {
       switch (speed_mode) {
       case 0: // SS
        channels_input = channels_playback = 64;
+    channels_output = channels_input; /* SS headphones missing, at least HDSPe MADI has some, MADIface hasn't */
        channel_map_input = channel_map_playback = channel_map_unity_ss;
        dest_map = dest_map_unity;
        meter_map_input = meter_map_playback = channel_map_unity_ss;
        break;
       case 1: // DS
        channels_input = channels_playback = 32;
+    channels_output = channels_input; /* DS headphones missing, at least HDSPe MADI has some, MADIface hasn't */
        channel_map_input = channel_map_playback = channel_map_unity_ss;
        dest_map = dest_map_unity;
        meter_map_input = meter_map_playback = channel_map_unity_ss;
        break;
       case 2: // QS
        channels_input = channels_playback = 16;
+    channels_output = channels_input; /* QS headphones missing, at least HDSPe MADI has some, MADIface hasn't */
        channel_map_input = channel_map_playback = channel_map_unity_ss;
        dest_map = dest_map_unity;
        meter_map_input = meter_map_playback = channel_map_unity_ss;
@@ -315,6 +327,7 @@ void HDSPMixerCard::adjustSettings() {
       case 0: // SS
        channels_input = 14;
        channels_playback = 16;
+    channels_output = 16; /* SS 2xAnalog+2xAES+2xSPDIF+4xADAT+2xHeadphones */
        channel_map_input = channel_map_aio_in_ss;
        channel_map_playback = channel_map_aio_out_ss;
        dest_map = dest_map_aio_ss;
@@ -324,6 +337,7 @@ void HDSPMixerCard::adjustSettings() {
       case 1: // DS
        channels_input = 10;
        channels_playback = 12;
+    channels_output = 12; /* DS 2xAnalog+2xAES+2xSPDIF+4xADAT(SMUX)+2xHeadphones */
        channel_map_input = channel_map_aio_in_ds;
        channel_map_playback = channel_map_aio_out_ds;
        dest_map = dest_map_aio_ds;
@@ -333,6 +347,7 @@ void HDSPMixerCard::adjustSettings() {
       case 2: // QS
        channels_input = 8;
        channels_playback = 10;
+    channels_output = 10; /* QS 2xAnalog+2xAES+2xSPDIF+2xADAT(SMUX)+2xHeadphones */
        channel_map_input = channel_map_aio_in_qs;
        channel_map_playback = channel_map_aio_out_qs;
        dest_map = dest_map_aio_qs;
@@ -347,6 +362,7 @@ void HDSPMixerCard::adjustSettings() {
       /* 16 channels for all modes */
       channels_input = 16;
       channels_playback = 16;
+      channels_output = 16;
       channel_map_input = channel_map_aes32;
       channel_map_playback = channel_map_aes32;
       dest_map = dest_map_aes32;
@@ -360,13 +376,15 @@ void HDSPMixerCard::adjustSettings() {
       case 0: // SS
        channels_input = 36;
        channels_playback = 36;
+       channels_output = 36; /* SS 4x8xADAT+2xAES/EBU+2xSPDIF */
        channel_map_input = channel_map_playback = channel_map_raydat_ss;
        dest_map = dest_map_raydat_ss;
        meter_map_input = meter_map_playback = channel_map_raydat_ss;
        break;
       case 1: // DS
        channels_input = 20;
-       channels_playback = 20;
+    channels_playback = 20;
+       channels_output = 20; /* DS 4x4xADAT(SMUX)+2xAES/EBU+2xSPDIF */
        channel_map_input = channel_map_playback = channel_map_raydat_ds;
        dest_map = dest_map_raydat_ds;
        meter_map_input = meter_map_playback = channel_map_raydat_ds;
@@ -374,6 +392,7 @@ void HDSPMixerCard::adjustSettings() {
       case 2: // QS
        channels_input = 12;
        channels_playback = 12;
+       channels_output = 12; /* QS 4x2xADAT(SMUX)+2xAES/EBU+2xSPDIF */
        channel_map_input = channel_map_playback = channel_map_raydat_qs;
        dest_map = dest_map_raydat_qs;
        meter_map_input = meter_map_playback = channel_map_raydat_qs;
@@ -397,7 +416,9 @@ void HDSPMixerCard::setMode(int mode)
     }
     for (int i = 0; i < channels_playback; ++i) {
       basew->playbacks->strips[i]->targets->setLabels();
-      basew->outputs->strips[i]->setLabels();    
+    }
+    for (int i = 0; i < channels_output; ++i) {
+      basew->outputs->strips[i]->setLabels();
     }
 
     if (h9632_aeb.aebo && !h9632_aeb.aebi) {
@@ -435,11 +456,16 @@ void HDSPMixerCard::actualizeStrips()
        } else {
            basew->inputs->strips[i]->hide();
        }
+
        if (i < channels_playback) {
            basew->playbacks->strips[i]->show();
-           basew->outputs->strips[i]->show();
        } else {
            basew->playbacks->strips[i]->hide();
+       }
+
+       if (i < channels_output) {
+           basew->outputs->strips[i]->show();
+       } else {
            basew->outputs->strips[i]->hide();
        }
     }
index cfb240202c4f48e61bbfd8a4cf59863cfb446f65..b721bd939b4f1ae414b67aa982de6daadec0be0f 100644 (file)
@@ -44,6 +44,7 @@ public:
     char name[6];
     HDSPMixerCard(int cardtype, int id);
     int channels_input, channels_playback, window_width, window_height, card_id;
+    int channels_output;
     int type;
     char *channel_map_input, *channel_map_playback;
     char *dest_map;
index 8c057e0d60fa0a1b5eaf8e7b4d42913558744009..8f44c99a03b3455eef442ada4129599c3c924faf 100644 (file)
@@ -109,7 +109,7 @@ static void readregisters_cb(void *arg)
     }
 
     if (w->inputs->buttons->output) {
-        for (int i = 0; i < w->cards[w->current_card]->channels_playback; ++i) {
+        for (int i = 0; i < w->cards[w->current_card]->channels_output; ++i) {
             w->outputs->strips[i]->meter->update(output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xffffff00,
                     output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xf,
                     output_rms[(w->cards[w->current_card]->meter_map_playback[i])]);
@@ -738,7 +738,7 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label,
     inputs->buttons->submix = 1;
     inputs->buttons->playback = 1;
     playbacks = new HDSPMixerPlaybacks(0, MENU_HEIGHT+FULLSTRIP_HEIGHT, w, FULLSTRIP_HEIGHT, cards[0]->channels_playback);
-    outputs = new HDSPMixerOutputs(0, MENU_HEIGHT+FULLSTRIP_HEIGHT*2, w, SMALLSTRIP_HEIGHT, cards[0]->channels_playback);
+    outputs = new HDSPMixerOutputs(0, MENU_HEIGHT+FULLSTRIP_HEIGHT*2, w, SMALLSTRIP_HEIGHT, cards[0]->channels_output);
     scroll->end();
     end();
     setup = new HDSPMixerSetup(400, 260, "Level Meters Setup", this);