Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_25606643
ijkplayer
提交
d557c702
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,发现更多精彩内容 >>
提交
d557c702
编写于
6月 27, 2013
作者:
Z
Zhang Rui
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ijksdl: setup thread env and audo destory
上级
5da75245
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
46 addition
and
26 deletion
+46
-26
ijkmediaplayer/jni/ijksdl/android/ijksdl_android_jni.c
ijkmediaplayer/jni/ijksdl/android/ijksdl_android_jni.c
+26
-9
ijkmediaplayer/jni/ijksdl/android/ijksdl_android_jni.h
ijkmediaplayer/jni/ijksdl/android/ijksdl_android_jni.h
+1
-3
ijkmediaplayer/jni/ijksdl/android/ijksdl_aout_android_audiotrack.c
...layer/jni/ijksdl/android/ijksdl_aout_android_audiotrack.c
+19
-14
未找到文件。
ijkmediaplayer/jni/ijksdl/android/ijksdl_android_jni.c
浏览文件 @
d557c702
...
...
@@ -26,25 +26,31 @@
#include "ijksdl_inc_internal_android.h"
#include "android_audiotrack.h"
JavaVM
*
g_jvm
;
static
JavaVM
*
g_jvm
;
static
pthread_key_t
g_thread_key
;
static
pthread_once_t
g_key_once
=
PTHREAD_ONCE_INIT
;
JavaVM
*
SDL_AndroidJni_GetJvm
()
{
return
g_jvm
;
}
jint
SDL_AndroidJni_AttachCurrentThread
(
JNIEnv
**
p_env
)
static
void
SDL_AndroidJni_ThreadDestroyed
(
void
*
value
)
{
J
avaVM
*
jvm
=
g_jvm
;
if
(
!
jvm
)
{
ALOGE
(
"SDL_AndroidJni_GetJvm: AttachCurrentThread: NULL jvm"
);
return
-
1
;
J
NIEnv
*
env
=
(
JNIEnv
*
)
value
;
if
(
env
!=
NULL
)
{
(
*
g_jvm
)
->
DetachCurrentThread
(
g_jvm
);
pthread_setspecific
(
g_thread_key
,
NULL
)
;
}
}
return
(
*
jvm
)
->
AttachCurrentThread
(
jvm
,
p_env
,
NULL
);
static
void
make_thread_key
()
{
pthread_key_create
(
&
g_thread_key
,
SDL_AndroidJni_ThreadDestroyed
);
}
jint
SDL_AndroidJni_
DetachCurrentThread
(
)
jint
SDL_AndroidJni_
SetupThreadEnv
(
JNIEnv
**
p_env
)
{
JavaVM
*
jvm
=
g_jvm
;
if
(
!
jvm
)
{
...
...
@@ -52,7 +58,18 @@ jint SDL_AndroidJni_DetachCurrentThread()
return
-
1
;
}
return
(
*
jvm
)
->
DetachCurrentThread
(
jvm
);
pthread_once
(
&
g_key_once
,
make_thread_key
);
JNIEnv
*
env
=
(
JNIEnv
*
)
pthread_getspecific
(
g_thread_key
);
if
(
!
env
)
{
if
((
*
jvm
)
->
AttachCurrentThread
(
jvm
,
&
env
,
NULL
)
==
JNI_OK
)
{
pthread_setspecific
(
g_thread_key
,
env
);
*
p_env
=
env
;
return
0
;
}
}
return
-
1
;
}
JNIEXPORT
jint
JNICALL
JNI_OnLoad
(
JavaVM
*
vm
,
void
*
reserved
)
...
...
ijkmediaplayer/jni/ijksdl/android/ijksdl_android_jni.h
浏览文件 @
d557c702
...
...
@@ -28,8 +28,6 @@
JavaVM
*
SDL_AndroidJni_GetJvm
();
jint
SDL_AndroidJni_AttachCurrentThread
(
JNIEnv
**
p_env
);
jint
SDL_AndroidJni_DetachCurrentThread
();
jint
SDL_AndroidJni_SetupThreadEnv
(
JNIEnv
**
p_env
);
#endif
ijkmediaplayer/jni/ijksdl/android/ijksdl_aout_android_audiotrack.c
浏览文件 @
d557c702
...
...
@@ -92,15 +92,12 @@ int aout_thread(void *arg)
// SDL_Aout_Opaque *opaque = aout->opaque;
JNIEnv
*
env
=
NULL
;
if
(
JNI_OK
!=
SDL_AndroidJni_
AttachCurrentThread
(
&
env
))
{
ALOGE
(
"aout_thread:
AttachCurrentThread
: failed"
);
if
(
JNI_OK
!=
SDL_AndroidJni_
SetupThreadEnv
(
&
env
))
{
ALOGE
(
"aout_thread:
SDL_AndroidJni_SetupEnv
: failed"
);
return
-
1
;
}
int
retval
=
aout_thread_n
(
env
,
aout
);
SDL_AndroidJni_DetachCurrentThread
();
return
retval
;
return
aout_thread_n
(
env
,
aout
);
}
int
aout_open_audio_n
(
JNIEnv
*
env
,
SDL_Aout
*
aout
,
SDL_AudioSpec
*
desired
,
SDL_AudioSpec
*
obtained
)
...
...
@@ -110,12 +107,22 @@ int aout_open_audio_n(JNIEnv *env, SDL_Aout *aout, SDL_AudioSpec *desired, SDL_A
opaque
->
spec
=
*
desired
;
opaque
->
atrack
=
sdl_audiotrack_new_from_sdl_spec
(
env
,
desired
);
if
(
!
opaque
->
atrack
)
if
(
!
opaque
->
atrack
)
{
ALOGE
(
"aout_open_audio_n: failed to new AudioTrcak()"
);
return
-
1
;
}
opaque
->
buffer_size
=
sdl_audiotrack_get_min_buffer_size
(
opaque
->
atrack
);
if
(
opaque
->
buffer_size
<=
0
)
{
ALOGE
(
"aout_open_audio_n: failed to getMinBufferSize()"
);
sdl_audiotrack_free
(
env
,
opaque
->
atrack
);
opaque
->
atrack
=
NULL
;
return
-
1
;
}
opaque
->
buffer
=
malloc
(
opaque
->
buffer_size
);
if
(
!
opaque
->
buffer
)
{
ALOGE
(
"aout_open_audio_n: failed to allocate buffer"
);
sdl_audiotrack_free
(
env
,
opaque
->
atrack
);
opaque
->
atrack
=
NULL
;
return
-
1
;
...
...
@@ -130,28 +137,26 @@ int aout_open_audio_n(JNIEnv *env, SDL_Aout *aout, SDL_AudioSpec *desired, SDL_A
opaque
->
abort_request
=
0
;
opaque
->
audio_tid
=
SDL_CreateThreadEx
(
&
opaque
->
_audio_tid
,
aout_thread
,
aout
);
if
(
!
opaque
->
audio_tid
)
{
ALOGE
(
"aout_open_audio_n: failed to create audio thread"
);
sdl_audiotrack_free
(
env
,
opaque
->
atrack
);
opaque
->
atrack
=
NULL
;
return
-
1
;
}
return
0
;
SDLTRACE
(
"aout_open_audio_n()=%d"
,
opaque
->
buffer_size
);
return
opaque
->
buffer_size
;
}
int
aout_open_audio
(
SDL_Aout
*
aout
,
SDL_AudioSpec
*
desired
,
SDL_AudioSpec
*
obtained
)
{
// SDL_Aout_Opaque *opaque = aout->opaque;
JNIEnv
*
env
=
NULL
;
if
(
JNI_OK
!=
SDL_AndroidJni_
AttachCurrentThread
(
&
env
))
{
if
(
JNI_OK
!=
SDL_AndroidJni_
SetupThreadEnv
(
&
env
))
{
ALOGE
(
"aout_open_audio: AttachCurrentThread: failed"
);
return
-
1
;
}
int
retval
=
aout_open_audio_n
(
env
,
aout
,
desired
,
obtained
);
// FIXME: 1 SDL_AndroidJni_DetachCurrentThread() ?
SDL_AndroidJni_DetachCurrentThread
();
return
retval
;
return
aout_open_audio_n
(
env
,
aout
,
desired
,
obtained
);
}
void
aout_pause_audio
(
SDL_Aout
*
aout
,
int
pause_on
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录