mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
audioconvert: don't negottiate rate when resample is disabled
This will leave the negotiated rate 0 when parsed and instructs the stream to follow the graph rate.
This commit is contained in:
parent
4cc22d60d2
commit
0156d63109
2 changed files with 18 additions and 6 deletions
|
|
@ -1893,11 +1893,13 @@ static int port_enum_formats(void *object,
|
||||||
SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_application),
|
SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_application),
|
||||||
SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_control));
|
SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_control));
|
||||||
} else {
|
} else {
|
||||||
|
struct spa_pod_frame f[1];
|
||||||
uint32_t rate = this->io_position ?
|
uint32_t rate = this->io_position ?
|
||||||
this->io_position->clock.target_rate.denom : DEFAULT_RATE;
|
this->io_position->clock.target_rate.denom : DEFAULT_RATE;
|
||||||
|
|
||||||
*param = spa_pod_builder_add_object(builder,
|
spa_pod_builder_push_object(builder, &f[0],
|
||||||
SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
|
SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat);
|
||||||
|
spa_pod_builder_add(builder,
|
||||||
SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_audio),
|
SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_audio),
|
||||||
SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
|
SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
|
||||||
SPA_FORMAT_AUDIO_format, SPA_POD_CHOICE_ENUM_Id(25,
|
SPA_FORMAT_AUDIO_format, SPA_POD_CHOICE_ENUM_Id(25,
|
||||||
|
|
@ -1926,10 +1928,18 @@ static int port_enum_formats(void *object,
|
||||||
SPA_AUDIO_FORMAT_U8,
|
SPA_AUDIO_FORMAT_U8,
|
||||||
SPA_AUDIO_FORMAT_ULAW,
|
SPA_AUDIO_FORMAT_ULAW,
|
||||||
SPA_AUDIO_FORMAT_ALAW),
|
SPA_AUDIO_FORMAT_ALAW),
|
||||||
SPA_FORMAT_AUDIO_rate, SPA_POD_CHOICE_RANGE_Int(
|
0);
|
||||||
rate, 1, INT32_MAX),
|
if (!this->props.resample_disabled) {
|
||||||
|
spa_pod_builder_add(builder,
|
||||||
|
SPA_FORMAT_AUDIO_rate, SPA_POD_CHOICE_RANGE_Int(
|
||||||
|
rate, 1, INT32_MAX),
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
spa_pod_builder_add(builder,
|
||||||
SPA_FORMAT_AUDIO_channels, SPA_POD_CHOICE_RANGE_Int(
|
SPA_FORMAT_AUDIO_channels, SPA_POD_CHOICE_RANGE_Int(
|
||||||
DEFAULT_CHANNELS, 1, SPA_AUDIO_MAX_CHANNELS));
|
DEFAULT_CHANNELS, 1, SPA_AUDIO_MAX_CHANNELS),
|
||||||
|
0);
|
||||||
|
*param = spa_pod_builder_pop(builder, &f[0]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -2205,7 +2215,7 @@ static int port_set_format(void *object,
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
if (info.info.raw.format == 0 ||
|
if (info.info.raw.format == 0 ||
|
||||||
info.info.raw.rate == 0 ||
|
(!this->props.resample_disabled && info.info.raw.rate == 0) ||
|
||||||
info.info.raw.channels == 0 ||
|
info.info.raw.channels == 0 ||
|
||||||
info.info.raw.channels > SPA_AUDIO_MAX_CHANNELS) {
|
info.info.raw.channels > SPA_AUDIO_MAX_CHANNELS) {
|
||||||
spa_log_error(this->log, "invalid format:%d rate:%d channels:%d",
|
spa_log_error(this->log, "invalid format:%d rate:%d channels:%d",
|
||||||
|
|
|
||||||
|
|
@ -519,6 +519,8 @@ int format_parse_param(const struct spa_pod *param, bool collect,
|
||||||
if (ss != NULL)
|
if (ss != NULL)
|
||||||
*ss = *def_ss;
|
*ss = *def_ss;
|
||||||
} else {
|
} else {
|
||||||
|
if (info.info.raw.rate == 0)
|
||||||
|
info.info.raw.rate = 48000;
|
||||||
if (info.info.raw.format == 0 ||
|
if (info.info.raw.format == 0 ||
|
||||||
info.info.raw.rate == 0 ||
|
info.info.raw.rate == 0 ||
|
||||||
info.info.raw.channels == 0 ||
|
info.info.raw.channels == 0 ||
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue