summaryrefslogtreecommitdiff
path: root/libs/ardour/sndfilesource.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-09-08 17:39:41 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-09-08 17:40:28 -0400
commitbbfb53e88145e2a364ef29597b9b9c703853296f (patch)
tree81f25193877f68e534faeb2ba7faf67b72c08fbe /libs/ardour/sndfilesource.cc
parentf1c0f587ca24438b1834fcb7d14c751aaf49cf48 (diff)
RF64, RF64 (WAV) and MBWF native file header formats
Diffstat (limited to 'libs/ardour/sndfilesource.cc')
-rw-r--r--libs/ardour/sndfilesource.cc30
1 files changed, 30 insertions, 0 deletions
diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc
index 8df88a2732..54854b61ff 100644
--- a/libs/ardour/sndfilesource.cc
+++ b/libs/ardour/sndfilesource.cc
@@ -152,6 +152,23 @@ SndFileSource::SndFileSource (Session& s, const string& path, const string& orig
_flags = Flag (_flags & ~Broadcast);
break;
+ case RF64_WAV:
+ fmt = SF_FORMAT_RF64;
+ _flags = Flag (_flags & ~Broadcast);
+ _flags = Flag (_flags | RF64_RIFF);
+ break;
+
+ case MBWF:
+ fmt = SF_FORMAT_RF64;
+ _flags = Flag (_flags | Broadcast);
+ _flags = Flag (_flags | RF64_RIFF);
+ break;
+
+ case RF64:
+ fmt = SF_FORMAT_RF64;
+ _flags = Flag (_flags & ~Broadcast);
+ break;
+
default:
fatal << string_compose (_("programming error: %1"), X_("unsupported audio header format requested")) << endmsg;
abort(); /*NOTREACHED*/
@@ -296,6 +313,19 @@ SndFileSource::open ()
_length = _info.frames;
+#ifdef HAVE_RF64_RIFF
+ if (_file_is_new && _length == 0 && writable()) {
+ if (_flags & RF64_RIFF) {
+ if (sf_command (_sndfile, SFC_AUTO_DOWNGRADE_RF64, 0, 0) != SF_TRUE) {
+ char errbuf[256];
+ sf_error_str (_sndfile, errbuf, sizeof (errbuf) - 1);
+ error << string_compose (_("Cannot mark RF64 audio file for automatic downgrade to WAV: %1"), errbuf)
+ << endmsg;
+ }
+ }
+ }
+#endif
+
if (!_broadcast_info) {
_broadcast_info = new BroadcastInfo;
}