<Sound Dev> [9] Review Request: 6459818 Audio A-law and law decoder skip() method not implemented
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Tue Jan 12 20:33:18 UTC 2016
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
>>
--
Best regards, Sergey.
More information about the sound-dev
mailing list