X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fcoreaudiosource.cc;h=90ab07b86d5df7ac1f5104b7cfea6b44ef9f8131;hb=6946bdc0830c9f0971d2cd0d54b27e343c54d96a;hp=010905d120cc371beaa8437b0e6613a8674bed8c;hpb=5764970709f15e85ec30c9cea89c318eb8114c58;p=ardour.git diff --git a/libs/ardour/coreaudiosource.cc b/libs/ardour/coreaudiosource.cc index 010905d120..90ab07b86d 100644 --- a/libs/ardour/coreaudiosource.cc +++ b/libs/ardour/coreaudiosource.cc @@ -25,12 +25,16 @@ #include "ardour/coreaudiosource.h" #include "ardour/utils.h" -#include -#include +#ifdef COREAUDIO105 +#include "CAAudioFile.h" +#else +#include "CAExtAudioFile.h" +#endif +#include "CAStreamBasicDescription.h" #include -#include "i18n.h" +#include "pbd/i18n.h" #include @@ -104,6 +108,12 @@ CoreAudioSource::~CoreAudioSource () { } +void +CoreAudioSource::close () +{ + af.Close (); +} + int CoreAudioSource::safe_read (Sample* dst, framepos_t start, framecnt_t cnt, AudioBufferList& abl) const { @@ -235,12 +245,15 @@ CoreAudioSource::update_header (framepos_t, struct tm&, time_t) int CoreAudioSource::get_soundfile_info (string path, SoundFileInfo& _info, string&) { +#ifdef COREAUDIO105 FSRef ref; +#endif ExtAudioFileRef af = 0; UInt32 size; CFStringRef name; int ret = -1; +#ifdef COREAUDIO105 if (FSPathMakeRef ((UInt8*)path.c_str(), &ref, 0) != noErr) { goto out; } @@ -248,6 +261,15 @@ CoreAudioSource::get_soundfile_info (string path, SoundFileInfo& _info, string&) if (ExtAudioFileOpen(&ref, &af) != noErr) { goto out; } +#else + CFURLRef url = CFURLCreateFromFileSystemRepresentation (kCFAllocatorDefault, (const UInt8*)path.c_str (), strlen (path.c_str ()), false); + OSStatus res = ExtAudioFileOpenURL(url, &af); + if (url) CFRelease (url); + + if (res != noErr) { + goto out; + } +#endif AudioStreamBasicDescription absd; memset(&absd, 0, sizeof(absd)); @@ -305,66 +327,66 @@ CoreAudioSource::get_soundfile_info (string path, SoundFileInfo& _info, string&) } switch (absd.mFormatID) { - case kAudioFormatLinearPCM: - _info.format_name += "PCM"; - break; - - case kAudioFormatAC3: - _info.format_name += "AC3"; - break; - - case kAudioFormat60958AC3: - _info.format_name += "60958 AC3"; - break; - - case kAudioFormatMPEGLayer1: - _info.format_name += "MPEG-1"; - break; - - case kAudioFormatMPEGLayer2: - _info.format_name += "MPEG-2"; - break; - - case kAudioFormatMPEGLayer3: - _info.format_name += "MPEG-3"; - break; - - case kAudioFormatAppleIMA4: - _info.format_name += "IMA-4"; - break; - - case kAudioFormatMPEG4AAC: - _info.format_name += "AAC"; - break; - - case kAudioFormatMPEG4CELP: - _info.format_name += "CELP"; - break; - - case kAudioFormatMPEG4HVXC: - _info.format_name += "HVXC"; - break; - - case kAudioFormatMPEG4TwinVQ: - _info.format_name += "TwinVQ"; - break; - - /* these really shouldn't show up, but we should do something - somewhere else to make sure that doesn't happen. until - that is guaranteed, print something anyway. - */ - - case kAudioFormatTimeCode: - _info.format_name += "timecode"; - break; - - case kAudioFormatMIDIStream: - _info.format_name += "MIDI"; - break; - - case kAudioFormatParameterValueStream: - _info.format_name += "parameter values"; - break; + case kAudioFormatLinearPCM: + _info.format_name += "PCM"; + break; + + case kAudioFormatAC3: + _info.format_name += "AC3"; + break; + + case kAudioFormat60958AC3: + _info.format_name += "60958 AC3"; + break; + + case kAudioFormatMPEGLayer1: + _info.format_name += "MPEG-1"; + break; + + case kAudioFormatMPEGLayer2: + _info.format_name += "MPEG-2"; + break; + + case kAudioFormatMPEGLayer3: + _info.format_name += "MPEG-3"; + break; + + case kAudioFormatAppleIMA4: + _info.format_name += "IMA-4"; + break; + + case kAudioFormatMPEG4AAC: + _info.format_name += "AAC"; + break; + + case kAudioFormatMPEG4CELP: + _info.format_name += "CELP"; + break; + + case kAudioFormatMPEG4HVXC: + _info.format_name += "HVXC"; + break; + + case kAudioFormatMPEG4TwinVQ: + _info.format_name += "TwinVQ"; + break; + + /* these really shouldn't show up, but we should do something + somewhere else to make sure that doesn't happen. until + that is guaranteed, print something anyway. + */ + + case kAudioFormatTimeCode: + _info.format_name += "timecode"; + break; + + case kAudioFormatMIDIStream: + _info.format_name += "MIDI"; + break; + + case kAudioFormatParameterValueStream: + _info.format_name += "parameter values"; + break; } // XXX it would be nice to find a way to get this information if it exists @@ -372,7 +394,7 @@ CoreAudioSource::get_soundfile_info (string path, SoundFileInfo& _info, string&) _info.timecode = 0; ret = 0; - out: +out: ExtAudioFileDispose (af); return ret;