On Sat, May 19, 2001 at 06:42:22PM -0400, Matt Zimmerman wrote:
> I think this could be fixed by changing the (data_len > 0) test to be
> (data_len > 0 && total_error_X > 0).
Yes, this appears to have worked. I can now correctly encode and decode both
my 8kHz/8-bit/mono sample, and a 44.1kHz/16-bit/stereo sample on Debian/alpha.
Attached is a patch which combines this fix with my earlier patch.
--
- mdz
-------------- next part --------------
--- fixed.c.orig Sat May 19 18:28:08 2001
+++ fixed.c Sat May 19 18:26:50 2001
@@ -81,11 +81,11 @@
residual_bits_per_sample[3] = (real)((data_len > 0) ? log(M_LN2 *
(real)(int64)total_error_3 / (real) data_len) / M_LN2 : 0.0);
residual_bits_per_sample[4] = (real)((data_len > 0) ? log(M_LN2 *
(real)(int64)total_error_4 / (real) data_len) / M_LN2 : 0.0);
#else
- residual_bits_per_sample[0] = (real)((data_len > 0) ? log(M_LN2 *
(real)total_error_0 / (real) data_len) / M_LN2 : 0.0);
- residual_bits_per_sample[1] = (real)((data_len > 0) ? log(M_LN2 *
(real)total_error_1 / (real) data_len) / M_LN2 : 0.0);
- residual_bits_per_sample[2] = (real)((data_len > 0) ? log(M_LN2 *
(real)total_error_2 / (real) data_len) / M_LN2 : 0.0);
- residual_bits_per_sample[3] = (real)((data_len > 0) ? log(M_LN2 *
(real)total_error_3 / (real) data_len) / M_LN2 : 0.0);
- residual_bits_per_sample[4] = (real)((data_len > 0) ? log(M_LN2 *
(real)total_error_4 / (real) data_len) / M_LN2 : 0.0);
+ residual_bits_per_sample[0] = (real)((data_len > 0 && total_error_0
> 0) ? log(M_LN2 * (real)total_error_0 / (real) data_len) / M_LN2 : 0.0);
+ residual_bits_per_sample[1] = (real)((data_len > 0 && total_error_1
> 0) ? log(M_LN2 * (real)total_error_1 / (real) data_len) / M_LN2 : 0.0);
+ residual_bits_per_sample[2] = (real)((data_len > 0 && total_error_2
> 0) ? log(M_LN2 * (real)total_error_2 / (real) data_len) / M_LN2 : 0.0);
+ residual_bits_per_sample[3] = (real)((data_len > 0 && total_error_3
> 0) ? log(M_LN2 * (real)total_error_3 / (real) data_len) / M_LN2 : 0.0);
+ residual_bits_per_sample[4] = (real)((data_len > 0 && total_error_4
> 0) ? log(M_LN2 * (real)total_error_4 / (real) data_len) / M_LN2 : 0.0);
#endif
return order;
@@ -152,7 +152,7 @@
void FLAC__fixed_compute_residual(const int32 data[], unsigned data_len,
unsigned order, int32 residual[])
{
- unsigned i;
+ int i;
switch(order) {
case 0:
@@ -190,7 +190,7 @@
void FLAC__fixed_restore_signal(const int32 residual[], unsigned data_len,
unsigned order, int32 data[])
{
- unsigned i;
+ int i;
switch(order) {
case 0: