Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_25606643
ijkplayer
提交
36a10e5b
I
ijkplayer
项目概览
qq_25606643
/
ijkplayer
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
ijkplayer
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
36a10e5b
编写于
6月 24, 2014
作者:
Z
Zhang Rui
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
android: support setVolume on AudioTrack
上级
bc58a50c
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
91 addition
and
15 deletion
+91
-15
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/AndroidMediaPlayer.java
...r/src/tv/danmaku/ijk/media/player/AndroidMediaPlayer.java
+5
-0
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/IMediaPlayer.java
...aplayer/src/tv/danmaku/ijk/media/player/IMediaPlayer.java
+2
-0
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
...layer/src/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
+2
-0
ijkmedia/ijkplayer/android/ijkplayer_android.c
ijkmedia/ijkplayer/android/ijkplayer_android.c
+16
-0
ijkmedia/ijkplayer/android/ijkplayer_android.h
ijkmedia/ijkplayer/android/ijkplayer_android.h
+2
-0
ijkmedia/ijkplayer/android/ijkplayer_jni.c
ijkmedia/ijkplayer/android/ijkplayer_jni.c
+29
-15
ijkmedia/ijksdl/android/android_audiotrack.c
ijkmedia/ijksdl/android/android_audiotrack.c
+5
-0
ijkmedia/ijksdl/android/android_audiotrack.h
ijkmedia/ijksdl/android/android_audiotrack.h
+1
-0
ijkmedia/ijksdl/android/ijksdl_aout_android_audiotrack.c
ijkmedia/ijksdl/android/ijksdl_aout_android_audiotrack.c
+21
-0
ijkmedia/ijksdl/ijksdl_aout.c
ijkmedia/ijksdl/ijksdl_aout.c
+6
-0
ijkmedia/ijksdl/ijksdl_aout.h
ijkmedia/ijksdl/ijksdl_aout.h
+2
-0
未找到文件。
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/AndroidMediaPlayer.java
浏览文件 @
36a10e5b
...
...
@@ -200,6 +200,11 @@ public class AndroidMediaPlayer extends SimpleMediaPlayer {
attachInternalListeners
();
}
@Override
public
void
setVolume
(
float
leftVolume
,
float
rightVolume
)
{
mInternalMediaPlayer
.
setVolume
(
leftVolume
,
rightVolume
);
}
@Override
public
MediaInfo
getMediaInfo
()
{
if
(
sMediaInfo
==
null
)
{
...
...
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/IMediaPlayer.java
浏览文件 @
36a10e5b
...
...
@@ -65,6 +65,8 @@ public interface IMediaPlayer {
public
abstract
void
reset
();
public
abstract
void
setVolume
(
float
leftVolume
,
float
rightVolume
);
public
abstract
MediaInfo
getMediaInfo
();
public
abstract
void
setLogEnabled
(
boolean
enable
);
...
...
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
浏览文件 @
36a10e5b
...
...
@@ -400,6 +400,8 @@ public final class IjkMediaPlayer extends SimpleMediaPlayer {
private
native
void
_reset
();
public
native
void
setVolume
(
float
leftVolume
,
float
rightVolume
);
@Override
public
MediaInfo
getMediaInfo
()
{
MediaInfo
mediaInfo
=
new
MediaInfo
();
...
...
ijkmedia/ijkplayer/android/ijkplayer_android.c
浏览文件 @
36a10e5b
...
...
@@ -69,3 +69,19 @@ void ijkmp_android_set_surface(JNIEnv *env, IjkMediaPlayer *mp, jobject android_
pthread_mutex_unlock
(
&
mp
->
mutex
);
MPTRACE
(
"ijkmp_set_android_surface(surface=%p)=void"
,
(
void
*
)
android_surface
);
}
void
ijkmp_android_set_volume
(
JNIEnv
*
env
,
IjkMediaPlayer
*
mp
,
float
left
,
float
right
)
{
if
(
!
mp
)
return
;
MPTRACE
(
"ijkmp_android_set_volume(%f, %f)"
,
left
,
right
);
pthread_mutex_lock
(
&
mp
->
mutex
);
if
(
mp
&&
mp
->
ffplayer
&&
mp
->
ffplayer
->
aout
)
{
SDL_AoutSetStereoVolume
(
mp
->
ffplayer
->
aout
,
left
,
right
);
}
pthread_mutex_unlock
(
&
mp
->
mutex
);
MPTRACE
(
"ijkmp_android_set_volume(%f, %f)=void"
,
left
,
right
);
}
ijkmedia/ijkplayer/android/ijkplayer_android.h
浏览文件 @
36a10e5b
...
...
@@ -31,4 +31,6 @@ IjkMediaPlayer *ijkmp_android_create(int(*msg_loop)(void*));
void
ijkmp_android_set_surface
(
JNIEnv
*
env
,
IjkMediaPlayer
*
mp
,
jobject
android_surface
);
void
ijkmp_android_set_volume
(
JNIEnv
*
env
,
IjkMediaPlayer
*
mp
,
float
left
,
float
right
);
#endif
ijkmedia/ijkplayer/android/ijkplayer_jni.c
浏览文件 @
36a10e5b
...
...
@@ -263,6 +263,19 @@ IjkMediaPlayer_reset(JNIEnv *env, jobject thiz)
ijkmp_dec_ref_p
(
&
mp
);
}
static
void
IjkMediaPlayer_setVolume
(
JNIEnv
*
env
,
jobject
thiz
,
jfloat
leftVolume
,
jfloat
rightVolume
)
{
MPTRACE
(
"IjkMediaPlayer_setVolume"
);
IjkMediaPlayer
*
mp
=
jni_get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: setVolume: null mp"
,
LABEL_RETURN
);
ijkmp_android_set_volume
(
env
,
mp
,
leftVolume
,
rightVolume
);
LABEL_RETURN:
ijkmp_dec_ref_p
(
&
mp
);
}
static
void
IjkMediaPlayer_setAvFormatOption
(
JNIEnv
*
env
,
jobject
thiz
,
jobject
name
,
jobject
value
)
{
...
...
@@ -445,23 +458,24 @@ static JNINativeMethod g_methods[] = {
"(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V"
,
(
void
*
)
IjkMediaPlayer_setDataSourceAndHeaders
},
{
"_setVideoSurface"
,
"(Landroid/view/Surface;)V"
,
(
void
*
)
IjkMediaPlayer_setVideoSurface
},
{
"prepareAsync"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_prepareAsync
},
{
"_start"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_start
},
{
"_stop"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_stop
},
{
"seekTo"
,
"(J)V"
,
(
void
*
)
IjkMediaPlayer_seekTo
},
{
"_pause"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_pause
},
{
"isPlaying"
,
"()Z"
,
(
void
*
)
IjkMediaPlayer_isPlaying
},
{
"getCurrentPosition"
,
"()J"
,
(
void
*
)
IjkMediaPlayer_getCurrentPosition
},
{
"getDuration"
,
"()J"
,
(
void
*
)
IjkMediaPlayer_getDuration
},
{
"_release"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_release
},
{
"_reset"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_reset
},
{
"native_init"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_native_init
},
{
"native_setup"
,
"(Ljava/lang/Object;)V"
,
(
void
*
)
IjkMediaPlayer_native_setup
},
{
"native_finalize"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_native_finalize
},
{
"_setVideoSurface"
,
"(Landroid/view/Surface;)V"
,
(
void
*
)
IjkMediaPlayer_setVideoSurface
},
{
"prepareAsync"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_prepareAsync
},
{
"_start"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_start
},
{
"_stop"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_stop
},
{
"seekTo"
,
"(J)V"
,
(
void
*
)
IjkMediaPlayer_seekTo
},
{
"_pause"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_pause
},
{
"isPlaying"
,
"()Z"
,
(
void
*
)
IjkMediaPlayer_isPlaying
},
{
"getCurrentPosition"
,
"()J"
,
(
void
*
)
IjkMediaPlayer_getCurrentPosition
},
{
"getDuration"
,
"()J"
,
(
void
*
)
IjkMediaPlayer_getDuration
},
{
"_release"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_release
},
{
"_reset"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_reset
},
{
"setVolume"
,
"(FF)V"
,
(
void
*
)
IjkMediaPlayer_setVolume
},
{
"native_init"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_native_init
},
{
"native_setup"
,
"(Ljava/lang/Object;)V"
,
(
void
*
)
IjkMediaPlayer_native_setup
},
{
"native_finalize"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_native_finalize
},
{
"_setAvFormatOption"
,
"(Ljava/lang/String;Ljava/lang/String;)V"
,
(
void
*
)
IjkMediaPlayer_setAvFormatOption
},
{
"_setAvCodecOption"
,
"(Ljava/lang/String;Ljava/lang/String;)V"
,
(
void
*
)
IjkMediaPlayer_setAvCodecOption
},
{
"_setAvCodecOption"
,
"(Ljava/lang/String;Ljava/lang/String;)V"
,
(
void
*
)
IjkMediaPlayer_setAvCodecOption
},
};
JNIEXPORT
jint
JNI_OnLoad
(
JavaVM
*
vm
,
void
*
reserved
)
...
...
ijkmedia/ijksdl/android/android_audiotrack.c
浏览文件 @
36a10e5b
...
...
@@ -263,6 +263,11 @@ static int audiotrack_set_stereo_volume(JNIEnv *env, SDL_AndroidAudioTrack *atra
return
retval
;
}
void
sdl_audiotrack_set_volume
(
JNIEnv
*
env
,
SDL_AndroidAudioTrack
*
atrack
,
float
left_volume
,
float
right_volume
)
{
audiotrack_set_stereo_volume
(
env
,
atrack
,
left_volume
,
right_volume
);
}
SDL_AndroidAudioTrack
*
sdl_audiotrack_new_from_spec
(
JNIEnv
*
env
,
SDL_AndroidAudioTrack_Spec
*
spec
)
{
assert
(
spec
);
...
...
ijkmedia/ijksdl/android/android_audiotrack.h
浏览文件 @
36a10e5b
...
...
@@ -93,6 +93,7 @@ int sdl_audiotrack_get_min_buffer_size(SDL_AndroidAudioTrack* atrack);
void
sdl_audiotrack_play
(
JNIEnv
*
env
,
SDL_AndroidAudioTrack
*
atrack
);
void
sdl_audiotrack_pause
(
JNIEnv
*
env
,
SDL_AndroidAudioTrack
*
atrack
);
void
sdl_audiotrack_flush
(
JNIEnv
*
env
,
SDL_AndroidAudioTrack
*
atrack
);
void
sdl_audiotrack_set_volume
(
JNIEnv
*
env
,
SDL_AndroidAudioTrack
*
atrack
,
float
left_volume
,
float
right_volume
);
void
sdl_audiotrack_stop
(
JNIEnv
*
env
,
SDL_AndroidAudioTrack
*
atrack
);
void
sdl_audiotrack_release
(
JNIEnv
*
env
,
SDL_AndroidAudioTrack
*
atrack
);
int
sdl_audiotrack_reserve_buffer
(
JNIEnv
*
env
,
SDL_AndroidAudioTrack
*
atrack
,
int
len
);
...
...
ijkmedia/ijksdl/android/ijksdl_aout_android_audiotrack.c
浏览文件 @
36a10e5b
...
...
@@ -50,6 +50,10 @@ typedef struct SDL_Aout_Opaque {
volatile
bool
pause_on
;
volatile
bool
abort_request
;
volatile
bool
need_set_volume
;
volatile
float
left_volume
;
volatile
float
right_volume
;
SDL_Thread
*
audio_tid
;
SDL_Thread
_audio_tid
;
}
SDL_Aout_Opaque
;
...
...
@@ -85,6 +89,10 @@ int aout_thread_n(JNIEnv *env, SDL_Aout *aout)
opaque
->
need_flush
=
0
;
sdl_audiotrack_flush
(
env
,
atrack
);
}
if
(
opaque
->
need_set_volume
)
{
opaque
->
need_set_volume
=
0
;
sdl_audiotrack_set_volume
(
env
,
atrack
,
opaque
->
left_volume
,
opaque
->
right_volume
);
}
SDL_UnlockMutex
(
opaque
->
wakeup_mutex
);
audio_cblk
(
userdata
,
buffer
,
copy_size
);
...
...
@@ -201,6 +209,18 @@ void aout_flush_audio(SDL_Aout *aout)
SDL_UnlockMutex
(
opaque
->
wakeup_mutex
);
}
void
aout_set_volume
(
SDL_Aout
*
aout
,
float
left_volume
,
float
right_volume
)
{
SDL_Aout_Opaque
*
opaque
=
aout
->
opaque
;
SDL_LockMutex
(
opaque
->
wakeup_mutex
);
SDLTRACE
(
"aout_flush_audio()"
);
opaque
->
left_volume
=
left_volume
;
opaque
->
right_volume
=
right_volume
;
opaque
->
need_set_volume
=
1
;
SDL_CondSignal
(
opaque
->
wakeup_cond
);
SDL_UnlockMutex
(
opaque
->
wakeup_mutex
);
}
void
aout_close_audio
(
SDL_Aout
*
aout
)
{
SDL_Aout_Opaque
*
opaque
=
aout
->
opaque
;
...
...
@@ -249,6 +269,7 @@ SDL_Aout *SDL_AoutAndroid_CreateForAudioTrack()
aout
->
open_audio
=
aout_open_audio
;
aout
->
pause_audio
=
aout_pause_audio
;
aout
->
flush_audio
=
aout_flush_audio
;
aout
->
set_volume
=
aout_set_volume
;
aout
->
close_audio
=
aout_close_audio
;
return
aout
;
...
...
ijkmedia/ijksdl/ijksdl_aout.c
浏览文件 @
36a10e5b
...
...
@@ -44,6 +44,12 @@ void SDL_AoutFlushAudio(SDL_Aout *aout)
aout
->
flush_audio
(
aout
);
}
void
SDL_AoutSetStereoVolume
(
SDL_Aout
*
aout
,
float
left_volume
,
float
right_volume
)
{
if
(
aout
&&
aout
->
set_volume
)
aout
->
set_volume
(
aout
,
left_volume
,
right_volume
);
}
void
SDL_AoutCloseAudio
(
SDL_Aout
*
aout
)
{
if
(
aout
&&
aout
->
close_audio
)
...
...
ijkmedia/ijksdl/ijksdl_aout.h
浏览文件 @
36a10e5b
...
...
@@ -37,12 +37,14 @@ typedef struct SDL_Aout {
int
(
*
open_audio
)(
SDL_Aout
*
aout
,
SDL_AudioSpec
*
desired
,
SDL_AudioSpec
*
obtained
);
void
(
*
pause_audio
)(
SDL_Aout
*
aout
,
int
pause_on
);
void
(
*
flush_audio
)(
SDL_Aout
*
aout
);
void
(
*
set_volume
)(
SDL_Aout
*
aout
,
float
left
,
float
right
);
void
(
*
close_audio
)(
SDL_Aout
*
aout
);
}
SDL_Aout
;
int
SDL_AoutOpenAudio
(
SDL_Aout
*
aout
,
SDL_AudioSpec
*
desired
,
SDL_AudioSpec
*
obtained
);
void
SDL_AoutPauseAudio
(
SDL_Aout
*
aout
,
int
pause_on
);
void
SDL_AoutFlushAudio
(
SDL_Aout
*
aout
);
void
SDL_AoutSetStereoVolume
(
SDL_Aout
*
aout
,
float
left_volume
,
float
right_volume
);
void
SDL_AoutCloseAudio
(
SDL_Aout
*
aout
);
void
SDL_AoutFree
(
SDL_Aout
*
aout
);
void
SDL_AoutFreeP
(
SDL_Aout
**
paout
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录