<Sound Dev> [9] Review Request: 6459818 Audio A-law and law decoder skip() method not implemented
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Sat Jan 2 22:52:02 UTC 2016
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