Fixed multiple bugs in the repacketizer
[opus.git] / src / test_opus.c
index d4b1ce3..c1db8d7 100644 (file)
@@ -104,13 +104,11 @@ int main(int argc, char *argv[])
     int count=0, count_act=0, k;
     int skip;
     int stop=0;
-    int tot_read=0, tot_written=0;
     short *in, *out;
     int application;
     double bits=0.0, bits_act=0.0, bits2=0.0, nrg;
     int bandwidth=-1;
     const char *bandwidth_string;
-    int write_samples;
     int lost = 0, lost_prev = 1;
     int toggle = 0;
     int enc_final_range[2];
@@ -158,7 +156,8 @@ int main(int argc, char *argv[])
     forcemono = 0;
     use_dtx = 0;
     packet_loss_perc = 0;
-    int max_frame_size = 960*3;
+    int max_frame_size = 960*6;
+    int curr_read=0;
 
     args = 5;
     while( args < argc - 2 ) {
@@ -339,15 +338,14 @@ int main(int argc, char *argv[])
             err = fread(data[toggle], 1, len[toggle], fin);
             if (feof(fin))
                 break;
-            tot_read += frame_size*channels;
         } else {
             err = fread(in, sizeof(short), frame_size*channels, fin);
-            tot_read += err;
-            if (err < frame_size*channels)
+            curr_read = err;
+            if (curr_read < frame_size*channels)
             {
                 int i;
-                for (i=err;i<frame_size*channels;i++)
-                    in[i] = 0;
+                for (i=curr_read*channels;i<frame_size*channels;i++)
+                   in[i] = 0;
                 stop = 1;
             }
 
@@ -386,22 +384,16 @@ int main(int argc, char *argv[])
                 }
                 if (output_samples>0)
                 {
-                    write_samples = output_samples-skip;
-                    tot_written += write_samples*channels;
-                    if (tot_written > tot_read)
-                    {
-                        write_samples -= (tot_written-tot_read)/channels;
-                    }
-                    fwrite(out+skip, sizeof(short), write_samples*channels, fout);
+                    fwrite(out+skip, sizeof(short), output_samples-skip*channels, fout);
                     skip = 0;
                 }
             }
         }
 
         /* compare final range encoder rng values of encoder and decoder */
-        if( !encode_only && !lost && !lost_prev &&
+        if( enc_final_range[toggle^use_inbandfec]!=0  && !encode_only && !lost && !lost_prev &&
              opus_decoder_get_final_range( dec ) != enc_final_range[toggle^use_inbandfec] ) {
-            fprintf (stderr, "Error: Range coder state mismatch between encoder and decoder in frame %d.\n", count);
+            fprintf (stderr, "Error: Range coder state mismatch between encoder and decoder in frame %d: 0x%8x vs 0x%8x\n", count,  enc_final_range[toggle^use_inbandfec], opus_decoder_get_final_range( dec ));
             return 0;
         }