client-stream: activate peaks resampler when monitoring

This commit is contained in:
Wim Taymans 2018-12-05 16:00:52 +01:00
parent 5fcbbb4d6b
commit 4d780e87aa

View file

@ -948,7 +948,7 @@ static void client_node_initialized(void *data)
const struct pw_properties *props; const struct pw_properties *props;
const char *str, *dir, *type; const char *str, *dir, *type;
char media_class[64]; char media_class[64];
bool exclusive; bool exclusive, monitor;
struct spa_dict_item items[1]; struct spa_dict_item items[1];
pw_log_debug("client-stream %p: initialized", &impl->this); pw_log_debug("client-stream %p: initialized", &impl->this);
@ -982,6 +982,10 @@ static void client_node_initialized(void *data)
exclusive = pw_properties_parse_bool(str); exclusive = pw_properties_parse_bool(str);
else else
exclusive = false; exclusive = false;
if (props != NULL && (str = pw_properties_get(props, "pipewire.monitor")) != NULL)
monitor = pw_properties_parse_bool(str);
else
monitor = false;
spa_graph_node_add(impl->client_node->node->rt.driver, &impl->client_node->node->rt.root); spa_graph_node_add(impl->client_node->node->rt.driver, &impl->client_node->node->rt.root);
impl->client_node->node->driver_root = impl->this.node; impl->client_node->node->driver_root = impl->this.node;
@ -1027,8 +1031,7 @@ static void client_node_initialized(void *data)
if (!exclusive && if (!exclusive &&
media_type == SPA_MEDIA_TYPE_audio && media_type == SPA_MEDIA_TYPE_audio &&
media_subtype == SPA_MEDIA_SUBTYPE_raw) { media_subtype == SPA_MEDIA_SUBTYPE_raw) {
struct spa_dict dict; struct spa_dict_item items[2];
struct spa_dict_item items[1];
const char *mode; const char *mode;
if (impl->direction == SPA_DIRECTION_OUTPUT) if (impl->direction == SPA_DIRECTION_OUTPUT)
@ -1037,10 +1040,13 @@ static void client_node_initialized(void *data)
mode = "merge"; mode = "merge";
items[0] = SPA_DICT_ITEM_INIT("factory.mode", mode); items[0] = SPA_DICT_ITEM_INIT("factory.mode", mode);
dict = SPA_DICT_INIT(items, 1); items[1] = SPA_DICT_ITEM_INIT("resample.peaks", monitor ? "1" : "0");
if ((impl->adapter = pw_load_spa_interface("audioconvert/libspa-audioconvert", if ((impl->adapter = pw_load_spa_interface("audioconvert/libspa-audioconvert",
"audioconvert", SPA_TYPE_INTERFACE_Node, &dict, 0, NULL)) == NULL) "audioconvert",
SPA_TYPE_INTERFACE_Node,
&SPA_DICT_INIT(items, 2),
0, NULL)) == NULL)
return; return;
impl->adapter_mix = impl->adapter; impl->adapter_mix = impl->adapter;