Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
NotesChapter
ijkplayer
提交
e5431347
I
ijkplayer
项目概览
NotesChapter
/
ijkplayer
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
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,发现更多精彩内容 >>
提交
e5431347
编写于
6月 16, 2013
作者:
Z
Zhang Rui
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ijkplayer: setup SDL_Vout in ijkplayer_jni.c
上级
423f806a
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
82 addition
and
32 deletion
+82
-32
ijkmediaplayer/jni/ijkplayer/Android.mk
ijkmediaplayer/jni/ijkplayer/Android.mk
+1
-1
ijkmediaplayer/jni/ijkplayer/ff_ffplay.c
ijkmediaplayer/jni/ijkplayer/ff_ffplay.c
+1
-1
ijkmediaplayer/jni/ijkplayer/ff_ffplay_def.h
ijkmediaplayer/jni/ijkplayer/ff_ffplay_def.h
+4
-2
ijkmediaplayer/jni/ijkplayer/ijkplayer.c
ijkmediaplayer/jni/ijkplayer/ijkplayer.c
+13
-2
ijkmediaplayer/jni/ijkplayer/ijkplayer.h
ijkmediaplayer/jni/ijkplayer/ijkplayer.h
+6
-4
ijkmediaplayer/jni/ijkplayer/ijkplayer_jni.c
ijkmediaplayer/jni/ijkplayer/ijkplayer_jni.c
+57
-22
未找到文件。
ijkmediaplayer/jni/ijkplayer/Android.mk
浏览文件 @
e5431347
...
...
@@ -21,7 +21,7 @@ LOCAL_PATH := $(call my-dir)
include
$(CLEAR_VARS)
LOCAL_C_CFLAGS
+=
-std
=
c99
LOCAL_LDLIBS
+=
-llog
LOCAL_LDLIBS
+=
-llog
-landroid
LOCAL_C_INCLUDES
+=
$(LOCAL_PATH)
LOCAL_C_INCLUDES
+=
$(MY_APP_FFMPEG_INCLUDE_PATH)
...
...
ijkmediaplayer/jni/ijkplayer/ff_ffplay.c
浏览文件 @
e5431347
...
...
@@ -512,7 +512,7 @@ static int video_open(FFPlayer *ffp, int force_set_video_mode, VideoPicture *vp)
is
->
height
==
ffp
->
screen
->
h
&&
ffp
->
screen
->
h
==
h
&&
!
force_set_video_mode
)
return
0
;
ffp
->
screen
=
SDL_SetVideoMode
(
w
,
h
,
0
,
flags
);
SDL_Vout_GetSurface
(
ffp
->
vout
,
&
ffp
->
screen
,
w
,
h
,
0
);
if
(
!
ffp
->
screen
)
{
fprintf
(
stderr
,
"SDL: could not set video mode - exiting
\n
"
);
return
-
1
;
...
...
ijkmediaplayer/jni/ijkplayer/ff_ffplay_def.h
浏览文件 @
e5431347
...
...
@@ -381,9 +381,10 @@ typedef struct FFPlayer {
int
is_full_screen
;
#endif
int64_t
audio_callback_time
;
SDL_Surface
*
screen
;
SDL_
Vout
Surface
*
screen
;
/* extra fields */
SDL_Vout
*
vout
;
int
sar_num
;
int
sar_den
;
...
...
@@ -445,10 +446,11 @@ inline static void ijkff_reset(FFPlayer *ffp)
/* current context */
ffp
->
audio_callback_time
=
0
;
SDL_FreeSurface
(
ffp
->
screen
);
SDL_
Vout_
FreeSurface
(
ffp
->
screen
);
ffp
->
screen
=
NULL
;
/* extra fields */
ffp
->
vout
=
NULL
;
/* reset outside */
ffp
->
sar_num
=
0
;
ffp
->
sar_den
=
0
;
}
...
...
ijkmediaplayer/jni/ijkplayer/ijkplayer.c
浏览文件 @
e5431347
...
...
@@ -44,16 +44,17 @@ IjkMediaPlayer *ijkmp_create()
}
memset
(
mp
,
0
,
sizeof
(
IjkMediaPlayer
));
mp
->
ffplayer
=
malloc
(
sizeof
(
FFPlayer
));
mp
->
ffplayer
=
(
FFPlayer
*
)
malloc
(
sizeof
(
FFPlayer
));
if
(
!
mp
)
{
free
(
mp
);
return
NULL
;
}
memset
(
mp
->
ffplayer
,
0
,
sizeof
(
FFPlayer
));
FFPlayer
*
ffp
=
(
FFPlayer
*
)
&
mp
->
ffplayer
;
FFPlayer
*
ffp
=
&
mp
->
ffplayer
;
ijkff_reset
(
ffp
);
ijkmp_inc_ref
(
mp
);
return
mp
;
}
...
...
@@ -161,3 +162,13 @@ void ijkmp_reset(IjkMediaPlayer *mp)
{
// FIXME: implement
}
void
ijkmp_set_vout
(
IjkMediaPlayer
*
mp
,
SDL_Vout
*
vout
)
{
mp
->
ffplayer
->
vout
=
vout
;
}
SDL_Vout
*
ijkmp_get_vout
(
IjkMediaPlayer
*
mp
)
{
return
mp
->
ffplayer
->
vout
;
}
ijkmediaplayer/jni/ijkplayer/ijkplayer.h
浏览文件 @
e5431347
...
...
@@ -26,13 +26,15 @@
#include <stdbool.h>
struct
IjkMediaPlayer
;
typedef
struct
FFPlayer
FFPlayer
;
typedef
struct
SDL_Vout
SDL_Vout
;
typedef
struct
IjkMediaPlayer
{
volatile
int
ref_count
;
void
*
ffplayer
;
FFPlayer
*
ffplayer
;
}
IjkMediaPlayer
;
// ref_count is
0
after open
// ref_count is
1
after open
IjkMediaPlayer
*
ijkmp_create
();
void
ijkmp_global_init
();
...
...
@@ -61,7 +63,7 @@ int ijkmp_get_current_position(IjkMediaPlayer *mp);
int
ijkmp_get_duration
(
IjkMediaPlayer
*
mp
);
void
ijkmp_reset
(
IjkMediaPlayer
*
mp
);
// android api
void
ijkmp_set_video_surface
(
IjkMediaPlayer
*
mp
,
void
*
surface
);
void
ijkmp_set_vout
(
IjkMediaPlayer
*
mp
,
SDL_Vout
*
vout
);
SDL_Vout
*
ijkmp_get_vout
(
IjkMediaPlayer
*
mp
);
#endif
ijkmediaplayer/jni/ijkplayer/ijkplayer_jni.c
浏览文件 @
e5431347
...
...
@@ -24,6 +24,7 @@
#include <string.h>
#include <pthread.h>
#include <jni.h>
#include "ijksdl/ijksdl.h"
#include "ijkutil/ijkutil.h"
#include "ijkplayer.h"
...
...
@@ -42,7 +43,7 @@ typedef struct player_fields_t {
}
player_fields_t
;
static
player_fields_t
g_clazz
;
static
IjkMediaPlayer
*
get_media_player
(
JNIEnv
*
env
,
jobject
thiz
)
static
IjkMediaPlayer
*
jni_
get_media_player
(
JNIEnv
*
env
,
jobject
thiz
)
{
pthread_mutex_lock
(
&
g_clazz
.
mutex
);
...
...
@@ -55,7 +56,7 @@ static IjkMediaPlayer *get_media_player(JNIEnv* env, jobject thiz)
return
mp
;
}
static
IjkMediaPlayer
*
set_media_player
(
JNIEnv
*
env
,
jobject
thiz
,
IjkMediaPlayer
*
mp
)
static
IjkMediaPlayer
*
jni_
set_media_player
(
JNIEnv
*
env
,
jobject
thiz
,
IjkMediaPlayer
*
mp
)
{
pthread_mutex_lock
(
&
g_clazz
.
mutex
);
...
...
@@ -77,11 +78,11 @@ static IjkMediaPlayer *set_media_player(JNIEnv* env, jobject thiz, IjkMediaPlaye
static
void
IjkMediaPlayer_setDataSourceAndHeaders
(
JNIEnv
*
env
,
jobject
thiz
,
jstring
path
,
jobjectArray
keys
,
jobjectArray
values
)
JNIEnv
*
env
,
jobject
thiz
,
jstring
path
,
jobjectArray
keys
,
jobjectArray
values
)
{
const
char
*
c_path
=
NULL
;
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
path
,
env
,
"java/lang/IllegalArgumentException"
,
"mpjni: setDataSource: null path"
,
LABEL_RETURN
);
JNI_CHECK_GOTO
(
mp
,
env
,
"java/lang/IllegalStateException"
,
"mpjni: setDataSource: null mp"
,
LABEL_RETURN
);
...
...
@@ -99,19 +100,23 @@ IjkMediaPlayer_setDataSourceAndHeaders(
static
void
IjkMediaPlayer_setVideoSurface
(
JNIEnv
*
env
,
jobject
thiz
,
jobject
jsurface
)
{
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: setVideoSurface: null mp"
,
LABEL_RETURN
);
// FIXME: implement
SDL_Vout
*
vout
=
ijkmp_get_vout
(
mp
);
assert
(
vout
);
SDL_VoutAndroid_SetAndroidSurface
(
vout
,
env
,
jsurface
);
LABEL_RETURN:
ijkmp_dec_ref
(
&
mp
);
return
;
}
static
void
IjkMediaPlayer_prepareAsync
(
JNIEnv
*
env
,
jobject
thiz
)
{
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
"java/lang/IllegalStateException"
,
"mpjni: prepareAsync: null mp"
,
LABEL_RETURN
);
ijkmp_prepare_async
(
mp
);
...
...
@@ -123,7 +128,7 @@ IjkMediaPlayer_prepareAsync(JNIEnv *env, jobject thiz)
static
void
IjkMediaPlayer_start
(
JNIEnv
*
env
,
jobject
thiz
)
{
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
"java/lang/IllegalStateException"
,
"mpjni: start: null mp"
,
LABEL_RETURN
);
ijkmp_start
(
mp
);
...
...
@@ -135,7 +140,7 @@ IjkMediaPlayer_start(JNIEnv *env, jobject thiz)
static
void
IjkMediaPlayer_stop
(
JNIEnv
*
env
,
jobject
thiz
)
{
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
"java/lang/IllegalStateException"
,
"mpjni: stop: null mp"
,
LABEL_RETURN
);
ijkmp_stop
(
mp
);
...
...
@@ -147,7 +152,7 @@ IjkMediaPlayer_stop(JNIEnv *env, jobject thiz)
static
void
IjkMediaPlayer_pause
(
JNIEnv
*
env
,
jobject
thiz
)
{
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
"java/lang/IllegalStateException"
,
"mpjni: pause: null mp"
,
LABEL_RETURN
);
ijkmp_pause
(
mp
);
...
...
@@ -160,7 +165,7 @@ static int
IjkMediaPlayer_getVideoWidth
(
JNIEnv
*
env
,
jobject
thiz
)
{
int
retval
=
0
;
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: getVideoWidth: null mp"
,
LABEL_RETURN
);
retval
=
ijkmp_get_video_width
(
mp
);
...
...
@@ -174,7 +179,7 @@ static int
IjkMediaPlayer_getVideoHeight
(
JNIEnv
*
env
,
jobject
thiz
)
{
int
retval
=
0
;
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: getVideoHeight: null mp"
,
LABEL_RETURN
);
retval
=
ijkmp_get_video_height
(
mp
);
...
...
@@ -187,7 +192,7 @@ IjkMediaPlayer_getVideoHeight(JNIEnv *env, jobject thiz)
static
void
IjkMediaPlayer_seekTo
(
JNIEnv
*
env
,
jobject
thiz
,
int
msec
)
{
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
"java/lang/IllegalStateException"
,
"mpjni: seekTo: null mp"
,
LABEL_RETURN
);
ijkmp_seek_to
(
mp
,
msec
);
...
...
@@ -200,7 +205,7 @@ static jboolean
IjkMediaPlayer_isPlaying
(
JNIEnv
*
env
,
jobject
thiz
)
{
jboolean
retval
=
JNI_FALSE
;
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: isPlaying: null mp"
,
LABEL_RETURN
);
retval
=
ijkmp_is_playing
(
mp
)
?
JNI_TRUE
:
JNI_FALSE
;
...
...
@@ -214,7 +219,7 @@ static int
IjkMediaPlayer_getCurrentPosition
(
JNIEnv
*
env
,
jobject
thiz
)
{
int
retval
=
0
;
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: getCurrentPosition: null mp"
,
LABEL_RETURN
);
retval
=
ijkmp_get_current_position
(
mp
);
...
...
@@ -228,7 +233,7 @@ static int
IjkMediaPlayer_getDuration
(
JNIEnv
*
env
,
jobject
thiz
)
{
int
retval
=
0
;
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: getDuration: null mp"
,
LABEL_RETURN
);
retval
=
ijkmp_get_duration
(
mp
);
...
...
@@ -241,21 +246,30 @@ IjkMediaPlayer_getDuration(JNIEnv *env, jobject thiz)
static
void
IjkMediaPlayer_release
(
JNIEnv
*
env
,
jobject
thiz
)
{
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: release: null mp"
,
LABEL_RETURN
);
IjkMediaPlayer
*
mp
=
jni_get_media_player
(
env
,
thiz
);
if
(
!
mp
)
return
;
// explicit close mp
ijkmp_shutdown
(
mp
);
SDL_Vout
*
vout
=
ijkmp_get_vout
(
mp
);
if
(
vout
)
{
ijkmp_set_vout
(
mp
,
NULL
);
SDL_Vout_Free
(
vout
);
}
LABEL_RETURN:
ijkmp_dec_ref
(
&
mp
);
ijkmp_dec_ref
(
&
mp
);
jni_set_media_player
(
env
,
thiz
,
NULL
);
}
static
void
IjkMediaPlayer_reset
(
JNIEnv
*
env
,
jobject
thiz
)
{
// FIXME: consider create new MediaPlayer
IjkMediaPlayer
*
mp
=
get_media_player
(
env
,
thiz
);
IjkMediaPlayer
*
mp
=
jni_
get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: reset: null mp"
,
LABEL_RETURN
);
ijkmp_reset
(
mp
);
...
...
@@ -273,13 +287,34 @@ IjkMediaPlayer_native_init(JNIEnv *env)
static
void
IjkMediaPlayer_native_setup
(
JNIEnv
*
env
,
jobject
thiz
,
jobject
weak_this
)
{
// FIXME: implement
SDL_Vout
*
vout
=
NULL
;
IjkMediaPlayer
*
mp
=
ijkmp_create
();
JNI_CHECK_GOTO
(
mp
,
env
,
"java/lang/OutOfMemoryError"
,
"mpjni: native_setup: ijkmp_create() failed"
,
LABEL_RETURN
);
vout
=
SDL_VoutAndroid_CreateForAndroidSurface
();
JNI_CHECK_GOTO
(
mp
,
env
,
"java/lang/OutOfMemoryError"
,
"mpjni: native_setup: SDL_VoutAndroid_CreateAndroidSurface() failed"
,
LABEL_RETURN
);
ijkmp_set_vout
(
mp
,
vout
);
jni_set_media_player
(
env
,
thiz
,
mp
);
// FIXME: implement
mp
=
NULL
;
vout
=
NULL
;
LABEL_RETURN:
if
(
vout
)
SDL_Vout_Free
(
vout
);
if
(
mp
)
ijkmp_dec_ref
(
mp
);
return
;
}
static
void
IjkMediaPlayer_native_finalize
(
JNIEnv
*
env
,
jobject
thiz
)
{
// FIXME: implement
// FIXME: implement
IjkMediaPlayer_release
(
env
,
thiz
);
}
// ----------------------------------------------------------------------------
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录