Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
尘离序散
obs-studio
提交
10a9133e
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,发现更多精彩内容 >>
提交
10a9133e
编写于
10月 29, 2014
作者:
J
Jim
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #290 from jp9000/v4l2-improvements
linux-v4l2: Handle reconnection in properties
上级
24d1495b
d9a7b906
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
55 addition
and
6 deletion
+55
-6
plugins/linux-v4l2/v4l2-input.c
plugins/linux-v4l2/v4l2-input.c
+55
-6
未找到文件。
plugins/linux-v4l2/v4l2-input.c
浏览文件 @
10a9133e
...
...
@@ -219,21 +219,49 @@ static void v4l2_defaults(obs_data_t *settings)
obs_data_set_default_bool
(
settings
,
"system_timing"
,
false
);
}
/**
* Enable/Disable all properties for the source.
*
* @note A property that should be ignored can be specified
*
* @param props the source properties
* @param ignore ignore this property
* @param enable enable/disable all properties
*/
static
void
v4l2_props_set_enabled
(
obs_properties_t
*
props
,
obs_property_t
*
ignore
,
bool
enable
)
{
if
(
!
props
)
return
;
for
(
obs_property_t
*
prop
=
obs_properties_first
(
props
);
prop
!=
NULL
;
obs_property_next
(
&
prop
))
{
if
(
prop
==
ignore
)
continue
;
obs_property_set_enabled
(
prop
,
enable
);
}
}
/*
* List available devices
*/
static
void
v4l2_device_list
(
obs_property_t
*
prop
,
obs_data_t
*
settings
)
{
UNUSED_PARAMETER
(
settings
);
DIR
*
dirp
;
struct
dirent
*
dp
;
struct
dstr
device
;
bool
cur_device_found
;
size_t
cur_device_index
;
const
char
*
cur_device_name
;
dirp
=
opendir
(
"/sys/class/video4linux"
);
if
(
!
dirp
)
return
;
cur_device_found
=
false
;
cur_device_name
=
obs_data_get_string
(
settings
,
"device_id"
);
obs_property_list_clear
(
prop
);
dstr_init_copy
(
&
device
,
"/dev/"
);
...
...
@@ -277,9 +305,20 @@ static void v4l2_device_list(obs_property_t *prop, obs_data_t *settings)
blog
(
LOG_INFO
,
"Found device '%s' at %s"
,
video_cap
.
card
,
device
.
array
);
/* check if this is the currently used device */
if
(
cur_device_name
&&
!
strcmp
(
cur_device_name
,
device
.
array
))
cur_device_found
=
true
;
v4l2_close
(
fd
);
}
/* add currently selected device if not present, but disable it ... */
if
(
!
cur_device_found
&&
cur_device_name
&&
strlen
(
cur_device_name
))
{
cur_device_index
=
obs_property_list_add_string
(
prop
,
cur_device_name
,
cur_device_name
);
obs_property_list_item_disable
(
prop
,
cur_device_index
,
true
);
}
closedir
(
dirp
);
dstr_free
(
&
device
);
}
...
...
@@ -446,9 +485,11 @@ static void v4l2_framerate_list(int dev, uint_fast32_t pixelformat,
static
bool
device_selected
(
obs_properties_t
*
props
,
obs_property_t
*
p
,
obs_data_t
*
settings
)
{
UNUSED_PARAMETER
(
p
);
int
dev
=
v4l2_open
(
obs_data_get_string
(
settings
,
"device_id"
),
O_RDWR
|
O_NONBLOCK
);
v4l2_props_set_enabled
(
props
,
p
,
(
dev
==
-
1
)
?
false
:
true
);
if
(
dev
==
-
1
)
return
false
;
...
...
@@ -540,6 +581,8 @@ static void device_added(const char *dev, void *vptr)
{
V4L2_DATA
(
vptr
);
obs_source_update_properties
(
data
->
source
);
if
(
strcmp
(
data
->
device_id
,
dev
))
return
;
...
...
@@ -556,6 +599,8 @@ static void device_removed(const char *dev, void *vptr)
{
V4L2_DATA
(
vptr
);
obs_source_update_properties
(
data
->
source
);
if
(
strcmp
(
data
->
device_id
,
dev
))
return
;
...
...
@@ -566,9 +611,9 @@ static void device_removed(const char *dev, void *vptr)
#endif
static
obs_properties_t
*
v4l2_properties
(
void
*
unused
)
static
obs_properties_t
*
v4l2_properties
(
void
*
vptr
)
{
UNUSED_PARAMETER
(
unused
);
V4L2_DATA
(
vptr
);
obs_properties_t
*
props
=
obs_properties_create
();
...
...
@@ -595,12 +640,16 @@ static obs_properties_t *v4l2_properties(void *unused)
obs_properties_add_bool
(
props
,
"system_timing"
,
obs_module_text
(
"UseSystemTiming"
));
v4l2_device_list
(
device_list
,
NULL
);
obs_data_t
*
settings
=
obs_source_get_settings
(
data
->
source
);
v4l2_device_list
(
device_list
,
settings
);
obs_data_release
(
settings
);
obs_property_set_modified_callback
(
device_list
,
device_selected
);
obs_property_set_modified_callback
(
input_list
,
input_selected
);
obs_property_set_modified_callback
(
format_list
,
format_selected
);
obs_property_set_modified_callback
(
resolution_list
,
resolution_selected
);
return
props
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录