Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
尘离序散
obs-studio
提交
eb5745a3
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,发现更多精彩内容 >>
提交
eb5745a3
编写于
8月 10, 2015
作者:
P
Palana
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
coreaudio-encoder: Add output sample rate setting/property
上级
5172328a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
95 addition
and
4 deletion
+95
-4
plugins/coreaudio-encoder/data/locale/en-US.ini
plugins/coreaudio-encoder/data/locale/en-US.ini
+2
-0
plugins/coreaudio-encoder/encoder.cpp
plugins/coreaudio-encoder/encoder.cpp
+93
-4
未找到文件。
plugins/coreaudio-encoder/data/locale/en-US.ini
浏览文件 @
eb5745a3
CoreAudioAAC
=
"CoreAudio AAC encoder"
Bitrate
=
"Bitrate"
AllowHEAAC
=
"Allow HE-AAC"
OutputSamplerate
=
"Output Sample Rate"
UseInputSampleRate
=
"Use Input (OBS) Sample Rate (may list unsupported bitrates)"
plugins/coreaudio-encoder/encoder.cpp
浏览文件 @
eb5745a3
...
...
@@ -427,7 +427,8 @@ static bool bitrate_valid(DStr &log, ca_encoder *ca,
static
bool
create_encoder
(
DStr
&
log
,
ca_encoder
*
ca
,
AudioStreamBasicDescription
*
in
,
AudioStreamBasicDescription
*
out
,
UInt32
format_id
,
UInt32
bitrate
,
UInt32
rate_control
)
UInt32
format_id
,
UInt32
bitrate
,
UInt32
samplerate
,
UInt32
rate_control
)
{
#define STATUS_CHECK(c) \
code = c; \
...
...
@@ -437,8 +438,12 @@ static bool create_encoder(DStr &log, ca_encoder *ca,
return false; \
}
Float64
srate
=
samplerate
?
(
Float64
)
samplerate
:
(
Float64
)
ca
->
samples_per_second
;
auto
out_
=
asbd_builder
()
.
sample_rate
(
(
Float64
)
ca
->
samples_per_second
)
.
sample_rate
(
srate
)
.
channels_per_frame
((
UInt32
)
ca
->
channels
)
.
format_id
(
format_id
)
.
asbd
;
...
...
@@ -550,6 +555,9 @@ static void *aac_create(obs_data_t *settings, obs_encoder_t *encoder)
ca
->
allowed_formats
=
&
aac_lc_formats
;
}
auto
samplerate
=
static_cast
<
UInt32
>
(
obs_data_get_int
(
settings
,
"samplerate"
));
DStr
log
;
bool
encoder_created
=
false
;
...
...
@@ -559,7 +567,7 @@ static void *aac_create(obs_data_t *settings, obs_encoder_t *encoder)
(
uint32_t
)
format_id
);
if
(
!
create_encoder
(
log
,
ca
.
get
(),
&
in
,
&
out
,
format_id
,
bitrate
,
rate_control
))
bitrate
,
samplerate
,
rate_control
))
continue
;
encoder_created
=
true
;
...
...
@@ -1031,6 +1039,7 @@ static UInt32 find_matching_bitrate(UInt32 bitrate)
static
void
aac_defaults
(
obs_data_t
*
settings
)
{
obs_data_set_default_int
(
settings
,
"samplerate"
,
0
);
//match input
obs_data_set_default_int
(
settings
,
"bitrate"
,
find_matching_bitrate
(
128
));
obs_data_set_default_bool
(
settings
,
"allow he-aac"
,
true
);
...
...
@@ -1123,6 +1132,81 @@ static bool enumerate_bitrates(DStr &log, ca_encoder *ca,
}
#endif
static
vector
<
UInt32
>
get_samplerates
(
DStr
&
log
,
ca_encoder
*
ca
)
{
vector
<
UInt32
>
samplerates
;
auto
handle_samplerate
=
[
&
](
UInt32
rate
)
{
if
(
find
(
begin
(
samplerates
),
end
(
samplerates
),
rate
)
==
end
(
samplerates
))
{
log_to_dstr
(
log
,
ca
,
"Adding sample rate %u
\n
"
,
static_cast
<
uint32_t
>
(
rate
));
samplerates
.
push_back
(
rate
);
}
else
{
log_to_dstr
(
log
,
ca
,
"Sample rate %u already added
\n
"
,
static_cast
<
uint32_t
>
(
rate
));
}
};
auto
helper
=
[
&
](
const
AudioValueRange
&
range
)
{
auto
min_
=
static_cast
<
UInt32
>
(
range
.
mMinimum
);
auto
max_
=
static_cast
<
UInt32
>
(
range
.
mMaximum
);
handle_samplerate
(
min_
);
if
(
min_
==
max_
)
return
;
log_to_dstr
(
log
,
ca
,
"Got actual sample rate range: %u<->%u
\n
"
,
static_cast
<
uint32_t
>
(
min_
),
static_cast
<
uint32_t
>
(
max_
));
handle_samplerate
(
max_
);
};
for
(
UInt32
format
:
(
ca
?
*
ca
->
allowed_formats
:
aac_formats
))
{
log_to_dstr
(
log
,
ca
,
"Trying %s (0x%x)
\n
"
,
format_id_to_str
(
format
),
static_cast
<
uint32_t
>
(
format
));
auto
asbd
=
asbd_builder
()
.
format_id
(
format
)
.
asbd
;
enumerate_samplerates
(
log
,
ca
,
asbd
,
helper
);
}
return
samplerates
;
}
static
void
add_samplerates
(
obs_property_t
*
prop
,
ca_encoder
*
ca
)
{
obs_property_list_add_int
(
prop
,
obs_module_text
(
"UseInputSampleRate"
),
0
);
DStr
log
;
auto
samplerates
=
get_samplerates
(
log
,
ca
);
if
(
!
samplerates
.
size
())
{
CA_CO_DLOG_
(
LOG_ERROR
,
"Couldn't find available sample rates"
);
return
;
}
if
(
log
->
len
)
CA_CO_DLOG_
(
LOG_DEBUG
,
"Sample rate enumeration log"
);
sort
(
begin
(
samplerates
),
end
(
samplerates
));
DStr
buffer
;
for
(
UInt32
samplerate
:
samplerates
)
{
dstr_printf
(
buffer
,
"%d"
,
static_cast
<
uint32_t
>
(
samplerate
));
obs_property_list_add_int
(
prop
,
buffer
->
array
,
samplerate
);
}
}
static
vector
<
UInt32
>
get_bitrates
(
DStr
&
log
,
ca_encoder
*
ca
,
Float64
samplerate
)
{
...
...
@@ -1205,7 +1289,12 @@ static obs_properties_t *aac_properties(void *data)
obs_properties_t
*
props
=
obs_properties_create
();
obs_property_t
*
p
=
obs_properties_add_list
(
props
,
"bitrate"
,
obs_property_t
*
p
=
obs_properties_add_list
(
props
,
"samplerate"
,
obs_module_text
(
"OutputSamplerate"
),
OBS_COMBO_TYPE_LIST
,
OBS_COMBO_FORMAT_INT
);
add_samplerates
(
p
,
ca
);
p
=
obs_properties_add_list
(
props
,
"bitrate"
,
obs_module_text
(
"Bitrate"
),
OBS_COMBO_TYPE_LIST
,
OBS_COMBO_FORMAT_INT
);
add_bitrates
(
p
,
ca
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录