Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
尘离序散
obs-studio
提交
7018c603
O
obs-studio
项目概览
尘离序散
/
obs-studio
与 Fork 源项目一致
从无法访问的项目Fork
通知
30
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
obs-studio
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7018c603
编写于
6月 20, 2016
作者:
J
jp9000
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
libobs: Do not allow output stop calls more than once
上级
ceb675f6
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
18 addition
and
3 deletion
+18
-3
libobs/obs-internal.h
libobs/obs-internal.h
+1
-0
libobs/obs-output.c
libobs/obs-output.c
+17
-3
未找到文件。
libobs/obs-internal.h
浏览文件 @
7018c603
...
...
@@ -785,6 +785,7 @@ struct obs_output {
int64_t
audio_offsets
[
MAX_AUDIO_MIXES
];
int64_t
highest_audio_ts
;
int64_t
highest_video_ts
;
os_event_t
*
stopping_event
;
pthread_mutex_t
interleaved_mutex
;
DARRAY
(
struct
encoder_packet
)
interleaved_packets
;
...
...
libobs/obs-output.c
浏览文件 @
7018c603
...
...
@@ -30,6 +30,11 @@ static inline bool reconnecting(const struct obs_output *output)
return
os_atomic_load_bool
(
&
output
->
reconnecting
);
}
static
inline
bool
stopping
(
const
struct
obs_output
*
output
)
{
return
os_event_try
(
output
->
stopping_event
)
==
EAGAIN
;
}
static
inline
bool
delay_active
(
const
struct
obs_output
*
output
)
{
return
os_atomic_load_bool
(
&
output
->
delay_active
);
...
...
@@ -96,9 +101,13 @@ obs_output_t *obs_output_create(const char *id, const char *name,
goto
fail
;
if
(
pthread_mutex_init
(
&
output
->
delay_mutex
,
NULL
)
!=
0
)
goto
fail
;
if
(
os_event_init
(
&
output
->
stopping_event
,
OS_EVENT_TYPE_MANUAL
)
!=
0
)
goto
fail
;
if
(
!
init_output_handlers
(
output
,
name
,
settings
,
hotkey_data
))
goto
fail
;
os_event_signal
(
output
->
stopping_event
);
if
(
!
info
)
{
blog
(
LOG_ERROR
,
"Output ID '%s' not found"
,
id
);
...
...
@@ -179,6 +188,7 @@ void obs_output_destroy(obs_output_t *output)
}
}
os_event_destroy
(
output
->
stopping_event
);
pthread_mutex_destroy
(
&
output
->
interleaved_mutex
);
pthread_mutex_destroy
(
&
output
->
delay_mutex
);
os_event_destroy
(
output
->
reconnect_stop_event
);
...
...
@@ -200,7 +210,7 @@ bool obs_output_actual_start(obs_output_t *output)
{
bool
success
=
false
;
o
utput
->
stopped
=
false
;
o
s_event_wait
(
output
->
stopping_event
)
;
if
(
output
->
context
.
data
)
success
=
output
->
info
.
start
(
output
->
context
.
data
);
...
...
@@ -294,7 +304,9 @@ static void log_frame_info(struct obs_output *output)
void
obs_output_actual_stop
(
obs_output_t
*
output
,
bool
force
)
{
output
->
stopped
=
true
;
if
(
stopping
(
output
))
return
;
os_event_reset
(
output
->
stopping_event
);
os_event_signal
(
output
->
reconnect_stop_event
);
if
(
output
->
reconnect_thread_active
)
...
...
@@ -328,7 +340,7 @@ void obs_output_stop(obs_output_t *output)
if
(
encoded
&&
output
->
active_delay_ns
)
{
obs_output_delay_stop
(
output
);
}
else
{
}
else
if
(
!
stopping
(
output
))
{
obs_output_actual_stop
(
output
,
false
);
do_output_signal
(
output
,
"stopping"
);
}
...
...
@@ -1615,6 +1627,7 @@ void obs_output_end_data_capture(obs_output_t *output)
if
(
delay_active
(
output
))
{
os_atomic_set_bool
(
&
output
->
delay_capturing
,
false
);
os_event_signal
(
output
->
stopping_event
);
return
;
}
...
...
@@ -1653,6 +1666,7 @@ void obs_output_end_data_capture(obs_output_t *output)
do_output_signal
(
output
,
"deactivate"
);
os_atomic_set_bool
(
&
output
->
active
,
false
);
os_event_signal
(
output
->
stopping_event
);
}
static
void
*
reconnect_thread
(
void
*
param
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录