mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
pod-builder: move some code around to help gcc 13
Make sure to pop the frame before returning errors to stop gcc13 from complaining with -Wdangling-pointer Fixes #3171
This commit is contained in:
parent
83d2e85f49
commit
0333ddff45
6 changed files with 22 additions and 19 deletions
|
|
@ -1062,6 +1062,10 @@ static int enum_pcm_formats(struct state *state, uint32_t index, uint32_t *next,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (j > 1)
|
||||||
|
choice->body.type = SPA_CHOICE_Enum;
|
||||||
|
spa_pod_builder_pop(b, &f[1]);
|
||||||
|
|
||||||
if (j == 0) {
|
if (j == 0) {
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
int i, r, offs;
|
int i, r, offs;
|
||||||
|
|
@ -1090,9 +1094,6 @@ static int enum_pcm_formats(struct state *state, uint32_t index, uint32_t *next,
|
||||||
spa_log_warn(state->log, "%s: access:%s", state->props.device, buf);
|
spa_log_warn(state->log, "%s: access:%s", state->props.device, buf);
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
if (j > 1)
|
|
||||||
choice->body.type = SPA_CHOICE_Enum;
|
|
||||||
spa_pod_builder_pop(b, &f[1]);
|
|
||||||
|
|
||||||
if ((res = add_rate(state, 1, 1, false, index & 0xffff, next, 0, params, b)) != 1)
|
if ((res = add_rate(state, 1, 1, false, index & 0xffff, next, 0, params, b)) != 1)
|
||||||
return res;
|
return res;
|
||||||
|
|
|
||||||
|
|
@ -193,12 +193,12 @@ static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||||
spa_pod_builder_int(b, f->value);
|
spa_pod_builder_int(b, f->value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i == 0)
|
|
||||||
return -EINVAL;
|
|
||||||
if (i > 1)
|
if (i > 1)
|
||||||
choice->body.type = SPA_CHOICE_Enum;
|
choice->body.type = SPA_CHOICE_Enum;
|
||||||
spa_pod_builder_pop(b, &f[1]);
|
spa_pod_builder_pop(b, &f[1]);
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (SPA_FLAG_IS_SET(conf.channels, AAC_CHANNELS_1 | AAC_CHANNELS_2)) {
|
if (SPA_FLAG_IS_SET(conf.channels, AAC_CHANNELS_1 | AAC_CHANNELS_2)) {
|
||||||
spa_pod_builder_add(b,
|
spa_pod_builder_add(b,
|
||||||
|
|
|
||||||
|
|
@ -247,12 +247,13 @@ static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||||
spa_pod_builder_int(b, 16000);
|
spa_pod_builder_int(b, 16000);
|
||||||
spa_pod_builder_int(b, 16000);
|
spa_pod_builder_int(b, 16000);
|
||||||
}
|
}
|
||||||
if (i == 0)
|
|
||||||
return -EINVAL;
|
|
||||||
if (i > 1)
|
if (i > 1)
|
||||||
choice->body.type = SPA_CHOICE_Enum;
|
choice->body.type = SPA_CHOICE_Enum;
|
||||||
spa_pod_builder_pop(b, &f[1]);
|
spa_pod_builder_pop(b, &f[1]);
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (SPA_FLAG_IS_SET(conf.channel_mode, APTX_CHANNEL_MODE_MONO | APTX_CHANNEL_MODE_STEREO)) {
|
if (SPA_FLAG_IS_SET(conf.channel_mode, APTX_CHANNEL_MODE_MONO | APTX_CHANNEL_MODE_STEREO)) {
|
||||||
spa_pod_builder_add(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_FORMAT_AUDIO_channels, SPA_POD_CHOICE_RANGE_Int(2, 1, 2),
|
SPA_FORMAT_AUDIO_channels, SPA_POD_CHOICE_RANGE_Int(2, 1, 2),
|
||||||
|
|
|
||||||
|
|
@ -148,11 +148,11 @@ static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||||
spa_pod_builder_int(b, 44100);
|
spa_pod_builder_int(b, 44100);
|
||||||
spa_pod_builder_int(b, 44100);
|
spa_pod_builder_int(b, 44100);
|
||||||
}
|
}
|
||||||
if (i == 0)
|
|
||||||
return -EINVAL;
|
|
||||||
if (i > 1)
|
if (i > 1)
|
||||||
choice->body.type = SPA_CHOICE_Enum;
|
choice->body.type = SPA_CHOICE_Enum;
|
||||||
spa_pod_builder_pop(b, &f[1]);
|
spa_pod_builder_pop(b, &f[1]);
|
||||||
|
if (i == 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
position[0] = SPA_AUDIO_CHANNEL_FL;
|
position[0] = SPA_AUDIO_CHANNEL_FL;
|
||||||
position[1] = SPA_AUDIO_CHANNEL_FR;
|
position[1] = SPA_AUDIO_CHANNEL_FR;
|
||||||
|
|
|
||||||
|
|
@ -184,12 +184,13 @@ static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||||
spa_pod_builder_int(b, 96000);
|
spa_pod_builder_int(b, 96000);
|
||||||
spa_pod_builder_int(b, 96000);
|
spa_pod_builder_int(b, 96000);
|
||||||
}
|
}
|
||||||
if (i == 0)
|
|
||||||
return -EINVAL;
|
|
||||||
if (i > 1)
|
if (i > 1)
|
||||||
choice->body.type = SPA_CHOICE_Enum;
|
choice->body.type = SPA_CHOICE_Enum;
|
||||||
spa_pod_builder_pop(b, &f[1]);
|
spa_pod_builder_pop(b, &f[1]);
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (conf.channel_mode & LDACBT_CHANNEL_MODE_MONO &&
|
if (conf.channel_mode & LDACBT_CHANNEL_MODE_MONO &&
|
||||||
conf.channel_mode & (LDACBT_CHANNEL_MODE_STEREO |
|
conf.channel_mode & (LDACBT_CHANNEL_MODE_STEREO |
|
||||||
LDACBT_CHANNEL_MODE_DUAL_CHANNEL)) {
|
LDACBT_CHANNEL_MODE_DUAL_CHANNEL)) {
|
||||||
|
|
|
||||||
|
|
@ -400,7 +400,7 @@ struct spa_pod_prop_body0 {
|
||||||
static int remap_from_v2(uint32_t type, void *body, uint32_t size, struct pw_impl_client *client,
|
static int remap_from_v2(uint32_t type, void *body, uint32_t size, struct pw_impl_client *client,
|
||||||
struct spa_pod_builder *builder)
|
struct spa_pod_builder *builder)
|
||||||
{
|
{
|
||||||
int res;
|
int res = 0;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SPA_TYPE_Id:
|
case SPA_TYPE_Id:
|
||||||
|
|
@ -445,17 +445,17 @@ static int remap_from_v2(uint32_t type, void *body, uint32_t size, struct pw_imp
|
||||||
if (b->value.type == SPA_TYPE_Id) {
|
if (b->value.type == SPA_TYPE_Id) {
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
if ((res = spa_pod_get_id(&b->value, &id)) < 0)
|
if ((res = spa_pod_get_id(&b->value, &id)) < 0)
|
||||||
return res;
|
goto done;
|
||||||
|
|
||||||
spa_pod_builder_id(builder, pw_protocol_native0_type_from_v2(client, id));
|
spa_pod_builder_id(builder, pw_protocol_native0_type_from_v2(client, id));
|
||||||
SPA_POD_PROP_ALTERNATIVE_FOREACH0(b, size, alt)
|
SPA_POD_PROP_ALTERNATIVE_FOREACH0(b, size, alt)
|
||||||
if ((res = remap_from_v2(b->value.type, alt, b->value.size, client, builder)) < 0)
|
if ((res = remap_from_v2(b->value.type, alt, b->value.size, client, builder)) < 0)
|
||||||
return res;
|
break;
|
||||||
} else {
|
} else {
|
||||||
spa_pod_builder_raw(builder, &b->value, size - sizeof(struct spa_pod));
|
spa_pod_builder_raw(builder, &b->value, size - sizeof(struct spa_pod));
|
||||||
}
|
}
|
||||||
|
done:
|
||||||
spa_pod_builder_pop(builder, &f);
|
spa_pod_builder_pop(builder, &f);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPA_TYPE_Object:
|
case SPA_TYPE_Object:
|
||||||
|
|
@ -493,7 +493,7 @@ static int remap_from_v2(uint32_t type, void *body, uint32_t size, struct pw_imp
|
||||||
SPA_POD_BODY(p),
|
SPA_POD_BODY(p),
|
||||||
p->size,
|
p->size,
|
||||||
client, builder)) < 0)
|
client, builder)) < 0)
|
||||||
return res;
|
break;
|
||||||
}
|
}
|
||||||
spa_pod_builder_pop(builder, &f);
|
spa_pod_builder_pop(builder, &f);
|
||||||
break;
|
break;
|
||||||
|
|
@ -506,14 +506,14 @@ static int remap_from_v2(uint32_t type, void *body, uint32_t size, struct pw_imp
|
||||||
spa_pod_builder_push_struct(builder, &f);
|
spa_pod_builder_push_struct(builder, &f);
|
||||||
SPA_POD_FOREACH(b, size, p)
|
SPA_POD_FOREACH(b, size, p)
|
||||||
if ((res = remap_from_v2(p->type, SPA_POD_BODY(p), p->size, client, builder)) < 0)
|
if ((res = remap_from_v2(p->type, SPA_POD_BODY(p), p->size, client, builder)) < 0)
|
||||||
return res;
|
break;
|
||||||
spa_pod_builder_pop(builder, &f);
|
spa_pod_builder_pop(builder, &f);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int remap_to_v2(struct pw_impl_client *client, const struct spa_type_info *info,
|
static int remap_to_v2(struct pw_impl_client *client, const struct spa_type_info *info,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue