fix mp3decoder: clear memory locations that are not overwritten.
authoryeom <yeom>
Thu, 15 Dec 2011 01:21:45 +0000 (01:21 +0000)
committeryeom <yeom>
Thu, 15 Dec 2011 01:21:45 +0000 (01:21 +0000)
Robust/src/Benchmarks/SSJava/MP3Decoder/LayerIIIDecoder.java
Robust/src/Benchmarks/SSJava/MP3Decoder/Player.java
Robust/src/Benchmarks/SSJava/MP3Decoder/SynthesisFilter.java

index 8739d5c4267bac4164bca6ff36a983da1caa9b81..7023a94c2dd71f790f56e7395223078b0338b4d4 100644 (file)
@@ -485,6 +485,9 @@ final class LayerIIIDecoder implements FrameDecoder {
     SSJAVA.arrayinit(scalefac_buffer, 0);
     SSJAVA.arrayinit(nonzero, 576);
     SSJAVA.arrayinit(new_slen, 0);
+
+    SSJAVA.arrayinit(raw_full, 2, SBLIMIT * SSLIMIT, 0);
+    SSJAVA.arrayinit(rawout, 0);
     CheckSumHuff = 0;
     // prevblck = new float[2][SBLIMIT * SSLIMIT];
     si = new III_side_info_t();
@@ -519,8 +522,10 @@ final class LayerIIIDecoder implements FrameDecoder {
     filter2.actual_write_pos = filter_pos;
     //
 
-    // System.out.println("filter1="+filter1.vidx+" "+filter1.actual_write_pos);
-    // System.out.println("filter1="+filter2.vidx+" "+filter2.actual_write_pos);
+    // System.out.println("filter1=" + filter1.vidx + " " +
+    // filter1.actual_write_pos);
+    // System.out.println("filter1=" + filter2.vidx + " " +
+    // filter2.actual_write_pos);
 
     // here 'gr' and 'max_gr' should be higher than 'ch','channels', and more
     for (gr = 0; gr < max_gr; gr++) { // two granules per channel
@@ -622,10 +627,12 @@ final class LayerIIIDecoder implements FrameDecoder {
       } // channels
 
       // TODO
-      // init prev
-      SSJAVA.arrayinit(prevblck, 2, SBLIMIT * SSLIMIT, 0);
-      // copy from raw_full to prev
-      SSJAVA.arraycopy(prevblck, raw_full, 2, SBLIMIT * SSLIMIT);
+      if (gr < max_gr - 1) {
+        // init prev
+        SSJAVA.arrayinit(prevblck, 2, SBLIMIT * SSLIMIT, 0);
+        // copy from raw_full to prev
+        SSJAVA.arraycopy(prevblck, raw_full, 2, SBLIMIT * SSLIMIT);
+      }
       // for (int chidx = 0; chidx < 2; chidx++) {
       // for (int sidx = 0; sidx < SBLIMIT * SSLIMIT; sidx++) {
       // prevblck[chidx][sidx] = raw_full[chidx][sidx];
@@ -635,6 +642,12 @@ final class LayerIIIDecoder implements FrameDecoder {
       // filter1.actual_write_pos);
     } // granule
 
+    // TODO
+    // init prev
+    SSJAVA.arrayinit(prevblck, 2, SBLIMIT * SSLIMIT, 0);
+    // copy from raw_full to prev
+    SSJAVA.arraycopy(prevblck, raw_full, 2, SBLIMIT * SSLIMIT);
+
     // System.out.println("#END FRAME actual_write_pos=" +
     // filter1.actual_write_pos);
 
index a6f5e0b33c56910c326957bfba5f9c7fea0cb968..d0ef553aff75f90ffdf97367de116a20dd4077f1 100644 (file)
@@ -207,7 +207,8 @@ public class Player {
       // @LOC("O") SampleBuffer output = (SampleBuffer) decoder.decodeFrame(h);\r
       decoder.decodeFrame(h);\r
 \r
-      DEBUG_OUTPUT();\r
+      DEBUG_OUTPUT_CHECKSUM();\r
+      // DEBUG_OUTPUT();\r
       // synchronized (this)\r
       // {\r
       // out = audio;\r
@@ -244,4 +245,18 @@ public class Player {
     }\r
   }\r
 \r
+  @TRUST\r
+  public void DEBUG_OUTPUT_CHECKSUM() {\r
+    // eom debug\r
+    @LOC("C") int sum = 0;\r
+    @LOC("C") short[] outbuf = SampleBufferWrapper.getBuffer();\r
+    // short[] outbuf = output.getBuffer();\r
+    TERMINATE: for (@LOC("C") int i = 0; i < SampleBufferWrapper.getBufferLength(); i++) {\r
+      // System.out.println(outbuf[i]);\r
+      sum += outbuf[i];\r
+    }\r
+    System.out.println(sum);\r
+    //\r
+  }\r
+\r
 }\r
index 18d681d0efd918f8e8adcde9d8ee2e7593e4ca21..dcfa7947ff1304b6c7b3e38f720492ded8ced529 100644 (file)
@@ -1985,6 +1985,7 @@ final class SynthesisFilter {
     SSJAVA.arrayinit(v1, 0);\r
     SSJAVA.arrayinit(v2, 0);\r
     // copy previous v1,v2\r
+\r
     for (@LOC("THIS,SynthesisFilter.V") int i = 0; i < prev1.length; i++) {\r
       v1[i] = prev1[i];\r
     }\r
@@ -1994,6 +1995,8 @@ final class SynthesisFilter {
     // clear out previous buffer\r
     SSJAVA.arrayinit(prev1, 0);\r
     SSJAVA.arrayinit(prev2, 0);\r
+    SSJAVA.arrayinit(samples, 0);\r
+    SSJAVA.arrayinit(_tmpOut, 0);\r
   }\r
 \r
   /**\r
@@ -2002,6 +2005,8 @@ final class SynthesisFilter {
 \r
   public void calculate_pcm_samples() {\r
 \r
+//    System.out.println("#calculate_pcm_samples::actual_write_pos=" + actual_write_pos);\r
+\r
     if (vidx == 1) {\r
       compute_new_v1_v2();\r
     } else {\r
@@ -2015,7 +2020,7 @@ final class SynthesisFilter {
     // System.out.println("3.actual_v=" + (actual_v == v1) + " vidx=" + vidx);\r
 \r
     actual_write_pos = (actual_write_pos + 1) & 0xf;\r
-    // System.out.println("actual_write_pos="+actual_write_pos);\r
+//     System.out.println("actual_write_pos="+actual_write_pos);\r
     // actual_v = (actual_v == v1) ? v2 : v1;\r
 \r
     if (vidx == 1) {\r