parecord: fix "Failed to open audio file" for FLAC and OGG
authorMartin Wilck <mwilck@arcor.de>
Mon, 15 Mar 2021 12:01:28 +0000 (13:01 +0100)
committerTanu Kaskinen <tanuk@iki.fi>
Mon, 19 Apr 2021 13:35:48 +0000 (13:35 +0000)
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

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/526>

src/utils/pacat.c

index 4d2ecf7..31da073 100644 (file)
@@ -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,