mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-05 13:30:02 -05:00
88 lines
2.1 KiB
C
88 lines
2.1 KiB
C
#ifndef MODULE_ROC_COMMON_H
|
|
#define MODULE_ROC_COMMON_H
|
|
|
|
#include <roc/config.h>
|
|
#include <roc/endpoint.h>
|
|
|
|
#include <spa/utils/string.h>
|
|
|
|
#define PW_ROC_DEFAULT_IP "0.0.0.0"
|
|
#define PW_ROC_DEFAULT_SOURCE_PORT 10001
|
|
#define PW_ROC_DEFAULT_REPAIR_PORT 10002
|
|
#define PW_ROC_DEFAULT_SESS_LATENCY 200
|
|
#define PW_ROC_DEFAULT_RATE 44100
|
|
|
|
static inline int pw_roc_parse_fec_encoding(roc_fec_encoding *out, const char *str)
|
|
{
|
|
if (!str || !*str)
|
|
*out = ROC_FEC_ENCODING_DEFAULT;
|
|
else if (spa_streq(str, "disable"))
|
|
*out = ROC_FEC_ENCODING_DISABLE;
|
|
else if (spa_streq(str, "rs8m"))
|
|
*out = ROC_FEC_ENCODING_RS8M;
|
|
else if (spa_streq(str, "ldpc"))
|
|
*out = ROC_FEC_ENCODING_LDPC_STAIRCASE;
|
|
else
|
|
return -EINVAL;
|
|
return 0;
|
|
}
|
|
|
|
static inline int pw_roc_parse_resampler_profile(roc_resampler_profile *out, const char *str)
|
|
{
|
|
if (!str || !*str)
|
|
*out = ROC_RESAMPLER_PROFILE_DEFAULT;
|
|
else if (spa_streq(str, "high"))
|
|
*out = ROC_RESAMPLER_PROFILE_HIGH;
|
|
else if (spa_streq(str, "medium"))
|
|
*out = ROC_RESAMPLER_PROFILE_MEDIUM;
|
|
else if (spa_streq(str, "low"))
|
|
*out = ROC_RESAMPLER_PROFILE_LOW;
|
|
else
|
|
return -EINVAL;
|
|
return 0;
|
|
}
|
|
|
|
static inline int pw_roc_create_endpoint(roc_endpoint **result, roc_protocol protocol, const char *ip, int port)
|
|
{
|
|
roc_endpoint *endpoint;
|
|
|
|
if (roc_endpoint_allocate(&endpoint))
|
|
return -ENOMEM;
|
|
|
|
if (roc_endpoint_set_protocol(endpoint, protocol))
|
|
goto out_error_free_ep;
|
|
|
|
if (roc_endpoint_set_host(endpoint, ip))
|
|
goto out_error_free_ep;
|
|
|
|
if (roc_endpoint_set_port(endpoint, port))
|
|
goto out_error_free_ep;
|
|
|
|
*result = endpoint;
|
|
return 0;
|
|
|
|
out_error_free_ep:
|
|
(void) roc_endpoint_deallocate(endpoint);
|
|
return -EINVAL;
|
|
}
|
|
|
|
static inline void pw_roc_fec_encoding_to_proto(roc_fec_encoding fec_code, roc_protocol *audio, roc_protocol *repair)
|
|
{
|
|
switch (fec_code) {
|
|
case ROC_FEC_ENCODING_DEFAULT:
|
|
case ROC_FEC_ENCODING_RS8M:
|
|
*audio = ROC_PROTO_RTP_RS8M_SOURCE;
|
|
*repair = ROC_PROTO_RS8M_REPAIR;
|
|
break;
|
|
case ROC_FEC_ENCODING_LDPC_STAIRCASE:
|
|
*audio = ROC_PROTO_RTP_LDPC_SOURCE;
|
|
*repair = ROC_PROTO_LDPC_REPAIR;
|
|
break;
|
|
default:
|
|
*audio = ROC_PROTO_RTP;
|
|
*repair = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endif /* MODULE_ROC_COMMON_H */
|