Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_25606643
ijkplayer
提交
c7ca0671
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,发现更多精彩内容 >>
提交
c7ca0671
编写于
9月 28, 2015
作者:
Z
Zhang Rui
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ff_ffplay: support loop playback
上级
3216ab56
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
94 addition
and
1 deletion
+94
-1
android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
...main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
+25
-0
ijkmedia/ijkplayer/android/ijkplayer_jni.c
ijkmedia/ijkplayer/android/ijkplayer_jni.c
+30
-0
ijkmedia/ijkplayer/ff_ffplay.c
ijkmedia/ijkplayer/ff_ffplay.c
+18
-1
ijkmedia/ijkplayer/ff_ffplay.h
ijkmedia/ijkplayer/ff_ffplay.h
+2
-0
ijkmedia/ijkplayer/ijkplayer.c
ijkmedia/ijkplayer/ijkplayer.c
+17
-0
ijkmedia/ijkplayer/ijkplayer.h
ijkmedia/ijkplayer/ijkplayer.h
+2
-0
未找到文件。
android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
浏览文件 @
c7ca0671
...
@@ -618,6 +618,31 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer {
...
@@ -618,6 +618,31 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer {
private
native
void
_reset
();
private
native
void
_reset
();
/**
* Sets the player to be looping or non-looping.
*
* @param looping whether to loop or not
*/
public
void
setLooping
(
boolean
looping
)
{
int
loopCount
=
looping
?
0
:
1
;
setOption
(
OPT_CATEGORY_PLAYER
,
"loop"
,
loopCount
);
_setLoopCount
(
loopCount
);
}
private
native
void
_setLoopCount
(
int
loopCount
);
/**
* Checks whether the MediaPlayer is looping or non-looping.
*
* @return true if the MediaPlayer is currently looping, false otherwise
*/
public
boolean
isLooping
()
{
int
loopCount
=
_getLoopCount
();
return
loopCount
!=
1
;
}
private
native
int
_getLoopCount
();
public
native
void
setVolume
(
float
leftVolume
,
float
rightVolume
);
public
native
void
setVolume
(
float
leftVolume
,
float
rightVolume
);
@Override
@Override
...
...
ijkmedia/ijkplayer/android/ijkplayer_jni.c
浏览文件 @
c7ca0671
...
@@ -306,6 +306,34 @@ IjkMediaPlayer_reset(JNIEnv *env, jobject thiz)
...
@@ -306,6 +306,34 @@ IjkMediaPlayer_reset(JNIEnv *env, jobject thiz)
ijkmp_dec_ref_p
(
&
mp
);
ijkmp_dec_ref_p
(
&
mp
);
}
}
static
void
IjkMediaPlayer_setLoopCount
(
JNIEnv
*
env
,
jobject
thiz
,
jint
loop_count
)
{
MPTRACE
(
"%s
\n
"
,
__func__
);
IjkMediaPlayer
*
mp
=
jni_get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: setLoopCount: null mp"
,
LABEL_RETURN
);
ijkmp_set_loop
(
mp
,
loop_count
);
LABEL_RETURN:
ijkmp_dec_ref_p
(
&
mp
);
}
static
jint
IjkMediaPlayer_getLoopCount
(
JNIEnv
*
env
,
jobject
thiz
)
{
jint
loop_count
=
1
;
MPTRACE
(
"%s
\n
"
,
__func__
);
IjkMediaPlayer
*
mp
=
jni_get_media_player
(
env
,
thiz
);
JNI_CHECK_GOTO
(
mp
,
env
,
NULL
,
"mpjni: getLoopCount: null mp"
,
LABEL_RETURN
);
loop_count
=
ijkmp_get_loop
(
mp
);
LABEL_RETURN:
ijkmp_dec_ref_p
(
&
mp
);
return
loop_count
;
}
static
void
static
void
IjkMediaPlayer_setVolume
(
JNIEnv
*
env
,
jobject
thiz
,
jfloat
leftVolume
,
jfloat
rightVolume
)
IjkMediaPlayer_setVolume
(
JNIEnv
*
env
,
jobject
thiz
,
jfloat
leftVolume
,
jfloat
rightVolume
)
{
{
...
@@ -888,6 +916,8 @@ static JNINativeMethod g_methods[] = {
...
@@ -888,6 +916,8 @@ static JNINativeMethod g_methods[] = {
{
"_getVideoCodecInfo"
,
"()Ljava/lang/String;"
,
(
void
*
)
IjkMediaPlayer_getVideoCodecInfo
},
{
"_getVideoCodecInfo"
,
"()Ljava/lang/String;"
,
(
void
*
)
IjkMediaPlayer_getVideoCodecInfo
},
{
"_getAudioCodecInfo"
,
"()Ljava/lang/String;"
,
(
void
*
)
IjkMediaPlayer_getAudioCodecInfo
},
{
"_getAudioCodecInfo"
,
"()Ljava/lang/String;"
,
(
void
*
)
IjkMediaPlayer_getAudioCodecInfo
},
{
"_getMediaMeta"
,
"()Landroid/os/Bundle;"
,
(
void
*
)
IjkMediaPlayer_getMediaMeta
},
{
"_getMediaMeta"
,
"()Landroid/os/Bundle;"
,
(
void
*
)
IjkMediaPlayer_getMediaMeta
},
{
"_setLoopCount"
,
"(I)V"
,
(
void
*
)
IjkMediaPlayer_setLoopCount
},
{
"_getLoopCount"
,
"()I"
,
(
void
*
)
IjkMediaPlayer_getLoopCount
},
{
"native_profileBegin"
,
"(Ljava/lang/String;)V"
,
(
void
*
)
IjkMediaPlayer_native_profileBegin
},
{
"native_profileBegin"
,
"(Ljava/lang/String;)V"
,
(
void
*
)
IjkMediaPlayer_native_profileBegin
},
{
"native_profileEnd"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_native_profileEnd
},
{
"native_profileEnd"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_native_profileEnd
},
...
...
ijkmedia/ijkplayer/ff_ffplay.c
浏览文件 @
c7ca0671
...
@@ -130,7 +130,8 @@ static const AVOption ffp_context_options[] = {
...
@@ -130,7 +130,8 @@ static const AVOption ffp_context_options[] = {
{
"fast"
,
"non spec compliant optimizations"
,
{
"fast"
,
"non spec compliant optimizations"
,
OPTION_OFFSET
(
fast
),
OPTION_INT
(
0
,
0
,
1
)
},
OPTION_OFFSET
(
fast
),
OPTION_INT
(
0
,
0
,
1
)
},
// FFP_MERGE: genpts, drp, lowres, sync, autoexit, exitonkeydown, exitonmousedown
// FFP_MERGE: genpts, drp, lowres, sync, autoexit, exitonkeydown, exitonmousedown
// TODO: loop
{
"loop"
,
"set number of times the playback shall be looped"
,
OPTION_OFFSET
(
loop
),
OPTION_INT
(
1
,
INT_MIN
,
INT_MAX
)
},
{
"infbuf"
,
"don't limit the input buffer size (useful with realtime streams)"
,
{
"infbuf"
,
"don't limit the input buffer size (useful with realtime streams)"
,
OPTION_OFFSET
(
infinite_buffer
),
OPTION_INT
(
0
,
0
,
1
)
},
OPTION_OFFSET
(
infinite_buffer
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"framedrop"
,
"drop frames when cpu is too slow"
,
{
"framedrop"
,
"drop frames when cpu is too slow"
,
...
@@ -3603,6 +3604,22 @@ long ffp_get_playable_duration_l(FFPlayer *ffp)
...
@@ -3603,6 +3604,22 @@ long ffp_get_playable_duration_l(FFPlayer *ffp)
return
(
long
)
ffp
->
playable_duration_ms
;
return
(
long
)
ffp
->
playable_duration_ms
;
}
}
void
ffp_set_loop
(
FFPlayer
*
ffp
,
int
loop
)
{
assert
(
ffp
);
if
(
!
ffp
)
return
;
ffp
->
loop
=
loop
;
}
int
ffp_get_loop
(
FFPlayer
*
ffp
)
{
assert
(
ffp
);
if
(
!
ffp
)
return
1
;
return
ffp
->
loop
;
}
void
ffp_packet_queue_init
(
PacketQueue
*
q
)
void
ffp_packet_queue_init
(
PacketQueue
*
q
)
{
{
return
packet_queue_init
(
q
);
return
packet_queue_init
(
q
);
...
...
ijkmedia/ijkplayer/ff_ffplay.h
浏览文件 @
c7ca0671
...
@@ -65,6 +65,8 @@ int ffp_seek_to_l(FFPlayer *ffp, long msec);
...
@@ -65,6 +65,8 @@ int ffp_seek_to_l(FFPlayer *ffp, long msec);
long
ffp_get_current_position_l
(
FFPlayer
*
ffp
);
long
ffp_get_current_position_l
(
FFPlayer
*
ffp
);
long
ffp_get_duration_l
(
FFPlayer
*
ffp
);
long
ffp_get_duration_l
(
FFPlayer
*
ffp
);
long
ffp_get_playable_duration_l
(
FFPlayer
*
ffp
);
long
ffp_get_playable_duration_l
(
FFPlayer
*
ffp
);
void
ffp_set_loop
(
FFPlayer
*
ffp
,
int
loop
);
int
ffp_get_loop
(
FFPlayer
*
ffp
);
/* for internal usage */
/* for internal usage */
void
ffp_packet_queue_init
(
PacketQueue
*
q
);
void
ffp_packet_queue_init
(
PacketQueue
*
q
);
...
...
ijkmedia/ijkplayer/ijkplayer.c
浏览文件 @
c7ca0671
...
@@ -560,6 +560,23 @@ long ijkmp_get_playable_duration(IjkMediaPlayer *mp)
...
@@ -560,6 +560,23 @@ long ijkmp_get_playable_duration(IjkMediaPlayer *mp)
return
retval
;
return
retval
;
}
}
void
ijkmp_set_loop
(
IjkMediaPlayer
*
mp
,
int
loop
)
{
assert
(
mp
);
pthread_mutex_lock
(
&
mp
->
mutex
);
ffp_set_loop
(
mp
->
ffplayer
,
loop
);
pthread_mutex_unlock
(
&
mp
->
mutex
);
}
int
ijkmp_get_loop
(
IjkMediaPlayer
*
mp
)
{
assert
(
mp
);
pthread_mutex_lock
(
&
mp
->
mutex
);
int
loop
=
ffp_get_loop
(
mp
->
ffplayer
);
pthread_mutex_unlock
(
&
mp
->
mutex
);
return
loop
;
}
void
*
ijkmp_get_weak_thiz
(
IjkMediaPlayer
*
mp
)
void
*
ijkmp_get_weak_thiz
(
IjkMediaPlayer
*
mp
)
{
{
return
mp
->
weak_thiz
;
return
mp
->
weak_thiz
;
...
...
ijkmedia/ijkplayer/ijkplayer.h
浏览文件 @
c7ca0671
...
@@ -196,6 +196,8 @@ bool ijkmp_is_playing(IjkMediaPlayer *mp);
...
@@ -196,6 +196,8 @@ bool ijkmp_is_playing(IjkMediaPlayer *mp);
long
ijkmp_get_current_position
(
IjkMediaPlayer
*
mp
);
long
ijkmp_get_current_position
(
IjkMediaPlayer
*
mp
);
long
ijkmp_get_duration
(
IjkMediaPlayer
*
mp
);
long
ijkmp_get_duration
(
IjkMediaPlayer
*
mp
);
long
ijkmp_get_playable_duration
(
IjkMediaPlayer
*
mp
);
long
ijkmp_get_playable_duration
(
IjkMediaPlayer
*
mp
);
void
ijkmp_set_loop
(
IjkMediaPlayer
*
mp
,
int
loop
);
int
ijkmp_get_loop
(
IjkMediaPlayer
*
mp
);
void
*
ijkmp_get_weak_thiz
(
IjkMediaPlayer
*
mp
);
void
*
ijkmp_get_weak_thiz
(
IjkMediaPlayer
*
mp
);
void
*
ijkmp_set_weak_thiz
(
IjkMediaPlayer
*
mp
,
void
*
weak_thiz
);
void
*
ijkmp_set_weak_thiz
(
IjkMediaPlayer
*
mp
,
void
*
weak_thiz
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录