X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudiofilesource.cc;h=2523a85b1a6c74ce02e871288794c0cca1a517dc;hb=192e1c61567e761b7c64848e3f3742ac12c6928b;hp=014baa90317b13c420af7c9863378ef6ddd4f976;hpb=2a7ed69c28c5c4606ff13b3605b9bc9c3eba607d;p=ardour.git diff --git a/libs/ardour/audiofilesource.cc b/libs/ardour/audiofilesource.cc index 014baa9031..2523a85b1a 100644 --- a/libs/ardour/audiofilesource.cc +++ b/libs/ardour/audiofilesource.cc @@ -32,10 +32,12 @@ #include "pbd/convert.h" #include "pbd/basename.h" +#include "pbd/file_utils.h" #include "pbd/mountpoint.h" #include "pbd/stl_delete.h" #include "pbd/strsplit.h" #include "pbd/shortpath.h" +#include "pbd/stacktrace.h" #include "pbd/enumwriter.h" #include @@ -115,6 +117,22 @@ AudioFileSource::AudioFileSource (Session& s, const string& path, const string& } } +/** Constructor used for existing internal-to-session files during crash + * recovery. File must exist + */ +AudioFileSource::AudioFileSource (Session& s, const string& path, Source::Flag flags, bool /* ignored-exists-for-prototype differentiation */) + : Source (s, DataType::AUDIO, path, flags) + , AudioSource (s, path) + , FileSource (s, DataType::AUDIO, path, string(), flags) +{ + /* note that origin remains empty */ + + if (init (_path, true)) { + throw failed_constructor (); + } +} + + /** Constructor used for existing internal-to-session files via XML. File must exist. */ AudioFileSource::AudioFileSource (Session& s, const XMLNode& node, bool must_exist) : Source (s, node) @@ -187,12 +205,12 @@ AudioFileSource::find_broken_peakfile (string peak_path, string audio_path) /* Nasty band-aid for older sessions that were created before we used libsndfile for all audio files. */ - - +#ifndef PLATFORM_WINDOWS // there's no old_peak_path() for windows str = old_peak_path (audio_path); if (Glib::file_test (str, Glib::FILE_TEST_EXISTS)) { peak_path = str; } +#endif } return peak_path; @@ -219,7 +237,10 @@ AudioFileSource::old_peak_path (string audio_path) char buf[32]; #ifdef __APPLE__ - snprintf (buf, sizeof (buf), "%u-%u-%d.peak", stat_mount.st_ino, stat_file.st_ino, _channel); + snprintf (buf, sizeof (buf), "%llu-%llu-%d.peak", + (unsigned long long)stat_mount.st_ino, + (unsigned long long)stat_file.st_ino, + _channel); #else snprintf (buf, sizeof (buf), "%" PRId64 "-%" PRId64 "-%d.peak", (int64_t) stat_mount.st_ino, (int64_t) stat_file.st_ino, _channel); #endif @@ -281,13 +302,13 @@ AudioFileSource::set_state (const XMLNode& node, int version) } void -AudioFileSource::mark_streaming_write_completed () +AudioFileSource::mark_streaming_write_completed (const Lock& lock) { if (!writable()) { return; } - AudioSource::mark_streaming_write_completed (); + AudioSource::mark_streaming_write_completed (lock); } int @@ -396,3 +417,4 @@ AudioFileSource::get_interleave_buffer (framecnt_t size) return ssb->buf; } +