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

Alex Menkov alexey.menkov at oracle.com
Wed Jan 13 09:35:11 UTC 2016


approved.

--alex

On 12.01.2016 23:33, Sergey Bylokhov wrote:
> On 12/01/16 15:05, Alex Menkov wrote:
>> 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;
>
> The code is changed according to your comment:
> http://cr.openjdk.java.net/~serb/6459818/webrev.01
>
>>
>> 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