EQ: Fix an integer type bug in IIR coefficients blob packer

This patch adds explicit conversion to signed int32 type for response to
channels indices in assign_response and filter coefficients. The bug was
visible if trying to activate in IIR blob the per channel filter bypass
by having a negative value (-1) in any of channel assigns. Octave assumed
the type to be unsigned and produced wrong configuration bytes.

The filter coefficients are already integer type from previous
quantization code in the conversion process. However it does not hurt to
have extra safety to avoid similar issue as assign.

Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This commit is contained in:
Seppo Ingalsuo 2018-10-12 18:46:30 +03:00
parent c0a881a3b7
commit 0913d7c83a
1 changed files with 10 additions and 2 deletions

View File

@ -41,6 +41,12 @@ if nargin < 2
endian = 'little';
end
%% Channels count and assign vector lengths must be the same
if bs.platform_max_channels ~= length( bs.assign_response)
bs
error("Channels # and response assign length must match");
end
%% Shift values for little/big endian
switch lower(endian)
case 'little'
@ -63,12 +69,14 @@ blob8(j:j+3) = w2b(bs.platform_max_channels, sh); j=j+4;
blob8(j:j+3) = w2b(bs.number_of_responses_defined, sh); j=j+4;
for i=1:bs.platform_max_channels
blob8(j:j+3) = w2b(bs.assign_response(i), sh); j=j+4;
blob8(j:j+3) = w2b(int32(bs.assign_response(i)), sh);
j=j+4;
end
%% Pack coefficients
for i=1:length(bs.all_coefficients)
blob8(j:j+3) = w2b(bs.all_coefficients(i), sh); j=j+4;
blob8(j:j+3) = w2b(int32(bs.all_coefficients(i)), sh);
j=j+4;
end
fprintf('Blob size is %d bytes.\n', nbytes);