From ac69f1d79a7ca9e02bc695ec500e77710589a8e2 Mon Sep 17 00:00:00 2001 From: yeom Date: Thu, 15 Dec 2011 01:21:45 +0000 Subject: [PATCH] fix mp3decoder: clear memory locations that are not overwritten. --- .../SSJava/MP3Decoder/LayerIIIDecoder.java | 25 ++++++++++++++----- .../Benchmarks/SSJava/MP3Decoder/Player.java | 17 ++++++++++++- .../SSJava/MP3Decoder/SynthesisFilter.java | 7 +++++- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/Robust/src/Benchmarks/SSJava/MP3Decoder/LayerIIIDecoder.java b/Robust/src/Benchmarks/SSJava/MP3Decoder/LayerIIIDecoder.java index 8739d5c4..7023a94c 100644 --- a/Robust/src/Benchmarks/SSJava/MP3Decoder/LayerIIIDecoder.java +++ b/Robust/src/Benchmarks/SSJava/MP3Decoder/LayerIIIDecoder.java @@ -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); diff --git a/Robust/src/Benchmarks/SSJava/MP3Decoder/Player.java b/Robust/src/Benchmarks/SSJava/MP3Decoder/Player.java index a6f5e0b3..d0ef553a 100644 --- a/Robust/src/Benchmarks/SSJava/MP3Decoder/Player.java +++ b/Robust/src/Benchmarks/SSJava/MP3Decoder/Player.java @@ -207,7 +207,8 @@ public class Player { // @LOC("O") SampleBuffer output = (SampleBuffer) decoder.decodeFrame(h); decoder.decodeFrame(h); - DEBUG_OUTPUT(); + DEBUG_OUTPUT_CHECKSUM(); + // DEBUG_OUTPUT(); // synchronized (this) // { // out = audio; @@ -244,4 +245,18 @@ public class Player { } } + @TRUST + public void DEBUG_OUTPUT_CHECKSUM() { + // eom debug + @LOC("C") int sum = 0; + @LOC("C") short[] outbuf = SampleBufferWrapper.getBuffer(); + // short[] outbuf = output.getBuffer(); + TERMINATE: for (@LOC("C") int i = 0; i < SampleBufferWrapper.getBufferLength(); i++) { + // System.out.println(outbuf[i]); + sum += outbuf[i]; + } + System.out.println(sum); + // + } + } diff --git a/Robust/src/Benchmarks/SSJava/MP3Decoder/SynthesisFilter.java b/Robust/src/Benchmarks/SSJava/MP3Decoder/SynthesisFilter.java index 18d681d0..dcfa7947 100644 --- a/Robust/src/Benchmarks/SSJava/MP3Decoder/SynthesisFilter.java +++ b/Robust/src/Benchmarks/SSJava/MP3Decoder/SynthesisFilter.java @@ -1985,6 +1985,7 @@ final class SynthesisFilter { SSJAVA.arrayinit(v1, 0); SSJAVA.arrayinit(v2, 0); // copy previous v1,v2 + for (@LOC("THIS,SynthesisFilter.V") int i = 0; i < prev1.length; i++) { v1[i] = prev1[i]; } @@ -1994,6 +1995,8 @@ final class SynthesisFilter { // clear out previous buffer SSJAVA.arrayinit(prev1, 0); SSJAVA.arrayinit(prev2, 0); + SSJAVA.arrayinit(samples, 0); + SSJAVA.arrayinit(_tmpOut, 0); } /** @@ -2002,6 +2005,8 @@ final class SynthesisFilter { public void calculate_pcm_samples() { +// System.out.println("#calculate_pcm_samples::actual_write_pos=" + actual_write_pos); + if (vidx == 1) { compute_new_v1_v2(); } else { @@ -2015,7 +2020,7 @@ final class SynthesisFilter { // System.out.println("3.actual_v=" + (actual_v == v1) + " vidx=" + vidx); actual_write_pos = (actual_write_pos + 1) & 0xf; - // System.out.println("actual_write_pos="+actual_write_pos); +// System.out.println("actual_write_pos="+actual_write_pos); // actual_v = (actual_v == v1) ? v2 : v1; if (vidx == 1) { -- 2.34.1