<Sound Dev> [9] Review Request: 6459818 Audio A-law and law decoder skip() method not implemented

Alex Menkov alexey.menkov at oracle.com
Tue Jan 12 12:05:58 UTC 2016


Hi Sergey,

Using of bitwise operators to multiplication and arithmetic for division 
looks a bit inconsistent:
return encode ? super.skip(n << 1) / 2 : super.skip(n / 2) << 1;

I think it would be better to use arithmetic for both. The code becomes 
clearer (and compilers are smart enough to do optimizations):
return encode ? super.skip(n * 2) / 2 : super.skip(n / 2) * 2;

regards
Alex

On 03.01.2016 01:52, Sergey Bylokhov wrote:
> Hello, Audio Guru.
>
> Please review the fix for jdk9.
>
> Description of the problem copied from the bug:
> "The AudioInputStream objects returned by the A-Law encoding converters
> do not implement the skip() method correctly. The skip() method is not
> reimplemented and so calls to the skip method of the decoded PCM stream
> skip the underlying original A-law stream. This results in skipping the
> double amount of bytes as intended."
> In short this means that if we have a pcm(16bit) stream on top of the
> alaw(8bit) stream and call the skip of the pcm stream the incorrect
> number of bytes will be skipped.
>
> The bug submitter suggest such patch:
> +
> +    public long skip(long n) throws IOException {
> +            if(n<0){
> +                throw new IOException("Cannot skip negative value!");
> +            }
> +            long skipped=0;
> +            if (encode){
> +                long toSkip = n * 2;
> +                long srcSkipped=0;
> +                do{
> +                    srcSkipped+=super.skip(toSkip-srcSkipped);
> +                }while(srcSkipped % 2 !=0);
> +                skipped=srcSkipped / 2;
> +            }else{
> +                long toSkip = n / 2;
> +                long srcSkipped=super.skip(toSkip);
> +                skipped = srcSkipped * 2;
> +            }
> +            return skipped;
> +        }
>
> But I simplified it a little bit and moved the repeat skip to the parent
> class. Now it is implemented in the similar way like was done in:
> http://cr.openjdk.java.net/~serb/8135160/webrev.01/src/java.desktop/share/classes/com/sun/media/sound/RIFFReader.java.sdiff.html
>
>
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-6459818
> Webrev can be found at: http://cr.openjdk.java.net/~serb/6459818/webrev.00
>


More information about the sound-dev mailing list