mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
pw-cat: relax some more checks
Don't really care about the format, let sndfile convert and decode for us to the nearest supported format or else to f32. Fixes support for ogg.
This commit is contained in:
parent
e1e93e5a88
commit
116b13b1e2
1 changed files with 8 additions and 46 deletions
|
|
@ -127,28 +127,6 @@ struct data {
|
||||||
bool drained;
|
bool drained;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline bool
|
|
||||||
sf_is_valid_type(int format)
|
|
||||||
{
|
|
||||||
int type = (format & SF_FORMAT_TYPEMASK);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
return type == SF_FORMAT_WAV || type == SF_FORMAT_WAVEX;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
sf_is_valid_subtype(int format)
|
|
||||||
{
|
|
||||||
int sub_type = (format & SF_FORMAT_SUBMASK);
|
|
||||||
|
|
||||||
return sub_type == SF_FORMAT_PCM_S8 ||
|
|
||||||
sub_type == SF_FORMAT_PCM_16 ||
|
|
||||||
sub_type == SF_FORMAT_PCM_24 ||
|
|
||||||
sub_type == SF_FORMAT_PCM_32 ||
|
|
||||||
sub_type == SF_FORMAT_FLOAT ||
|
|
||||||
sub_type == SF_FORMAT_DOUBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
sf_str_to_fmt(const char *str)
|
sf_str_to_fmt(const char *str)
|
||||||
{
|
{
|
||||||
|
|
@ -197,13 +175,6 @@ sf_fmt_to_str(int format)
|
||||||
static inline int
|
static inline int
|
||||||
sf_format_endianess(int format)
|
sf_format_endianess(int format)
|
||||||
{
|
{
|
||||||
switch (format & SF_FORMAT_TYPEMASK) {
|
|
||||||
case SF_FORMAT_WAV:
|
|
||||||
case SF_FORMAT_WAVEX:
|
|
||||||
return 0; /* sf_readf_* return native format */
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return 0; /* native */
|
return 0; /* native */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -228,15 +199,15 @@ sf_format_to_pw(int format)
|
||||||
return endianess == 1 ? SPA_AUDIO_FORMAT_S32_LE :
|
return endianess == 1 ? SPA_AUDIO_FORMAT_S32_LE :
|
||||||
endianess == 2 ? SPA_AUDIO_FORMAT_S32_BE :
|
endianess == 2 ? SPA_AUDIO_FORMAT_S32_BE :
|
||||||
SPA_AUDIO_FORMAT_S32;
|
SPA_AUDIO_FORMAT_S32;
|
||||||
case SF_FORMAT_FLOAT:
|
|
||||||
return endianess == 1 ? SPA_AUDIO_FORMAT_F32_LE :
|
|
||||||
endianess == 2 ? SPA_AUDIO_FORMAT_F32_BE :
|
|
||||||
SPA_AUDIO_FORMAT_F32;
|
|
||||||
case SF_FORMAT_DOUBLE:
|
case SF_FORMAT_DOUBLE:
|
||||||
return endianess == 1 ? SPA_AUDIO_FORMAT_F64_LE :
|
return endianess == 1 ? SPA_AUDIO_FORMAT_F64_LE :
|
||||||
endianess == 2 ? SPA_AUDIO_FORMAT_F64_BE :
|
endianess == 2 ? SPA_AUDIO_FORMAT_F64_BE :
|
||||||
SPA_AUDIO_FORMAT_F64;
|
SPA_AUDIO_FORMAT_F64;
|
||||||
|
case SF_FORMAT_FLOAT:
|
||||||
default:
|
default:
|
||||||
|
return endianess == 1 ? SPA_AUDIO_FORMAT_F32_LE :
|
||||||
|
endianess == 2 ? SPA_AUDIO_FORMAT_F32_BE :
|
||||||
|
SPA_AUDIO_FORMAT_F32;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -253,15 +224,13 @@ sf_format_samplesize(int format)
|
||||||
return 1;
|
return 1;
|
||||||
case SF_FORMAT_PCM_16:
|
case SF_FORMAT_PCM_16:
|
||||||
return 2;
|
return 2;
|
||||||
case SF_FORMAT_PCM_24:
|
|
||||||
case SF_FORMAT_PCM_32:
|
case SF_FORMAT_PCM_32:
|
||||||
return 4;
|
return 4;
|
||||||
case SF_FORMAT_FLOAT:
|
|
||||||
return 4;
|
|
||||||
case SF_FORMAT_DOUBLE:
|
case SF_FORMAT_DOUBLE:
|
||||||
return 8;
|
return 8;
|
||||||
|
case SF_FORMAT_FLOAT:
|
||||||
default:
|
default:
|
||||||
break;
|
return 4;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
@ -969,8 +938,8 @@ int main(int argc, char *argv[])
|
||||||
data.mode == mode_playback ? SFM_READ : SFM_WRITE,
|
data.mode == mode_playback ? SFM_READ : SFM_WRITE,
|
||||||
&data.info);
|
&data.info);
|
||||||
if (!data.file) {
|
if (!data.file) {
|
||||||
fprintf(stderr, "error: failed to open audio file \"%s\"n",
|
fprintf(stderr, "error: failed to open audio file \"%s\": %s\n",
|
||||||
data.filename);
|
data.filename, sf_strerror(NULL));
|
||||||
goto error_open_file;
|
goto error_open_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -978,13 +947,6 @@ int main(int argc, char *argv[])
|
||||||
printf("opened file \"%s\" format %08x\n", data.filename, data.info.format);
|
printf("opened file \"%s\" format %08x\n", data.filename, data.info.format);
|
||||||
|
|
||||||
format = data.info.format;
|
format = data.info.format;
|
||||||
if (!sf_is_valid_type(format) ||
|
|
||||||
!sf_is_valid_subtype(format) ||
|
|
||||||
sf_format_samplesize(format) <= 0) {
|
|
||||||
fprintf(stderr, "error: Invalid file format, require WAV PCM8/16/32 or float/double\n");
|
|
||||||
goto error_bad_file;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.mode == mode_playback) {
|
if (data.mode == mode_playback) {
|
||||||
data.rate = data.info.samplerate;
|
data.rate = data.info.samplerate;
|
||||||
data.channels = data.info.channels;
|
data.channels = data.info.channels;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue