|
|
|
@@ -818,20 +818,28 @@ static const int32_t gaintab[] = { |
|
|
|
|
|
|
|
typedef struct { |
|
|
|
uint64_t window; |
|
|
|
unsigned char readahead, arg, control; |
|
|
|
int running_gain; |
|
|
|
unsigned sustain, sustain_reset; |
|
|
|
int code_counterA; |
|
|
|
int code_counterA_almost; /* looks like an A code, but a bit expected to be 0 is 1 */ |
|
|
|
int code_counterB; |
|
|
|
unsigned char readahead; |
|
|
|
|
|
|
|
/* arg is set when a packet prefix is found. |
|
|
|
* control is the active control code, where |
|
|
|
* bit 0-3: target_gain, 4-bit (3.1) fixed-point value |
|
|
|
* bit 4 : peak_extend |
|
|
|
* bit 5 : transient_filter |
|
|
|
* bit 6,7: always zero */ |
|
|
|
unsigned char arg, control; |
|
|
|
unsigned sustain, sustain_reset; /* code detect timer */ |
|
|
|
|
|
|
|
int running_gain; /* 11-bit (3.8) fixed point, extended from target_gain */ |
|
|
|
|
|
|
|
/* counters */ |
|
|
|
int code_counterA; /* 8-bit format packet */ |
|
|
|
int code_counterA_almost; /* looks like an A code, but a bit expected to be 0 is 1 */ |
|
|
|
int code_counterB; /* 16-bit format packet, 8-bit code, 8-bit XOR of code */ |
|
|
|
int code_counterB_checkfails; /* looks like a B code, but doesn't pass the XOR check */ |
|
|
|
int code_counterC; |
|
|
|
int code_counterC_unmatched; /* told to look for a code, but didn't find one */ |
|
|
|
|
|
|
|
/* For user information/stats, pulled up into HDCDContext |
|
|
|
* by filter_frame() */ |
|
|
|
int count_peak_extend; |
|
|
|
int count_transient_filter; |
|
|
|
int code_counterC; /* packet prefix was found, expect a code */ |
|
|
|
int code_counterC_unmatched; /* told to look for a code, but didn't find one */ |
|
|
|
int count_peak_extend; /* valid packets where peak_extend was enabled */ |
|
|
|
int count_transient_filter; /* valid packets where filter was detected */ |
|
|
|
/* target_gain is a 4-bit (3.1) fixed-point value, always |
|
|
|
* negative, but stored positive. |
|
|
|
* The 16 possible values range from -7.5 to 0.0 dB in |
|
|
|
|