Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Obs Studio
提交
1b078f57
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,发现更多精彩内容 >>
提交
1b078f57
编写于
8月 16, 2015
作者:
P
Palana
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
libobs: Add frame rate property
上级
0b3fcb8b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
231 addition
and
0 deletion
+231
-0
libobs/obs-properties.c
libobs/obs-properties.c
+197
-0
libobs/obs-properties.h
libobs/obs-properties.h
+34
-0
未找到文件。
libobs/obs-properties.c
浏览文件 @
1b078f57
...
...
@@ -71,6 +71,21 @@ struct button_data {
obs_property_clicked_t
callback
;
};
struct
frame_rate_option
{
char
*
name
;
char
*
description
;
};
struct
frame_rate_range
{
struct
media_frames_per_second
min_time
;
struct
media_frames_per_second
max_time
;
};
struct
frame_rate_data
{
DARRAY
(
struct
frame_rate_option
)
extra_options
;
DARRAY
(
struct
frame_rate_range
)
ranges
;
};
static
inline
void
path_data_free
(
struct
path_data
*
data
)
{
bfree
(
data
->
default_path
);
...
...
@@ -100,6 +115,31 @@ static inline void list_data_free(struct list_data *data)
da_free
(
data
->
items
);
}
static
inline
void
frame_rate_data_options_free
(
struct
frame_rate_data
*
data
)
{
for
(
size_t
i
=
0
;
i
<
data
->
extra_options
.
num
;
i
++
)
{
struct
frame_rate_option
*
opt
=
&
data
->
extra_options
.
array
[
i
];
bfree
(
opt
->
name
);
bfree
(
opt
->
description
);
}
da_resize
(
data
->
extra_options
,
0
);
}
static
inline
void
frame_rate_data_ranges_free
(
struct
frame_rate_data
*
data
)
{
da_resize
(
data
->
ranges
,
0
);
}
static
inline
void
frame_rate_data_free
(
struct
frame_rate_data
*
data
)
{
frame_rate_data_options_free
(
data
);
frame_rate_data_ranges_free
(
data
);
da_free
(
data
->
extra_options
);
da_free
(
data
->
ranges
);
}
struct
obs_properties
;
struct
obs_property
{
...
...
@@ -178,6 +218,8 @@ static void obs_property_destroy(struct obs_property *property)
path_data_free
(
get_property_data
(
property
));
else
if
(
property
->
type
==
OBS_PROPERTY_EDITABLE_LIST
)
editable_list_data_free
(
get_property_data
(
property
));
else
if
(
property
->
type
==
OBS_PROPERTY_FRAME_RATE
)
frame_rate_data_free
(
get_property_data
(
property
));
bfree
(
property
);
}
...
...
@@ -262,6 +304,7 @@ static inline size_t get_property_size(enum obs_property_type type)
case
OBS_PROPERTY_FONT
:
return
0
;
case
OBS_PROPERTY_EDITABLE_LIST
:
return
sizeof
(
struct
editable_list_data
);
case
OBS_PROPERTY_FRAME_RATE
:
return
sizeof
(
struct
frame_rate_data
);
}
return
0
;
...
...
@@ -474,6 +517,20 @@ obs_property_t *obs_properties_add_editable_list(obs_properties_t *props,
return
p
;
}
obs_property_t
*
obs_properties_add_frame_rate
(
obs_properties_t
*
props
,
const
char
*
name
,
const
char
*
desc
)
{
if
(
!
props
||
has_prop
(
props
,
name
))
return
NULL
;
struct
obs_property
*
p
=
new_prop
(
props
,
name
,
desc
,
OBS_PROPERTY_FRAME_RATE
);
struct
frame_rate_data
*
data
=
get_property_data
(
p
);
da_init
(
data
->
extra_options
);
da_init
(
data
->
ranges
);
return
p
;
}
/* ------------------------------------------------------------------------- */
static
inline
bool
is_combo
(
struct
obs_property
*
p
)
...
...
@@ -826,3 +883,143 @@ const char *obs_property_editable_list_default_path(obs_property_t *p)
OBS_PROPERTY_EDITABLE_LIST
);
return
data
?
data
->
default_path
:
NULL
;
}
/* ------------------------------------------------------------------------- */
/* OBS_PROPERTY_FRAME_RATE */
void
obs_property_frame_rate_clear
(
obs_property_t
*
p
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
if
(
!
data
)
return
;
frame_rate_data_options_free
(
data
);
frame_rate_data_ranges_free
(
data
);
}
void
obs_property_frame_rate_options_clear
(
obs_property_t
*
p
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
if
(
!
data
)
return
;
frame_rate_data_options_free
(
data
);
}
void
obs_property_frame_rate_fps_ranges_clear
(
obs_property_t
*
p
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
if
(
!
data
)
return
;
frame_rate_data_ranges_free
(
data
);
}
size_t
obs_property_frame_rate_option_add
(
obs_property_t
*
p
,
const
char
*
name
,
const
char
*
description
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
if
(
!
data
)
return
DARRAY_INVALID
;
struct
frame_rate_option
*
opt
=
da_push_back_new
(
data
->
extra_options
);
opt
->
name
=
bstrdup
(
name
);
opt
->
description
=
bstrdup
(
description
);
return
data
->
extra_options
.
num
-
1
;
}
size_t
obs_property_frame_rate_fps_range_add
(
obs_property_t
*
p
,
struct
media_frames_per_second
min
,
struct
media_frames_per_second
max
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
if
(
!
data
)
return
DARRAY_INVALID
;
struct
frame_rate_range
*
rng
=
da_push_back_new
(
data
->
ranges
);
rng
->
min_time
=
min
;
rng
->
max_time
=
max
;
return
data
->
ranges
.
num
-
1
;
}
void
obs_property_frame_rate_option_insert
(
obs_property_t
*
p
,
size_t
idx
,
const
char
*
name
,
const
char
*
description
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
if
(
!
data
)
return
;
struct
frame_rate_option
*
opt
=
da_insert_new
(
data
->
extra_options
,
idx
);
opt
->
name
=
bstrdup
(
name
);
opt
->
description
=
bstrdup
(
description
);
}
void
obs_property_frame_rate_fps_range_insert
(
obs_property_t
*
p
,
size_t
idx
,
struct
media_frames_per_second
min
,
struct
media_frames_per_second
max
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
if
(
!
data
)
return
;
struct
frame_rate_range
*
rng
=
da_insert_new
(
data
->
ranges
,
idx
);
rng
->
min_time
=
min
;
rng
->
max_time
=
max
;
}
size_t
obs_property_frame_rate_options_count
(
obs_property_t
*
p
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
return
data
?
data
->
extra_options
.
num
:
0
;
}
const
char
*
obs_property_frame_rate_option_name
(
obs_property_t
*
p
,
size_t
idx
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
return
data
&&
data
->
extra_options
.
num
>
idx
?
data
->
extra_options
.
array
[
idx
].
name
:
NULL
;
}
const
char
*
obs_property_frame_rate_option_description
(
obs_property_t
*
p
,
size_t
idx
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
return
data
&&
data
->
extra_options
.
num
>
idx
?
data
->
extra_options
.
array
[
idx
].
description
:
NULL
;
}
size_t
obs_property_frame_rate_fps_ranges_count
(
obs_property_t
*
p
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
return
data
?
data
->
ranges
.
num
:
0
;
}
struct
media_frames_per_second
obs_property_frame_rate_fps_range_min
(
obs_property_t
*
p
,
size_t
idx
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
return
data
&&
data
->
ranges
.
num
>
idx
?
data
->
ranges
.
array
[
idx
].
min_time
:
(
struct
media_frames_per_second
){
0
};
}
struct
media_frames_per_second
obs_property_frame_rate_fps_range_max
(
obs_property_t
*
p
,
size_t
idx
)
{
struct
frame_rate_data
*
data
=
get_type_data
(
p
,
OBS_PROPERTY_FRAME_RATE
);
return
data
&&
data
->
ranges
.
num
>
idx
?
data
->
ranges
.
array
[
idx
].
max_time
:
(
struct
media_frames_per_second
){
0
};
}
libobs/obs-properties.h
浏览文件 @
1b078f57
...
...
@@ -19,6 +19,7 @@
#include "util/c99defs.h"
#include "obs-data.h"
#include "media-io/frame-rate.h"
/**
* @file
...
...
@@ -53,6 +54,7 @@ enum obs_property_type {
OBS_PROPERTY_BUTTON
,
OBS_PROPERTY_FONT
,
OBS_PROPERTY_EDITABLE_LIST
,
OBS_PROPERTY_FRAME_RATE
,
};
enum
obs_combo_format
{
...
...
@@ -202,6 +204,9 @@ EXPORT obs_property_t *obs_properties_add_editable_list(obs_properties_t *props,
bool
allow_files
,
const
char
*
filter
,
const
char
*
default_path
);
EXPORT
obs_property_t
*
obs_properties_add_frame_rate
(
obs_properties_t
*
props
,
const
char
*
name
,
const
char
*
description
);
/* ------------------------------------------------------------------------- */
/**
...
...
@@ -279,6 +284,35 @@ EXPORT bool obs_property_editable_list_allow_files(obs_property_t *p);
EXPORT
const
char
*
obs_property_editable_list_filter
(
obs_property_t
*
p
);
EXPORT
const
char
*
obs_property_editable_list_default_path
(
obs_property_t
*
p
);
EXPORT
void
obs_property_frame_rate_clear
(
obs_property_t
*
p
);
EXPORT
void
obs_property_frame_rate_options_clear
(
obs_property_t
*
p
);
EXPORT
void
obs_property_frame_rate_fps_ranges_clear
(
obs_property_t
*
p
);
EXPORT
size_t
obs_property_frame_rate_option_add
(
obs_property_t
*
p
,
const
char
*
name
,
const
char
*
description
);
EXPORT
size_t
obs_property_frame_rate_fps_range_add
(
obs_property_t
*
p
,
struct
media_frames_per_second
min
,
struct
media_frames_per_second
max
);
EXPORT
void
obs_property_frame_rate_option_insert
(
obs_property_t
*
p
,
size_t
idx
,
const
char
*
name
,
const
char
*
description
);
EXPORT
void
obs_property_frame_rate_fps_range_insert
(
obs_property_t
*
p
,
size_t
idx
,
struct
media_frames_per_second
min
,
struct
media_frames_per_second
max
);
EXPORT
size_t
obs_property_frame_rate_options_count
(
obs_property_t
*
p
);
EXPORT
const
char
*
obs_property_frame_rate_option_name
(
obs_property_t
*
p
,
size_t
idx
);
EXPORT
const
char
*
obs_property_frame_rate_option_description
(
obs_property_t
*
p
,
size_t
idx
);
EXPORT
size_t
obs_property_frame_rate_fps_ranges_count
(
obs_property_t
*
p
);
EXPORT
struct
media_frames_per_second
obs_property_frame_rate_fps_range_min
(
obs_property_t
*
p
,
size_t
idx
);
EXPORT
struct
media_frames_per_second
obs_property_frame_rate_fps_range_max
(
obs_property_t
*
p
,
size_t
idx
);
#ifdef __cplusplus
}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录