Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
030044ba
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看板
提交
030044ba
编写于
3月 10, 2020
作者:
S
serb
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8238925: Enhance WAV file playback
Reviewed-by: prr, amenkov, rhalade, mschoene, mbalao, andrew
上级
c0c93f64
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
29 addition
and
14 deletion
+29
-14
src/share/classes/com/sun/media/sound/DirectAudioDevice.java
src/share/classes/com/sun/media/sound/DirectAudioDevice.java
+20
-8
src/share/classes/com/sun/media/sound/Toolkit.java
src/share/classes/com/sun/media/sound/Toolkit.java
+9
-6
未找到文件。
src/share/classes/com/sun/media/sound/DirectAudioDevice.java
浏览文件 @
030044ba
/*
* Copyright (c) 2002, 20
13
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 20
20
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -1121,7 +1121,7 @@ final class DirectAudioDevice extends AbstractMixer {
public
void
open
(
AudioInputStream
stream
)
throws
LineUnavailableException
,
IOException
{
// $$fb part of fix for 4679187: Clip.open() throws unexpected Exceptions
Toolkit
.
isFullySpecifiedAudioFormat
(
format
);
Toolkit
.
isFullySpecifiedAudioFormat
(
stream
.
getFormat
()
);
synchronized
(
mixer
)
{
if
(
Printer
.
trace
)
Printer
.
trace
(
"> DirectClip.open(stream)"
);
...
...
@@ -1135,11 +1135,18 @@ final class DirectAudioDevice extends AbstractMixer {
if
(
Printer
.
debug
)
Printer
.
debug
(
"DirectClip: open(AIS): lengthInFrames: "
+
lengthInFrames
);
int
bytesRead
=
0
;
int
frameSize
=
stream
.
getFormat
().
getFrameSize
();
if
(
lengthInFrames
!=
AudioSystem
.
NOT_SPECIFIED
)
{
// read the data from the stream into an array in one fell swoop.
int
arraysize
=
lengthInFrames
*
stream
.
getFormat
().
getFrameSize
();
int
arraysize
=
lengthInFrames
*
frameSize
;
if
(
arraysize
<
0
)
{
throw
new
IllegalArgumentException
(
"Audio data < 0"
);
}
try
{
streamData
=
new
byte
[
arraysize
];
}
catch
(
OutOfMemoryError
e
)
{
throw
new
IOException
(
"Audio data is too big"
);
}
int
bytesRemaining
=
arraysize
;
int
thisRead
=
0
;
while
(
bytesRemaining
>
0
&&
thisRead
>=
0
)
{
...
...
@@ -1157,9 +1164,14 @@ final class DirectAudioDevice extends AbstractMixer {
// we use a slightly modified version of ByteArrayOutputStream
// to get direct access to the byte array (we don't want a new array
// to be allocated)
int
MAX_READ_LIMIT
=
16384
;
int
maxReadLimit
=
Math
.
max
(
16384
,
frameSize
)
;
DirectBAOS
dbaos
=
new
DirectBAOS
();
byte
tmp
[]
=
new
byte
[
MAX_READ_LIMIT
];
byte
[]
tmp
;
try
{
tmp
=
new
byte
[
maxReadLimit
];
}
catch
(
OutOfMemoryError
e
)
{
throw
new
IOException
(
"Audio data is too big"
);
}
int
thisRead
=
0
;
while
(
thisRead
>=
0
)
{
thisRead
=
stream
.
read
(
tmp
,
0
,
tmp
.
length
);
...
...
@@ -1173,7 +1185,7 @@ final class DirectAudioDevice extends AbstractMixer {
}
// while
streamData
=
dbaos
.
getInternalBuffer
();
}
lengthInFrames
=
bytesRead
/
stream
.
getFormat
().
getFrameSize
()
;
lengthInFrames
=
bytesRead
/
frameSize
;
if
(
Printer
.
debug
)
Printer
.
debug
(
"Read to end of stream. lengthInFrames: "
+
lengthInFrames
);
...
...
src/share/classes/com/sun/media/sound/Toolkit.java
浏览文件 @
030044ba
/*
* Copyright (c) 1999, 20
13
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 20
20
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -154,6 +154,14 @@ public final class Toolkit {
}
static
void
isFullySpecifiedAudioFormat
(
AudioFormat
format
)
{
// Our code requires a positive frame size, that's probably is not
// necessary for non-linear encodings, but for now
// IllegalArgumentException is better than ArithmeticException
if
(
format
.
getFrameSize
()
<=
0
)
{
throw
new
IllegalArgumentException
(
"invalid frame size: "
+((
format
.
getFrameSize
()
==
-
1
)
?
"NOT_SPECIFIED"
:
String
.
valueOf
(
format
.
getFrameSize
())));
}
if
(!
format
.
getEncoding
().
equals
(
AudioFormat
.
Encoding
.
PCM_SIGNED
)
&&
!
format
.
getEncoding
().
equals
(
AudioFormat
.
Encoding
.
PCM_UNSIGNED
)
&&
!
format
.
getEncoding
().
equals
(
AudioFormat
.
Encoding
.
ULAW
)
...
...
@@ -176,11 +184,6 @@ public final class Toolkit {
+((
format
.
getSampleSizeInBits
()==-
1
)?
"NOT_SPECIFIED"
:
String
.
valueOf
(
format
.
getSampleSizeInBits
())));
}
if
(
format
.
getFrameSize
()
<=
0
)
{
throw
new
IllegalArgumentException
(
"invalid frame size: "
+((
format
.
getFrameSize
()==-
1
)?
"NOT_SPECIFIED"
:
String
.
valueOf
(
format
.
getFrameSize
())));
}
if
(
format
.
getChannels
()
<=
0
)
{
throw
new
IllegalArgumentException
(
"invalid number of channels: "
+((
format
.
getChannels
()==-
1
)?
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录