Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Obs Studio
提交
488e25fc
O
Obs Studio
项目概览
小白菜888
/
Obs Studio
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Obs Studio
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
488e25fc
编写于
3月 23, 2020
作者:
J
Jim
提交者:
GitHub
3月 23, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2550 from kkartaltepe/v4l2-fix-for-real
linux-v4l2: Fixup invalid id
上级
54c5ac25
b822faf7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
49 deletion
+49
-49
plugins/linux-v4l2/v4l2-controls.c
plugins/linux-v4l2/v4l2-controls.c
+49
-49
未找到文件。
plugins/linux-v4l2/v4l2-controls.c
浏览文件 @
488e25fc
...
...
@@ -86,11 +86,58 @@ static int_fast32_t v4l2_update_controls_menu(int_fast32_t dev,
return
0
;
}
#define INVALID_CONTROL_FLAGS \
(V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_READ_ONLY | \
V4L2_CTRL_FLAG_VOLATILE)
static
inline
bool
valid_control
(
struct
v4l2_queryctrl
*
qctrl
)
{
return
(
qctrl
->
flags
&
INVALID_CONTROL_FLAGS
)
==
0
;
}
static
inline
bool
add_control_property
(
obs_properties_t
*
props
,
obs_data_t
*
settings
,
int_fast32_t
dev
,
struct
v4l2_queryctrl
*
qctrl
)
{
obs_property_t
*
prop
=
NULL
;
if
(
!
valid_control
(
qctrl
))
{
return
;
}
switch
(
qctrl
->
type
)
{
case
V4L2_CTRL_TYPE_INTEGER
:
prop
=
obs_properties_add_int_slider
(
props
,
(
char
*
)
qctrl
->
name
,
(
char
*
)
qctrl
->
name
,
qctrl
->
minimum
,
qctrl
->
maximum
,
qctrl
->
step
);
obs_data_set_default_int
(
settings
,
(
char
*
)
qctrl
->
name
,
qctrl
->
default_value
);
obs_property_set_modified_callback2
(
prop
,
v4l2_control_changed
,
UINT_TO_POINTER
(
qctrl
->
id
));
break
;
case
V4L2_CTRL_TYPE_BOOLEAN
:
prop
=
obs_properties_add_bool
(
props
,
(
char
*
)
qctrl
->
name
,
(
char
*
)
qctrl
->
name
);
obs_data_set_default_bool
(
settings
,
(
char
*
)
qctrl
->
name
,
qctrl
->
default_value
);
obs_property_set_modified_callback2
(
prop
,
v4l2_control_changed
,
UINT_TO_POINTER
(
qctrl
->
id
));
break
;
case
V4L2_CTRL_TYPE_MENU
:
case
V4L2_CTRL_TYPE_INTEGER_MENU
:
v4l2_update_controls_menu
(
dev
,
props
,
qctrl
);
obs_data_set_default_int
(
settings
,
(
char
*
)
qctrl
->
name
,
qctrl
->
default_value
);
blog
(
LOG_INFO
,
"setting default for %s to %d"
,
(
char
*
)
qctrl
->
name
,
qctrl
->
default_value
);
break
;
}
}
int_fast32_t
v4l2_update_controls
(
int_fast32_t
dev
,
obs_properties_t
*
props
,
obs_data_t
*
settings
)
{
struct
v4l2_queryctrl
qctrl
;
obs_property_t
*
prop
=
NULL
;
if
(
!
dev
||
!
props
)
return
-
1
;
...
...
@@ -98,55 +145,8 @@ int_fast32_t v4l2_update_controls(int_fast32_t dev, obs_properties_t *props,
memset
(
&
qctrl
,
0
,
sizeof
(
qctrl
));
qctrl
.
id
=
V4L2_CTRL_FLAG_NEXT_CTRL
;
while
(
0
==
v4l2_ioctl
(
dev
,
VIDIOC_QUERYCTRL
,
&
qctrl
))
{
add_control_property
(
props
,
settings
,
dev
,
&
qctrl
);
qctrl
.
id
|=
V4L2_CTRL_FLAG_NEXT_CTRL
;
if
(
qctrl
.
flags
&
V4L2_CTRL_FLAG_DISABLED
)
{
blog
(
LOG_INFO
,
"found control %s but it is disabled"
,
qctrl
.
name
);
continue
;
}
if
(
qctrl
.
flags
&
V4L2_CTRL_FLAG_READ_ONLY
)
{
blog
(
LOG_INFO
,
"found control %s but it is readonly"
,
qctrl
.
name
);
continue
;
}
if
(
qctrl
.
flags
&
V4L2_CTRL_FLAG_VOLATILE
)
{
blog
(
LOG_INFO
,
"found control %s but it is volatile"
,
qctrl
.
name
);
continue
;
}
switch
(
qctrl
.
type
)
{
case
V4L2_CTRL_TYPE_INTEGER
:
prop
=
obs_properties_add_int_slider
(
props
,
(
char
*
)
qctrl
.
name
,
(
char
*
)
qctrl
.
name
,
qctrl
.
minimum
,
qctrl
.
maximum
,
qctrl
.
step
);
obs_data_set_default_int
(
settings
,
(
char
*
)
qctrl
.
name
,
qctrl
.
default_value
);
obs_property_set_modified_callback2
(
prop
,
v4l2_control_changed
,
UINT_TO_POINTER
(
qctrl
.
id
));
break
;
case
V4L2_CTRL_TYPE_BOOLEAN
:
prop
=
obs_properties_add_bool
(
props
,
(
char
*
)
qctrl
.
name
,
(
char
*
)
qctrl
.
name
);
obs_data_set_default_bool
(
settings
,
(
char
*
)
qctrl
.
name
,
qctrl
.
default_value
);
obs_property_set_modified_callback2
(
prop
,
v4l2_control_changed
,
UINT_TO_POINTER
(
qctrl
.
id
));
break
;
case
V4L2_CTRL_TYPE_MENU
:
case
V4L2_CTRL_TYPE_INTEGER_MENU
:
v4l2_update_controls_menu
(
dev
,
props
,
&
qctrl
);
obs_data_set_default_int
(
settings
,
(
char
*
)
qctrl
.
name
,
qctrl
.
default_value
);
blog
(
LOG_INFO
,
"setting default for %s to %d"
,
(
char
*
)
qctrl
.
name
,
qctrl
.
default_value
);
break
;
}
}
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录