Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
4a351471
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
4a351471
编写于
3月 03, 2011
作者:
A
amenkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6938426: Concurrency bug in ALAW encoder causes random bursts of static/noise in output.
Reviewed-by: stayer
上级
2cc3845f
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
118 addition
and
6 deletion
+118
-6
src/share/classes/com/sun/media/sound/AlawCodec.java
src/share/classes/com/sun/media/sound/AlawCodec.java
+5
-6
test/javax/sound/sampled/FileWriter/AlawEncoderSync.java
test/javax/sound/sampled/FileWriter/AlawEncoderSync.java
+113
-0
未找到文件。
src/share/classes/com/sun/media/sound/AlawCodec.java
浏览文件 @
4a351471
...
@@ -52,9 +52,6 @@ public class AlawCodec extends SunCodec {
...
@@ -52,9 +52,6 @@ public class AlawCodec extends SunCodec {
private
static
final
short
seg_end
[]
=
{
0xFF
,
0x1FF
,
0x3FF
,
private
static
final
short
seg_end
[]
=
{
0xFF
,
0x1FF
,
0x3FF
,
0x7FF
,
0xFFF
,
0x1FFF
,
0x3FFF
,
0x7FFF
};
0x7FF
,
0xFFF
,
0x1FFF
,
0x3FFF
,
0x7FFF
};
private
static
final
int
tempBufferSize
=
64
;
private
byte
tempBuffer
[]
=
null
;
/**
/**
* Initializes the decode tables
* Initializes the decode tables
*/
*/
...
@@ -199,12 +196,9 @@ public class AlawCodec extends SunCodec {
...
@@ -199,12 +196,9 @@ public class AlawCodec extends SunCodec {
AudioFormat
inputFormat
=
stream
.
getFormat
();
AudioFormat
inputFormat
=
stream
.
getFormat
();
if
(
inputFormat
.
matches
(
outputFormat
)
)
{
if
(
inputFormat
.
matches
(
outputFormat
)
)
{
cs
=
stream
;
cs
=
stream
;
}
else
{
}
else
{
cs
=
(
AudioInputStream
)
(
new
AlawCodecStream
(
stream
,
outputFormat
));
cs
=
(
AudioInputStream
)
(
new
AlawCodecStream
(
stream
,
outputFormat
));
tempBuffer
=
new
byte
[
tempBufferSize
];
}
}
return
cs
;
return
cs
;
...
@@ -264,6 +258,10 @@ public class AlawCodec extends SunCodec {
...
@@ -264,6 +258,10 @@ public class AlawCodec extends SunCodec {
class
AlawCodecStream
extends
AudioInputStream
{
class
AlawCodecStream
extends
AudioInputStream
{
// tempBuffer required only for encoding (when encode is true)
private
static
final
int
tempBufferSize
=
64
;
private
byte
tempBuffer
[]
=
null
;
/**
/**
* True to encode to a-law, false to decode to linear
* True to encode to a-law, false to decode to linear
*/
*/
...
@@ -303,6 +301,7 @@ public class AlawCodec extends SunCodec {
...
@@ -303,6 +301,7 @@ public class AlawCodec extends SunCodec {
encodeFormat
=
outputFormat
;
encodeFormat
=
outputFormat
;
decodeFormat
=
inputFormat
;
decodeFormat
=
inputFormat
;
PCMIsBigEndian
=
inputFormat
.
isBigEndian
();
PCMIsBigEndian
=
inputFormat
.
isBigEndian
();
tempBuffer
=
new
byte
[
tempBufferSize
];
}
}
if
(
PCMIsBigEndian
)
{
if
(
PCMIsBigEndian
)
{
...
...
test/javax/sound/sampled/FileWriter/AlawEncoderSync.java
0 → 100644
浏览文件 @
4a351471
/**
* @test
* @bug 6938426
* @summary Tests that Alaw encoder works properly in multithreaded environment
* @author Alex Menkov
*/
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.InputStream
;
import
java.util.Arrays
;
import
javax.sound.sampled.AudioFormat
;
import
javax.sound.sampled.AudioInputStream
;
import
javax.sound.sampled.AudioSystem
;
public
class
AlawEncoderSync
{
static
final
int
THREAD_COUNT
=
20
;
static
final
AudioFormat
pcmFormat
=
new
AudioFormat
(
8000
f
,
16
,
2
,
true
,
false
);
static
final
int
STREAM_LENGTH
=
10
;
// in seconds
static
byte
[]
pcmBuffer
;
static
final
AudioFormat
alawFormat
=
new
AudioFormat
(
AudioFormat
.
Encoding
.
ALAW
,
8000
f
,
8
,
2
,
2
,
8000
f
,
false
);
static
final
ConversionThread
[]
threads
=
new
ConversionThread
[
THREAD_COUNT
];
public
static
void
main
(
String
[]
args
)
{
preparePCMBuffer
();
log
(
"pcmStream size: "
+
pcmBuffer
.
length
);
for
(
int
i
=
0
;
i
<
THREAD_COUNT
;
i
++)
{
threads
[
i
]
=
new
ConversionThread
(
i
);
threads
[
i
].
start
();
}
for
(
int
i
=
1
;
i
<
THREAD_COUNT
;
i
++)
{
try
{
threads
[
i
].
join
();
}
catch
(
InterruptedException
ex
)
{
log
(
"Main thread was interrupted, exiting."
);
return
;
}
}
int
failed
=
0
;
log
(
"comparing result arrays..."
);
for
(
int
i
=
1
;
i
<
THREAD_COUNT
;
i
++)
{
if
(!
Arrays
.
equals
(
threads
[
0
].
resultArray
,
threads
[
i
].
resultArray
))
{
failed
++;
log
(
"NOT equals: 0 and "
+
i
);
}
}
if
(
failed
>
0
)
{
throw
new
RuntimeException
(
"test FAILED"
);
}
log
(
"test PASSED."
);
}
static
void
preparePCMBuffer
()
{
pcmBuffer
=
new
byte
[
STREAM_LENGTH
*
(
int
)
pcmFormat
.
getSampleRate
()
*
(
pcmFormat
.
getSampleSizeInBits
()
/
8
)
*
pcmFormat
.
getChannels
()];
for
(
int
i
=
0
;
i
<
pcmBuffer
.
length
;
i
++)
{
pcmBuffer
[
i
]
=
(
byte
)(
Math
.
random
()
*
256.0
-
128.0
);
}
}
static
AudioInputStream
createPCMStream
()
{
InputStream
byteStream
=
new
ByteArrayInputStream
(
pcmBuffer
);
return
new
AudioInputStream
(
byteStream
,
pcmFormat
,
AudioSystem
.
NOT_SPECIFIED
);
}
static
class
ConversionThread
extends
Thread
{
public
final
int
num
;
public
byte
[]
resultArray
=
null
;
public
ConversionThread
(
int
num
)
{
this
.
num
=
num
;
}
@Override
public
void
run
()
{
log
(
"ConversionThread["
+
num
+
"] started."
);
try
{
InputStream
inStream
=
new
ByteArrayInputStream
(
pcmBuffer
);
AudioInputStream
pcmStream
=
new
AudioInputStream
(
inStream
,
pcmFormat
,
AudioSystem
.
NOT_SPECIFIED
);
AudioInputStream
alawStream
=
AudioSystem
.
getAudioInputStream
(
alawFormat
,
pcmStream
);
ByteArrayOutputStream
outStream
=
new
ByteArrayOutputStream
();
int
read
=
0
;
byte
[]
data
=
new
byte
[
4096
];
while
((
read
=
alawStream
.
read
(
data
))
!=
-
1
)
{
outStream
.
write
(
data
,
0
,
read
);
}
alawStream
.
close
();
resultArray
=
outStream
.
toByteArray
();
}
catch
(
Exception
ex
)
{
log
(
"ConversionThread["
+
num
+
"] exception:"
);
log
(
ex
);
}
log
(
"ConversionThread["
+
num
+
"] completed."
);
}
}
static
void
log
(
String
s
)
{
System
.
out
.
println
(
s
);
}
static
void
log
(
Exception
ex
)
{
ex
.
printStackTrace
(
System
.
out
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录