Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_25606643
ijkplayer
提交
775b5e79
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,发现更多精彩内容 >>
提交
775b5e79
编写于
6月 24, 2013
作者:
Z
Zhang Rui
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
jni: NewGlobalRef for FindClass
上级
2ebb6a85
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
78 addition
and
31 deletion
+78
-31
ijkmediaplayer/jni/ijkplayer/android/ijkplayer_jni.c
ijkmediaplayer/jni/ijkplayer/android/ijkplayer_jni.c
+10
-5
ijkmediaplayer/jni/ijksdl/android/android_audiotrack.c
ijkmediaplayer/jni/ijksdl/android/android_audiotrack.c
+25
-25
ijkmediaplayer/jni/ijksdl/android/ijksdl_android_jni.c
ijkmediaplayer/jni/ijksdl/android/ijksdl_android_jni.c
+6
-1
ijkmediaplayer/jni/ijksdl/android/ijksdl_inc_internal_android.h
...iaplayer/jni/ijksdl/android/ijksdl_inc_internal_android.h
+31
-0
ijkmediaplayer/jni/ijkutil/ijkutil.h
ijkmediaplayer/jni/ijkutil/ijkutil.h
+6
-0
未找到文件。
ijkmediaplayer/jni/ijkplayer/android/ijkplayer_jni.c
浏览文件 @
775b5e79
...
...
@@ -280,7 +280,7 @@ IjkMediaPlayer_native_finalize(JNIEnv *env, jobject thiz)
inline
static
void
post_event
(
JNIEnv
*
env
,
jobject
weak_this
,
int
what
,
int
arg1
,
int
arg2
)
{
(
*
env
)
->
CallStaticVoidMethod
(
env
,
g_clazz
.
postEventFromNative
,
weak_this
,
what
,
arg1
,
arg2
,
NULL
);
(
*
env
)
->
CallStaticVoidMethod
(
env
,
g_clazz
.
clazz
,
g_clazz
.
postEventFromNative
,
weak_this
,
what
,
arg1
,
arg2
,
NULL
);
}
static
void
message_loop_n
(
JNIEnv
*
env
,
IjkMediaPlayer
*
mp
)
...
...
@@ -393,6 +393,7 @@ static JNINativeMethod g_methods[] = {
JNIEXPORT
jint
JNI_OnLoad
(
JavaVM
*
vm
,
void
*
reserved
)
{
JNIEnv
*
env
=
NULL
;
jclass
clazz
;
g_jvm
=
vm
;
if
((
*
vm
)
->
GetEnv
(
vm
,
(
void
**
)
&
env
,
JNI_VERSION_1_4
)
!=
JNI_OK
)
{
...
...
@@ -402,16 +403,20 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
pthread_mutex_init
(
&
g_clazz
.
mutex
,
NULL
);
g_clazz
.
clazz
=
(
*
env
)
->
FindClass
(
env
,
JNI_CLASS_IJKPLAYER
);
JNI_CHECK_RET
(
g_clazz
.
clazz
,
env
,
NULL
,
NULL
,
-
1
);
clazz
=
(
*
env
)
->
FindClass
(
env
,
JNI_CLASS_IJKPLAYER
);
IJK_CHECK_RET
(
clazz
,
-
1
,
"missing %s"
,
JNI_CLASS_IJKPLAYER
);
// FindClass returns LocalReference
g_clazz
.
clazz
=
(
*
env
)
->
NewGlobalRef
(
env
,
clazz
);
IJK_CHECK_RET
(
clazz
,
-
1
,
"%s NewGlobalRef failed"
,
JNI_CLASS_IJKPLAYER
);
(
*
env
)
->
RegisterNatives
(
env
,
g_clazz
.
clazz
,
g_methods
,
NELEM
(
g_methods
));
g_clazz
.
mNativeMediaPlayer
=
(
*
env
)
->
GetFieldID
(
env
,
g_clazz
.
clazz
,
"mNativeMediaPlayer"
,
"J"
);
JNI_CHECK_RET
(
g_clazz
.
mNativeMediaPlayer
,
env
,
NULL
,
NULL
,
-
1
);
IJK_CHECK_RET
(
g_clazz
.
mNativeMediaPlayer
,
-
1
,
"missing mNativeMediaPlayer"
);
g_clazz
.
postEventFromNative
=
(
*
env
)
->
GetStaticMethodID
(
env
,
g_clazz
.
clazz
,
"postEventFromNative"
,
"(Ljava/lang/Object;IIILjava/lang/Object;)V"
);
JNI_CHECK_RET
(
g_clazz
.
postEventFromNative
,
env
,
NULL
,
NULL
,
-
1
);
IJK_CHECK_RET
(
g_clazz
.
postEventFromNative
,
-
1
,
"missing postEventFromNative"
);
ijkmp_global_init
();
...
...
ijkmediaplayer/jni/ijksdl/android/android_audiotrack.c
浏览文件 @
775b5e79
...
...
@@ -110,40 +110,40 @@ typedef struct audio_track_fields_t {
}
audio_track_fields_t
;
static
audio_track_fields_t
g_clazz
;
#define AT_CHECK_RET(condition__, retval__, ...) \
if (!(condition__)) { \
ALOGE(__VA_ARGS__); \
return (retval__); \
}
int
sdl_audiotrack_global_init
(
JNIEnv
*
env
)
{
g_clazz
.
clazz
=
(
*
env
)
->
FindClass
(
env
,
"android.media.AudioTrack"
);
AT_CHECK_RET
(
g_clazz
.
clazz
,
-
1
,
"missing AudioTrack"
);
jclass
clazz
;
clazz
=
(
*
env
)
->
FindClass
(
env
,
"android/media/AudioTrack"
);
IJK_CHECK_RET
(
clazz
,
-
1
,
"missing AudioTrack"
);
// FindClass returns LocalReference
g_clazz
.
clazz
=
(
*
env
)
->
NewGlobalRef
(
env
,
clazz
);
IJK_CHECK_RET
(
clazz
,
-
1
,
"AudioTrack NewGlobalRef failed"
);
g_clazz
.
constructor
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"<init>"
,
"(IIIIII)V"
);
AT
_CHECK_RET
(
g_clazz
.
constructor
,
-
1
,
"missing AudioTrack.<init>"
);
IJK
_CHECK_RET
(
g_clazz
.
constructor
,
-
1
,
"missing AudioTrack.<init>"
);
g_clazz
.
getMinBufferSize
=
(
*
env
)
->
GetStaticMethodID
(
env
,
g_clazz
.
clazz
,
"getMinBufferSize"
,
"(III)
V
"
);
AT
_CHECK_RET
(
g_clazz
.
getMinBufferSize
,
-
1
,
"missing AudioTrack.getMinBufferSize"
);
g_clazz
.
getMinBufferSize
=
(
*
env
)
->
GetStaticMethodID
(
env
,
g_clazz
.
clazz
,
"getMinBufferSize"
,
"(III)
I
"
);
IJK
_CHECK_RET
(
g_clazz
.
getMinBufferSize
,
-
1
,
"missing AudioTrack.getMinBufferSize"
);
g_clazz
.
play
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"play"
,
"(
V
)V"
);
AT
_CHECK_RET
(
g_clazz
.
play
,
-
1
,
"missing AudioTrack.play"
);
g_clazz
.
play
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"play"
,
"()V"
);
IJK
_CHECK_RET
(
g_clazz
.
play
,
-
1
,
"missing AudioTrack.play"
);
g_clazz
.
pause
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"pause"
,
"(
V
)V"
);
AT
_CHECK_RET
(
g_clazz
.
pause
,
-
1
,
"missing AudioTrack.pause"
);
g_clazz
.
pause
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"pause"
,
"()V"
);
IJK
_CHECK_RET
(
g_clazz
.
pause
,
-
1
,
"missing AudioTrack.pause"
);
g_clazz
.
flush
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"flush"
,
"(
V
)V"
);
JNI_CHECK_RET
(
g_clazz
.
flush
,
env
,
NULL
,
NULL
,
-
1
);
g_clazz
.
flush
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"flush"
,
"()V"
);
IJK_CHECK_RET
(
g_clazz
.
pause
,
-
1
,
"missing AudioTrack.flush"
);
g_clazz
.
stop
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"stop"
,
"(
V
)V"
);
JNI_CHECK_RET
(
g_clazz
.
stop
,
env
,
NULL
,
NULL
,
-
1
);
g_clazz
.
stop
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"stop"
,
"()V"
);
IJK_CHECK_RET
(
g_clazz
.
pause
,
-
1
,
"missing AudioTrack.stop"
);
g_clazz
.
release
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"release"
,
"(
V
)V"
);
JNI_CHECK_RET
(
g_clazz
.
release
,
env
,
NULL
,
NULL
,
-
1
);
g_clazz
.
release
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"release"
,
"()V"
);
IJK_CHECK_RET
(
g_clazz
.
pause
,
-
1
,
"missing AudioTrack.release"
);
g_clazz
.
write_byte
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"write"
,
"([BII)
V
"
);
JNI_CHECK_RET
(
g_clazz
.
write_byte
,
env
,
NULL
,
NULL
,
-
1
);
g_clazz
.
write_byte
=
(
*
env
)
->
GetMethodID
(
env
,
g_clazz
.
clazz
,
"write"
,
"([BII)
I
"
);
IJK_CHECK_RET
(
g_clazz
.
pause
,
-
1
,
"missing AudioTrack.write"
);
return
0
;
}
...
...
@@ -205,8 +205,8 @@ SDL_AndroidAudioTrack *sdl_audiotrack_new_from_spec(JNIEnv *env, SDL_AndroidAudi
}
jobject
thiz
=
(
*
env
)
->
NewObject
(
env
,
g_clazz
.
clazz
,
g_clazz
.
constructor
,
spec
->
stream_type
,
spec
->
sample_rate_in_hz
,
spec
->
channel_config
,
spec
->
audio_format
,
min_buffer_size
,
spec
->
mode
);
(
int
)
spec
->
stream_type
,
(
int
)
spec
->
sample_rate_in_hz
,
(
int
)
spec
->
channel_config
,
(
int
)
spec
->
audio_format
,
(
int
)
min_buffer_size
,
(
int
)
spec
->
mode
);
if
(
!
thiz
||
(
*
env
)
->
ExceptionCheck
(
env
))
{
ALOGE
(
"sdl_audiotrack_new: NewObject: Exception:"
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
{
...
...
ijkmediaplayer/jni/ijksdl/android/ijksdl_android_jni.c
浏览文件 @
775b5e79
...
...
@@ -23,7 +23,8 @@
#include "ijksdl_android_jni.h"
#include "../ijksdl_inc_internal.h"
#include "ijksdl_inc_internal_android.h"
#include "android_audiotrack.h"
JavaVM
*
g_jvm
;
...
...
@@ -56,6 +57,7 @@ jint SDL_AndroidJni_DetachCurrentThread()
JNIEXPORT
jint
JNICALL
JNI_OnLoad
(
JavaVM
*
vm
,
void
*
reserved
)
{
int
retval
;
JNIEnv
*
env
=
NULL
;
g_jvm
=
vm
;
...
...
@@ -63,6 +65,9 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
return
-
1
;
}
retval
=
sdl_audiotrack_global_init
(
env
);
JNI_CHECK_RET
(
retval
==
0
,
env
,
NULL
,
NULL
,
-
1
);
return
JNI_VERSION_1_4
;
}
...
...
ijkmediaplayer/jni/ijksdl/android/ijksdl_inc_internal_android.h
0 → 100644
浏览文件 @
775b5e79
/*
* ijksdl_inc_internal_android.h
*
* Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
*
* This file is part of ijkPlayer.
*
* ijkPlayer is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* ijkPlayer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with ijkPlayer; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef IJKPLAYER__IJKSDL_INC_INTERNAL_ANDROID_H
#define IJKPLAYER__IJKSDL_INC_INTERNAL_ANDROID_H
#include <stdint.h>
#include "../ijksdl_inc_internal.h"
#include "ijkutil/ijkutil_android.h"
#endif
ijkmediaplayer/jni/ijkutil/ijkutil.h
浏览文件 @
775b5e79
...
...
@@ -38,4 +38,10 @@
#define IJKALIGN(x, align) ((( x ) + (align) - 1) / (align) * (align))
#endif
#define IJK_CHECK_RET(condition__, retval__, ...) \
if (!(condition__)) { \
ALOGE(__VA_ARGS__); \
return (retval__); \
}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录