mirror of
https://github.com/alsa-project/alsa-tools.git
synced 2025-11-26 07:00:10 -05:00
hdspmixer: Handle channel count in old (v1.0.23) preset file format
When reading a preset file, v1.0.23 only used 26 channels instead of 64. Reading 64 channels from a 26 channel file won't work, hence set it depending on the file format version. Signed-off-by: Adrian Knoth <adi@drcomp.erfurt.thur.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
25bd81562a
commit
7c6912449a
1 changed files with 3 additions and 1 deletions
|
|
@ -488,6 +488,7 @@ void HDSPMixerWindow::load()
|
||||||
char buffer[sizeof(header)];
|
char buffer[sizeof(header)];
|
||||||
bool ondisk_v1 = false;
|
bool ondisk_v1 = false;
|
||||||
int pan_array_size = 14; /* old (pre 1.0.24) HDSP_MAX_DEST */
|
int pan_array_size = 14; /* old (pre 1.0.24) HDSP_MAX_DEST */
|
||||||
|
int channels_per_card = 26; /* old (pre 1.0.24) HDSP_MAX_CHANNELS */
|
||||||
|
|
||||||
if (fread(&buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) {
|
if (fread(&buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) {
|
||||||
goto load_error;
|
goto load_error;
|
||||||
|
|
@ -496,6 +497,7 @@ void HDSPMixerWindow::load()
|
||||||
/* new ondisk format found */
|
/* new ondisk format found */
|
||||||
ondisk_v1 = true;
|
ondisk_v1 = true;
|
||||||
pan_array_size = HDSP_MAX_DEST;
|
pan_array_size = HDSP_MAX_DEST;
|
||||||
|
channels_per_card = HDSP_MAX_CHANNELS;
|
||||||
} else {
|
} else {
|
||||||
/* old format, rewind to the start and simply read all data */
|
/* old format, rewind to the start and simply read all data */
|
||||||
rewind(file);
|
rewind(file);
|
||||||
|
|
@ -504,7 +506,7 @@ void HDSPMixerWindow::load()
|
||||||
for (int speed = 0; speed < 3; ++speed) {
|
for (int speed = 0; speed < 3; ++speed) {
|
||||||
for (int card = 0; card < MAX_CARDS; ++card) {
|
for (int card = 0; card < MAX_CARDS; ++card) {
|
||||||
for (int preset = 0; preset < 8; ++preset) {
|
for (int preset = 0; preset < 8; ++preset) {
|
||||||
for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) {
|
for (int channel = 0; channel < channels_per_card; ++channel) {
|
||||||
/* inputs pans and volumes */
|
/* inputs pans and volumes */
|
||||||
if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) {
|
if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) {
|
||||||
goto load_error;
|
goto load_error;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue