From b230da0d948573f4e17f12285373235369099dd8 Mon Sep 17 00:00:00 2001 From: Martin Wilck Date: Mon, 15 Mar 2021 13:01:28 +0100 Subject: [PATCH] parecord: fix "Failed to open audio file" for FLAC and OGG This patch fixes the following error: $ pacat --file-format=ogg -r test.ogg Failed to open audio file. $ parecord sep.flac Failed to open audio file. libsndfile errors out if a WAV or OGG file is set to have anything but SF_ENDIAN_FILE: https://github.com/libsndfile/libsndfile/commit/f4d1646e5cd96444a75c6327a9d49739f81d251e Signed-off-by: Martin Wilck --- src/utils/pacat.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/utils/pacat.c b/src/utils/pacat.c index 4d2ecf717..31da073bc 100644 --- a/src/utils/pacat.c +++ b/src/utils/pacat.c @@ -1062,6 +1062,15 @@ int main(int argc, char *argv[]) { } sfi.format |= file_format; + + /* + * Endianness has been set in pa_sndfile_write_sample_spec(), but + * libsndfile errors out if endianness is set to anything other than + * SF_ENDIAN_FILE for OGG or FLAC. Clear it. + */ + if (file_format == SF_FORMAT_OGG || file_format == SF_FORMAT_FLAC) + sfi.format = (sfi.format & ~SF_FORMAT_ENDMASK) | SF_ENDIAN_FILE; + } if (!(sndfile = sf_open_fd(mode == RECORD ? STDOUT_FILENO : STDIN_FILENO, -- 2.26.2