Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
NotesChapter
ijkplayer
提交
4787a6c9
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,发现更多精彩内容 >>
提交
4787a6c9
编写于
10月 27, 2016
作者:
X
Xinzheng Zhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ios/ff_movie_controller: fix potential crash for inject opaque
上级
13f3bf3a
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
25 addition
and
10 deletion
+25
-10
ijkmedia/ijkplayer/ff_ffplay.c
ijkmedia/ijkplayer/ff_ffplay.c
+4
-3
ijkmedia/ijkplayer/ff_ffplay.h
ijkmedia/ijkplayer/ff_ffplay.h
+1
-1
ijkmedia/ijkplayer/ijkplayer.c
ijkmedia/ijkplayer/ijkplayer.c
+3
-2
ijkmedia/ijkplayer/ijkplayer.h
ijkmedia/ijkplayer/ijkplayer.h
+1
-1
ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m
...JKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m
+16
-3
未找到文件。
ijkmedia/ijkplayer/ff_ffplay.c
浏览文件 @
4787a6c9
...
...
@@ -3337,11 +3337,11 @@ static int app_func_event(AVApplicationContext *h, int message ,void *data, size
return
inject_callback
(
ffp
->
inject_opaque
,
message
,
data
,
size
);
}
void
ffp_set_inject_opaque
(
FFPlayer
*
ffp
,
void
*
opaque
)
void
*
ffp_set_inject_opaque
(
FFPlayer
*
ffp
,
void
*
opaque
)
{
if
(
!
ffp
)
return
;
return
NULL
;
void
*
prev_weak_thiz
=
ffp
->
inject_opaque
;
ffp
->
inject_opaque
=
opaque
;
av_application_closep
(
&
ffp
->
app_ctx
);
...
...
@@ -3349,6 +3349,7 @@ void ffp_set_inject_opaque(FFPlayer *ffp, void *opaque)
ffp_set_option_int
(
ffp
,
FFP_OPT_CATEGORY_FORMAT
,
"ijkapplication"
,
(
int64_t
)(
intptr_t
)
ffp
->
app_ctx
);
ffp
->
app_ctx
->
func_on_app_event
=
app_func_event
;
return
prev_weak_thiz
;
}
void
ffp_set_option
(
FFPlayer
*
ffp
,
int
opt_category
,
const
char
*
name
,
const
char
*
value
)
...
...
ijkmedia/ijkplayer/ff_ffplay.h
浏览文件 @
4787a6c9
...
...
@@ -45,7 +45,7 @@ void ffp_reset(FFPlayer *ffp);
/* set options before ffp_prepare_async_l() */
void
ffp_set_inject_opaque
(
FFPlayer
*
ffp
,
void
*
opaque
);
void
*
ffp_set_inject_opaque
(
FFPlayer
*
ffp
,
void
*
opaque
);
void
ffp_set_option
(
FFPlayer
*
ffp
,
int
opt_category
,
const
char
*
name
,
const
char
*
value
);
void
ffp_set_option_int
(
FFPlayer
*
ffp
,
int
opt_category
,
const
char
*
name
,
int64_t
value
);
...
...
ijkmedia/ijkplayer/ijkplayer.c
浏览文件 @
4787a6c9
...
...
@@ -135,13 +135,14 @@ IjkMediaPlayer *ijkmp_create(int (*msg_loop)(void*))
return
NULL
;
}
void
ijkmp_set_inject_opaque
(
IjkMediaPlayer
*
mp
,
void
*
opaque
)
void
*
ijkmp_set_inject_opaque
(
IjkMediaPlayer
*
mp
,
void
*
opaque
)
{
assert
(
mp
);
MPTRACE
(
"%s(%p)
\n
"
,
__func__
,
opaque
);
ffp_set_inject_opaque
(
mp
->
ffplayer
,
opaque
);
void
*
prev_weak_thiz
=
ffp_set_inject_opaque
(
mp
->
ffplayer
,
opaque
);
MPTRACE
(
"%s()=void
\n
"
,
__func__
);
return
prev_weak_thiz
;
}
void
ijkmp_set_option
(
IjkMediaPlayer
*
mp
,
int
opt_category
,
const
char
*
name
,
const
char
*
value
)
...
...
ijkmedia/ijkplayer/ijkplayer.h
浏览文件 @
4787a6c9
...
...
@@ -163,7 +163,7 @@ void ijkmp_io_stat_complete_register(void (*cb)(const char *url,
// ref_count is 1 after open
IjkMediaPlayer
*
ijkmp_create
(
int
(
*
msg_loop
)(
void
*
));
void
ijkmp_set_inject_opaque
(
IjkMediaPlayer
*
mp
,
void
*
opaque
);
void
*
ijkmp_set_inject_opaque
(
IjkMediaPlayer
*
mp
,
void
*
opaque
);
void
ijkmp_set_option
(
IjkMediaPlayer
*
mp
,
int
opt_category
,
const
char
*
name
,
const
char
*
value
);
void
ijkmp_set_option_int
(
IjkMediaPlayer
*
mp
,
int
opt_category
,
const
char
*
name
,
int64_t
value
);
...
...
ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m
浏览文件 @
4787a6c9
...
...
@@ -34,6 +34,14 @@
static
const
char
*
kIJKFFRequiredFFmpegVersion
=
"ff3.1--ijk0.6.2--20160926--001"
;
// It means you didn't call shutdown if you found this object leaked.
@interface
IJKWeakHolder
:
NSObject
@property
(
nonatomic
,
weak
)
id
object
;
@end
@implementation
IJKWeakHolder
@end
@interface
IJKFFMoviePlayerController
()
@end
...
...
@@ -183,9 +191,11 @@ void IJKFFIOStatCompleteRegister(void (*cb)(const char *url,
// init player
_mediaPlayer
=
ijkmp_ios_create
(
media_player_msg_loop
);
_msgPool
=
[[
IJKFFMoviePlayerMessagePool
alloc
]
init
];
IJKWeakHolder
*
weakHolder
=
[
IJKWeakHolder
new
];
weakHolder
.
object
=
self
;
ijkmp_set_weak_thiz
(
_mediaPlayer
,
(
__bridge_retained
void
*
)
self
);
ijkmp_set_inject_opaque
(
_mediaPlayer
,
(
__bridge
void
*
)
self
);
ijkmp_set_inject_opaque
(
_mediaPlayer
,
(
__bridge
_retained
void
*
)
weakHolder
);
ijkmp_set_option_int
(
_mediaPlayer
,
IJKMP_OPT_CATEGORY_PLAYER
,
"start-on-prepared"
,
_shouldAutoplay
?
1
:
0
);
// init video sink
...
...
@@ -467,6 +477,7 @@ inline static int getPlayerOption(IJKFFOptionCategory category)
_liveOpenDelegate
=
nil
;
_nativeInvokeDelegate
=
nil
;
__unused
id
weakHolder
=
(
__bridge_transfer
IJKWeakHolder
*
)
ijkmp_set_inject_opaque
(
_mediaPlayer
,
NULL
);
ijkmp_dec_ref_p
(
&
_mediaPlayer
);
[
self
didShutdown
];
...
...
@@ -1089,7 +1100,6 @@ int media_player_msg_loop(void* arg)
@autoreleasepool
{
IjkMediaPlayer
*
mp
=
(
IjkMediaPlayer
*
)
arg
;
__weak
IJKFFMoviePlayerController
*
ffpController
=
ffplayerRetain
(
ijkmp_set_weak_thiz
(
mp
,
NULL
));
while
(
ffpController
)
{
@autoreleasepool
{
IJKFFMoviePlayerMessage
*
msg
=
[
ffpController
obtainMessage
];
...
...
@@ -1295,7 +1305,10 @@ static int onInjectOnHttpEvent(IJKFFMoviePlayerController *mpc, int type, void *
// NOTE: could be called from multiple thread
static
int
ijkff_inject_callback
(
void
*
opaque
,
int
message
,
void
*
data
,
size_t
data_size
)
{
IJKFFMoviePlayerController
*
mpc
=
(
__bridge
IJKFFMoviePlayerController
*
)
opaque
;
IJKWeakHolder
*
weakHolder
=
(
__bridge
IJKWeakHolder
*
)
opaque
;
IJKFFMoviePlayerController
*
mpc
=
weakHolder
.
object
;
if
(
!
mpc
)
return
0
;
switch
(
message
)
{
case
AVAPP_CTRL_WILL_CONCAT_SEGMENT_OPEN
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录