Various fixes to ld10k1

Various fixes by Tim <terminator356@users.sourceforge.net>:

- 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().
This commit is contained in:
Takashi Iwai 2005-06-03 12:30:46 +00:00
parent 37fccff016
commit 700edf08b4
8 changed files with 48 additions and 25 deletions

View file

@ -1,4 +1,5 @@
Peter Zubaj <pzad@pobox.sk>
Contributors:
Mikael Magnusson <mikma@users.sourceforge.net>
Mikael Magnusson <mikma@users.sourceforge.net>
Tim <terminator356@users.sourceforge.net>

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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 {

View file

@ -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)

View file

@ -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;

View file

@ -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);