Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
尘离序散
obs-studio
提交
b1ada2f9
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,发现更多精彩内容 >>
提交
b1ada2f9
编写于
9月 23, 2017
作者:
A
Alexandre Vicenzi
提交者:
jp9000
10月 30, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
linux-pulseaudio: Get correct default device
Closes jp9000/obs-studio#1030
上级
2c58185a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
45 addition
and
57 deletion
+45
-57
plugins/linux-pulseaudio/pulse-input.c
plugins/linux-pulseaudio/pulse-input.c
+45
-57
未找到文件。
plugins/linux-pulseaudio/pulse-input.c
浏览文件 @
b1ada2f9
...
...
@@ -33,6 +33,7 @@ struct pulse_data {
/* user settings */
char
*
device
;
bool
input
;
/* server info */
enum
speaker_layout
speakers
;
...
...
@@ -164,11 +165,30 @@ static void pulse_server_info(pa_context *c, const pa_server_info *i,
void
*
userdata
)
{
UNUSED_PARAMETER
(
c
);
UNUSED_PARAMETER
(
userdata
);
PULSE_DATA
(
userdata
);
blog
(
LOG_INFO
,
"Server name: '%s %s'"
,
i
->
server_name
,
i
->
server_version
);
if
(
data
->
device
&&
strcmp
(
"default"
,
data
->
device
)
==
0
)
{
if
(
data
->
input
)
{
bfree
(
data
->
device
);
data
->
device
=
bstrdup
(
i
->
default_source_name
);
blog
(
LOG_DEBUG
,
"Default input device: '%s'"
,
data
->
device
);
}
else
{
char
*
monitor
=
bzalloc
(
strlen
(
i
->
default_sink_name
)
+
9
);
strcat
(
monitor
,
i
->
default_sink_name
);
strcat
(
monitor
,
".monitor"
);
bfree
(
data
->
device
);
data
->
device
=
bstrdup
(
monitor
);
blog
(
LOG_DEBUG
,
"Default output device: '%s'"
,
data
->
device
);
bfree
(
monitor
);
}
}
pulse_signal
(
0
);
}
...
...
@@ -374,6 +394,12 @@ static obs_properties_t *pulse_properties(bool input)
pulse_get_sink_info_list
(
pulse_output_info
,
(
void
*
)
devices
);
pulse_unref
();
size_t
count
=
obs_property_list_item_count
(
devices
);
if
(
count
>
0
)
obs_property_list_insert_string
(
devices
,
0
,
obs_module_text
(
"Default"
),
"default"
);
return
props
;
}
...
...
@@ -391,61 +417,12 @@ static obs_properties_t *pulse_output_properties(void *unused)
return
pulse_properties
(
false
);
}
/**
* Server info callback
*/
static
void
pulse_input_device
(
pa_context
*
c
,
const
pa_server_info
*
i
,
void
*
userdata
)
{
UNUSED_PARAMETER
(
c
);
obs_data_t
*
settings
=
(
obs_data_t
*
)
userdata
;
obs_data_set_default_string
(
settings
,
"device_id"
,
i
->
default_source_name
);
blog
(
LOG_DEBUG
,
"Default input device: '%s'"
,
i
->
default_source_name
);
pulse_signal
(
0
);
}
static
void
pulse_output_device
(
pa_context
*
c
,
const
pa_server_info
*
i
,
void
*
userdata
)
{
UNUSED_PARAMETER
(
c
);
obs_data_t
*
settings
=
(
obs_data_t
*
)
userdata
;
char
*
monitor
=
bzalloc
(
strlen
(
i
->
default_sink_name
)
+
9
);
strcat
(
monitor
,
i
->
default_sink_name
);
strcat
(
monitor
,
".monitor"
);
obs_data_set_default_string
(
settings
,
"device_id"
,
monitor
);
blog
(
LOG_DEBUG
,
"Default output device: '%s'"
,
monitor
);
bfree
(
monitor
);
pulse_signal
(
0
);
}
/**
* Get plugin defaults
*/
static
void
pulse_defaults
(
obs_data_t
*
settings
,
bool
input
)
static
void
pulse_defaults
(
obs_data_t
*
settings
)
{
pulse_init
();
pa_server_info_cb_t
cb
=
(
input
)
?
pulse_input_device
:
pulse_output_device
;
pulse_get_server_info
(
cb
,
(
void
*
)
settings
);
pulse_unref
();
}
static
void
pulse_input_defaults
(
obs_data_t
*
settings
)
{
return
pulse_defaults
(
settings
,
true
);
}
static
void
pulse_output_defaults
(
obs_data_t
*
settings
)
{
return
pulse_defaults
(
settings
,
false
);
obs_data_set_default_string
(
settings
,
"device_id"
,
"default"
);
}
/**
...
...
@@ -510,10 +487,11 @@ static void pulse_update(void *vptr, obs_data_t *settings)
/**
* Create the plugin object
*/
static
void
*
pulse_create
(
obs_data_t
*
settings
,
obs_source_t
*
source
)
static
void
*
pulse_create
(
obs_data_t
*
settings
,
obs_source_t
*
source
,
bool
input
)
{
struct
pulse_data
*
data
=
bzalloc
(
sizeof
(
struct
pulse_data
));
data
->
input
=
input
;
data
->
source
=
source
;
pulse_init
();
...
...
@@ -522,16 +500,26 @@ static void *pulse_create(obs_data_t *settings, obs_source_t *source)
return
data
;
}
static
void
*
pulse_input_create
(
obs_data_t
*
settings
,
obs_source_t
*
source
)
{
return
pulse_create
(
settings
,
source
,
true
);
}
static
void
*
pulse_output_create
(
obs_data_t
*
settings
,
obs_source_t
*
source
)
{
return
pulse_create
(
settings
,
source
,
false
);
}
struct
obs_source_info
pulse_input_capture
=
{
.
id
=
"pulse_input_capture"
,
.
type
=
OBS_SOURCE_TYPE_INPUT
,
.
output_flags
=
OBS_SOURCE_AUDIO
|
OBS_SOURCE_DO_NOT_DUPLICATE
,
.
get_name
=
pulse_input_getname
,
.
create
=
pulse_create
,
.
create
=
pulse_
input_
create
,
.
destroy
=
pulse_destroy
,
.
update
=
pulse_update
,
.
get_defaults
=
pulse_
input_
defaults
,
.
get_defaults
=
pulse_defaults
,
.
get_properties
=
pulse_input_properties
};
...
...
@@ -542,9 +530,9 @@ struct obs_source_info pulse_output_capture = {
OBS_SOURCE_DO_NOT_DUPLICATE
|
OBS_SOURCE_DO_NOT_SELF_MONITOR
,
.
get_name
=
pulse_output_getname
,
.
create
=
pulse_create
,
.
create
=
pulse_
output_
create
,
.
destroy
=
pulse_destroy
,
.
update
=
pulse_update
,
.
get_defaults
=
pulse_
output_
defaults
,
.
get_defaults
=
pulse_defaults
,
.
get_properties
=
pulse_output_properties
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录