From bbfb53e88145e2a364ef29597b9b9c703853296f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 8 Sep 2015 17:39:41 -0400 Subject: RF64, RF64 (WAV) and MBWF native file header formats --- libs/ardour/sndfilesource.cc | 30 ++++++++++++++++++++++++++++++ libs/ardour/utils.cc | 2 ++ 2 files changed, 32 insertions(+) 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; } diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc index bda719780d..c66b34a2ba 100644 --- a/libs/ardour/utils.cc +++ b/libs/ardour/utils.cc @@ -649,6 +649,8 @@ ARDOUR::native_header_format_extension (HeaderFormat hf, const DataType& type) case iXML: return ".ixml"; case RF64: + case RF64_WAV: + case MBWF: return ".rf64"; } -- cgit v1.2.3