From 700edf08b40d9472e15232a00028b8d155e16e8b Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 3 Jun 2005 12:30:46 +0000 Subject: [PATCH] Various fixes to ld10k1 Various fixes by Tim : - Now loads as10k1 bin patch files from ALSA alsa-tools AND from EMU1roject emu-utils. - Fixed init_live bug. - Fixed bug in liblo10k1.c liblo10k1_patch_get(). --- ld10k1/AUTHORS | 3 ++- ld10k1/NEWS | 5 +++++ ld10k1/configure.in | 2 +- ld10k1/include/version.h | 2 +- ld10k1/src/ld10k1_fnc.c | 2 +- ld10k1/src/liblo10k1.c | 26 +++++++++++++------------- ld10k1/src/liblo10k1ef.c | 30 ++++++++++++++++++++++-------- ld10k1/src/lo10k1.c | 3 +++ 8 files changed, 48 insertions(+), 25 deletions(-) diff --git a/ld10k1/AUTHORS b/ld10k1/AUTHORS index 468a355..6ae6126 100644 --- a/ld10k1/AUTHORS +++ b/ld10k1/AUTHORS @@ -1,4 +1,5 @@ Peter Zubaj Contributors: -Mikael Magnusson \ No newline at end of file +Mikael Magnusson +Tim \ No newline at end of file diff --git a/ld10k1/NEWS b/ld10k1/NEWS index dd95883..3b1470d 100644 --- a/ld10k1/NEWS +++ b/ld10k1/NEWS @@ -1,3 +1,8 @@ +0.1.8p1 + By Tim... + Now loads as10k1 bin patch files from ALSA alsa-tools AND from EMU10K1 project emu-utils. + Fixed init_live bug. + Fixed bug in liblo10k1.c liblo10k1_patch_get(). 0.1.8 Sync with ALSA 1.0.8rc1 0.1.7test4 diff --git a/ld10k1/configure.in b/ld10k1/configure.in index 697540d..f1fc8d0 100644 --- a/ld10k1/configure.in +++ b/ld10k1/configure.in @@ -1,5 +1,5 @@ AC_INIT(src/ld10k1.c) -AM_INIT_AUTOMAKE(ld10k1, 0.1.8) +AM_INIT_AUTOMAKE(ld10k1, 0.1.8p1) AC_CONFIG_HEADERS(config.h) AC_PROG_CC diff --git a/ld10k1/include/version.h b/ld10k1/include/version.h index 1ab5f70..be315c4 100644 --- a/ld10k1/include/version.h +++ b/ld10k1/include/version.h @@ -10,5 +10,5 @@ (LD10K1_LIB_MINOR<<8)|\ LD10K1_LIB_SUBMINOR) /** library version (string) */ -#define LD10K1_LIB_VERSION_STR "0.1.8" +#define LD10K1_LIB_VERSION_STR "0.1.8p1" diff --git a/ld10k1/src/ld10k1_fnc.c b/ld10k1/src/ld10k1_fnc.c index 4bc1f55..bf4c28a 100644 --- a/ld10k1/src/ld10k1_fnc.c +++ b/ld10k1/src/ld10k1_fnc.c @@ -209,7 +209,7 @@ int ld10k1_dsp_mgr_init(ld10k1_dsp_mgr_t *dsp_mgr) ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x0f].name), "OUT_Rear_Right"); ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x10].name), "OUT_AC97_Front_Left"); ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x11].name), "OUT_AC97_Front_Right"); - ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x16].name), "OUT_ADC_Caputre_Left"); + ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x16].name), "OUT_ADC_Capture_Left"); ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x17].name), "OUT_ADC_Capture_Right"); ld10k1_dsp_mgr_name_new(&(dsp_mgr->outs[0x18].name), "OUT_Mic_Capture"); } else { diff --git a/ld10k1/src/liblo10k1.c b/ld10k1/src/liblo10k1.c index c8e0f94..8861876 100644 --- a/ld10k1/src/liblo10k1.c +++ b/ld10k1/src/liblo10k1.c @@ -856,19 +856,6 @@ int liblo10k1_patch_get(liblo10k1_connection_t *conn, int patch_num, liblo10k1_d goto err_nomem; } - /* ctls */ - if (patch->ctl_count) { - if ((err = receive_response(*conn, &opr, &sizer)) < 0) - return err; - - if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->ctl_count * sizeof(liblo10k1_dsp_ctl_t)) - goto err_protocol; - - patch->ctl = (liblo10k1_dsp_ctl_t *)receive_msg_data_malloc(*conn, sizer); - if (!patch->ctl) - goto err_nomem; - } - /* tram grp */ if (patch->tram_count) { if ((err = receive_response(*conn, &opr, &sizer)) < 0) @@ -895,6 +882,19 @@ int liblo10k1_patch_get(liblo10k1_connection_t *conn, int patch_num, liblo10k1_d goto err_nomem; } + /* ctls */ + if (patch->ctl_count) { + if ((err = receive_response(*conn, &opr, &sizer)) < 0) + return err; + + if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->ctl_count * sizeof(liblo10k1_dsp_ctl_t)) + goto err_protocol; + + patch->ctl = (liblo10k1_dsp_ctl_t *)receive_msg_data_malloc(*conn, sizer); + if (!patch->ctl) + goto err_nomem; + } + /* instr */ if (patch->instr_count) { if ((err = receive_response(*conn, &opr, &sizer)) < 0) diff --git a/ld10k1/src/liblo10k1ef.c b/ld10k1/src/liblo10k1ef.c index 0a3cfdb..c01ac58 100644 --- a/ld10k1/src/liblo10k1ef.c +++ b/ld10k1/src/liblo10k1ef.c @@ -30,6 +30,10 @@ #include "liblo10k1.h" #include "liblo10k1ef.h" +#define AS10K1_FILE_SIGNATURE_ALSA "EMU10K1 FX8010 1" +#define AS10K1_FILE_SIGNATURE_EMU "emu10k1-dsp-file" +#define AS10K1_FILE_FORMAT_VERSION_EMU 1 + liblo10k1_emu_patch_t *liblo10k1_emu_new_patch() { liblo10k1_emu_patch_t *tmp = (liblo10k1_emu_patch_t *)malloc(sizeof(liblo10k1_emu_patch_t)); @@ -340,10 +344,18 @@ int liblo10k1_emu_load_patch(char *file_name, liblo10k1_emu_patch_t **p) } else fclose(patch_file); - /* signature check */ - if (strncmp(patch_data, "EMU10K1 FX8010 1", 16) != 0) { - en = LD10K1_EF_ERR_SIGNATURE; - goto err; + int file_sig = 0; + + /* signature checks - two kinds of as10k1 files, one from alsa-tools, other from emu-tools. */ + if(strncmp(patch_data, AS10K1_FILE_SIGNATURE_ALSA, 16) != 0) + { + if((strncmp(patch_data, AS10K1_FILE_SIGNATURE_EMU, 16) == 0) && (*((unsigned short *)&patch_data[17]) == AS10K1_FILE_FORMAT_VERSION_EMU)) + file_sig = 3; + else + { + en = LD10K1_EF_ERR_SIGNATURE; + goto err; + } } new_patch = liblo10k1_emu_new_patch(); @@ -353,15 +365,14 @@ int liblo10k1_emu_load_patch(char *file_name, liblo10k1_emu_patch_t **p) } /* next patch name */ - strncpy(new_patch->patch_name, &(patch_data[16]), 31); + strncpy(new_patch->patch_name, &(patch_data[16 + file_sig]), 31); new_patch->patch_name[31] = '\0'; - /* registers */ - file_pos = 32+16; + file_pos = 32+16 + file_sig; /* in count */ if ((en = read_byte(patch_data, file_size, &file_pos, &byte_tmp)) < 0) - goto err; + goto err; if (byte_tmp >= 32) { en = LD10K1_EF_ERR_FORMAT; @@ -501,6 +512,9 @@ int liblo10k1_emu_load_patch(char *file_name, liblo10k1_emu_patch_t **p) if ((en = read_ushort(patch_data, file_size, &file_pos, &ushort_tmp)) < 0) goto err; + if(file_sig) + ushort_tmp >>= 1; + if ((en = liblo10k1_emu_patch_set_instr_count(new_patch, ushort_tmp)) < 0) goto err; diff --git a/ld10k1/src/lo10k1.c b/ld10k1/src/lo10k1.c index a52945d..3d04405 100644 --- a/ld10k1/src/lo10k1.c +++ b/ld10k1/src/lo10k1.c @@ -495,7 +495,10 @@ static int transfer_patch(int udin, char *ctrl_opt, liblo10k1_emu_patch_t *ep, l } if (liblo10k1_emu_transform_patch(ep, tctl, ctrl_to_concate_count, &np) < 0) + { + error("error on liblo10k1_emu_transform_patch"); return 1; + } free(tctl); -- 2.47.1