media-session: ignore empty channelMap/channelVolume

This commit is contained in:
Wim Taymans 2020-11-23 20:18:32 +01:00
parent 95e2ec9f72
commit b86acec625
2 changed files with 20 additions and 0 deletions

View file

@ -165,6 +165,8 @@ static char *serialize_props(struct device *dev, const struct spa_pod *param)
n_vals = spa_pod_copy_array(&prop->value, SPA_TYPE_Float, n_vals = spa_pod_copy_array(&prop->value, SPA_TYPE_Float,
vals, SPA_AUDIO_MAX_CHANNELS); vals, SPA_AUDIO_MAX_CHANNELS);
if (n_vals == 0)
continue;
fprintf(f, "%s\"volumes\": [", (comma ? ", " : "")); fprintf(f, "%s\"volumes\": [", (comma ? ", " : ""));
for (i = 0; i < n_vals; i++) for (i = 0; i < n_vals; i++)
@ -179,6 +181,8 @@ static char *serialize_props(struct device *dev, const struct spa_pod *param)
n_vals = spa_pod_copy_array(&prop->value, SPA_TYPE_Id, n_vals = spa_pod_copy_array(&prop->value, SPA_TYPE_Id,
map, SPA_AUDIO_MAX_CHANNELS); map, SPA_AUDIO_MAX_CHANNELS);
if (n_vals == 0)
continue;
fprintf(f, "%s\"channels\": [", (comma ? ", " : "")); fprintf(f, "%s\"channels\": [", (comma ? ", " : ""));
for (i = 0; i < n_vals; i++) for (i = 0; i < n_vals; i++)
@ -247,6 +251,9 @@ static int restore_route(struct device *dev, const char *val, uint32_t index, ui
if (spa_json_get_float(&it[2], &vols[n_vols]) <= 0) if (spa_json_get_float(&it[2], &vols[n_vols]) <= 0)
break; break;
} }
if (n_vols == 0)
continue;
spa_pod_builder_prop(&b, SPA_PROP_channelVolumes, 0); spa_pod_builder_prop(&b, SPA_PROP_channelVolumes, 0);
spa_pod_builder_array(&b, sizeof(float), SPA_TYPE_Float, spa_pod_builder_array(&b, sizeof(float), SPA_TYPE_Float,
n_vols, vols); n_vols, vols);
@ -264,6 +271,9 @@ static int restore_route(struct device *dev, const char *val, uint32_t index, ui
break; break;
map[n_ch] = channel_from_name(chname); map[n_ch] = channel_from_name(chname);
} }
if (n_ch == 0)
continue;
spa_pod_builder_prop(&b, SPA_PROP_channelMap, 0); spa_pod_builder_prop(&b, SPA_PROP_channelMap, 0);
spa_pod_builder_array(&b, sizeof(uint32_t), SPA_TYPE_Id, spa_pod_builder_array(&b, sizeof(uint32_t), SPA_TYPE_Id,
n_ch, map); n_ch, map);

View file

@ -172,6 +172,8 @@ static char *serialize_props(struct stream *str, const struct spa_pod *param)
n_vals = spa_pod_copy_array(&prop->value, SPA_TYPE_Float, n_vals = spa_pod_copy_array(&prop->value, SPA_TYPE_Float,
vals, SPA_AUDIO_MAX_CHANNELS); vals, SPA_AUDIO_MAX_CHANNELS);
if (n_vals == 0)
continue;
fprintf(f, "%s\"volumes\": [", (comma ? ", " : "")); fprintf(f, "%s\"volumes\": [", (comma ? ", " : ""));
for (i = 0; i < n_vals; i++) for (i = 0; i < n_vals; i++)
@ -186,6 +188,8 @@ static char *serialize_props(struct stream *str, const struct spa_pod *param)
n_ch = spa_pod_copy_array(&prop->value, SPA_TYPE_Id, n_ch = spa_pod_copy_array(&prop->value, SPA_TYPE_Id,
map, SPA_AUDIO_MAX_CHANNELS); map, SPA_AUDIO_MAX_CHANNELS);
if (n_ch == 0)
continue;
fprintf(f, "%s\"channels\": [", (comma ? ", " : "")); fprintf(f, "%s\"channels\": [", (comma ? ", " : ""));
for (i = 0; i < n_ch; i++) for (i = 0; i < n_ch; i++)
@ -310,6 +314,9 @@ static int restore_stream(struct stream *str, const char *val)
if (spa_json_get_float(&it[2], &vols[n_vols]) <= 0) if (spa_json_get_float(&it[2], &vols[n_vols]) <= 0)
break; break;
} }
if (n_vols == 0)
continue;
spa_pod_builder_prop(&b, SPA_PROP_channelVolumes, 0); spa_pod_builder_prop(&b, SPA_PROP_channelVolumes, 0);
spa_pod_builder_array(&b, sizeof(float), SPA_TYPE_Float, spa_pod_builder_array(&b, sizeof(float), SPA_TYPE_Float,
n_vols, vols); n_vols, vols);
@ -327,6 +334,9 @@ static int restore_stream(struct stream *str, const char *val)
break; break;
map[n_ch] = channel_from_name(chname); map[n_ch] = channel_from_name(chname);
} }
if (n_ch == 0)
continue;
spa_pod_builder_prop(&b, SPA_PROP_channelMap, 0); spa_pod_builder_prop(&b, SPA_PROP_channelMap, 0);
spa_pod_builder_array(&b, sizeof(uint32_t), SPA_TYPE_Id, spa_pod_builder_array(&b, sizeof(uint32_t), SPA_TYPE_Id,
n_ch, map); n_ch, map);