mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-03-09 05:34:03 -04:00
pw-cat: add support for streaming
sndfile actually supports reading and writing from/to stdin/out with the - filename, so allow that. Add support for streaming in dsf, dff and midifile as well. Add a -a option to pw-cat use a pipe with raw bytes, otherwise try to use the parsers and sndfile to read/write from/to stdin/stdout. You can then do things like: sox 2L-053_04_stereo-DSD64.dff -t dsf - | pw-cat -pdv - pw-cat 07.Joe.Satriani.Clouds.race.across.the.sky.wav | pw-cat -pv - pw-cat -rmv --target=0 - | pw-mididump - Fixes: #4204
This commit is contained in:
parent
d9bd2628d9
commit
19f4fac1e1
4 changed files with 343 additions and 233 deletions
|
|
@ -103,6 +103,7 @@ struct data {
|
|||
#define TYPE_ENCODED 3
|
||||
#endif
|
||||
int data_type;
|
||||
bool raw;
|
||||
const char *remote_name;
|
||||
const char *media_type;
|
||||
const char *media_category;
|
||||
|
|
@ -980,6 +981,7 @@ static const struct option long_options[] = {
|
|||
{ "format", required_argument, NULL, OPT_FORMAT },
|
||||
{ "volume", required_argument, NULL, OPT_VOLUME },
|
||||
{ "quality", required_argument, NULL, 'q' },
|
||||
{ "raw", no_argument, NULL, 'a' },
|
||||
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
|
|
@ -1024,6 +1026,7 @@ static void show_usage(const char *name, bool is_error)
|
|||
" --format Sample format %s (req. for rec) (default %s)\n"
|
||||
" --volume Stream volume 0-1.0 (default %.3f)\n"
|
||||
" -q --quality Resampler quality (0 - 15) (default %d)\n"
|
||||
" -a, --raw RAW mode\n"
|
||||
"\n"),
|
||||
DEFAULT_RATE,
|
||||
DEFAULT_CHANNELS,
|
||||
|
|
@ -1691,9 +1694,9 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
#ifdef HAVE_PW_CAT_FFMPEG_INTEGRATION
|
||||
while ((c = getopt_long(argc, argv, "hvprmdoR:q:P:", long_options, NULL)) != -1) {
|
||||
while ((c = getopt_long(argc, argv, "hvprmdoR:q:P:a", long_options, NULL)) != -1) {
|
||||
#else
|
||||
while ((c = getopt_long(argc, argv, "hvprmdR:q:P:", long_options, NULL)) != -1) {
|
||||
while ((c = getopt_long(argc, argv, "hvprmdR:q:P:a", long_options, NULL)) != -1) {
|
||||
#endif
|
||||
|
||||
switch (c) {
|
||||
|
|
@ -1745,6 +1748,10 @@ int main(int argc, char *argv[])
|
|||
data.quality = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
data.raw = true;
|
||||
break;
|
||||
|
||||
case OPT_MEDIA_TYPE:
|
||||
data.media_type = optarg;
|
||||
break;
|
||||
|
|
@ -1893,7 +1900,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
pw_core_add_listener(data.core, &data.core_listener, &core_events, &data);
|
||||
|
||||
if (spa_streq(data.filename, "-")) {
|
||||
if (data.raw) {
|
||||
ret = setup_pipe(&data);
|
||||
} else {
|
||||
switch (data.data_type) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue