backwards compatible a-comp stereo sidechain ports

This commit is contained in:
Robin Gareus 2016-08-27 18:08:46 +02:00
parent 21dace3075
commit c6ef3a75d3
2 changed files with 102 additions and 63 deletions

View file

@ -132,22 +132,22 @@
[ [
a lv2:InputPort, lv2:AudioPort ; a lv2:InputPort, lv2:AudioPort ;
lv2:index 11 ; lv2:index 11 ;
lv2:symbol "sidechain_in" ;
lv2:name "Sidechain Input" ;
lv2:portProperty lv2:isSideChain ;
],
[
a lv2:OutputPort, lv2:AudioPort ;
lv2:index 12 ;
lv2:symbol "out_1" ;
lv2:name "Audio Output 1" ;
],
[
a lv2:InputPort, lv2:AudioPort ;
lv2:index 13 ;
lv2:symbol "in_2" ; lv2:symbol "in_2" ;
lv2:name "Audio Input 2" ; lv2:name "Audio Input 2" ;
] , ] ,
[
a lv2:InputPort, lv2:AudioPort ;
lv2:index 12 ;
lv2:symbol "sidechain_in" ;
lv2:name "Sidechain Input" ;
lv2:portProperty lv2:isSideChain ;
] ,
[
a lv2:OutputPort, lv2:AudioPort ;
lv2:index 13 ;
lv2:symbol "out_1" ;
lv2:name "Audio Output 1" ;
],
[ [
a lv2:OutputPort, lv2:AudioPort ; a lv2:OutputPort, lv2:AudioPort ;
lv2:index 14 ; lv2:index 14 ;

View file

@ -44,11 +44,11 @@ typedef enum {
ACOMP_SIDECHAIN, ACOMP_SIDECHAIN,
ACOMP_ENABLE, ACOMP_ENABLE,
ACOMP_INPUT, ACOMP_A0,
ACOMP_SC, ACOMP_A1,
ACOMP_OUTPUT, ACOMP_A2,
ACOMP_STEREO_INPUT, ACOMP_A3,
ACOMP_STEREO_OUTPUT, ACOMP_A4,
} PortIndex; } PortIndex;
typedef struct { typedef struct {
@ -163,21 +163,60 @@ connect_port(LV2_Handle instance,
case ACOMP_ENABLE: case ACOMP_ENABLE:
acomp->enable = (float*)data; acomp->enable = (float*)data;
break; break;
case ACOMP_INPUT: default:
break;
}
}
static void
connect_mono(LV2_Handle instance,
uint32_t port,
void* data)
{
AComp* acomp = (AComp*)instance;
connect_port (instance, port, data);
switch ((PortIndex)port) {
case ACOMP_A0:
acomp->input0 = (float*)data; acomp->input0 = (float*)data;
break; break;
case ACOMP_SC: case ACOMP_A1:
acomp->sc = (float*)data; acomp->sc = (float*)data;
break; break;
case ACOMP_OUTPUT: case ACOMP_A2:
acomp->output0 = (float*)data; acomp->output0 = (float*)data;
break; break;
case ACOMP_STEREO_INPUT: default:
break;
}
}
static void
connect_stereo(LV2_Handle instance,
uint32_t port,
void* data)
{
AComp* acomp = (AComp*)instance;
connect_port (instance, port, data);
switch ((PortIndex)port) {
case ACOMP_A0:
acomp->input0 = (float*)data;
break;
case ACOMP_A1:
acomp->input1 = (float*)data; acomp->input1 = (float*)data;
break; break;
case ACOMP_STEREO_OUTPUT: case ACOMP_A2:
acomp->sc = (float*)data;
break;
case ACOMP_A3:
acomp->output0 = (float*)data;
break;
case ACOMP_A4:
acomp->output1 = (float*)data; acomp->output1 = (float*)data;
break; break;
default:
break;
} }
} }
@ -642,7 +681,7 @@ extension_data(const char* uri)
static const LV2_Descriptor descriptor_mono = { static const LV2_Descriptor descriptor_mono = {
ACOMP_URI, ACOMP_URI,
instantiate, instantiate,
connect_port, connect_mono,
activate, activate,
run_mono, run_mono,
deactivate, deactivate,
@ -653,7 +692,7 @@ static const LV2_Descriptor descriptor_mono = {
static const LV2_Descriptor descriptor_stereo = { static const LV2_Descriptor descriptor_stereo = {
ACOMP_STEREO_URI, ACOMP_STEREO_URI,
instantiate, instantiate,
connect_port, connect_stereo,
activate, activate,
run_stereo, run_stereo,
deactivate, deactivate,