Merged with trunk
[ardour.git] / libs / ardour / import.cc
index f5884a1c1d00740df0c789f60dc5f5cce04ee3e5..410171a590f36cfe2fc3c734ed0f5db03a72c3cd 100644 (file)
 #include <sndfile.h>
 #include <samplerate.h>
 
+#include <glibmm.h>
+
 #include <pbd/basename.h>
+
 #include <ardour/ardour.h>
 #include <ardour/session.h>
-#include <ardour/diskstream.h>
-#include <ardour/filesource.h>
+#include <ardour/audio_diskstream.h>
+#include <ardour/sndfilesource.h>
 #include <ardour/sndfile_helpers.h>
 #include <ardour/audioregion.h>
 
@@ -48,8 +51,8 @@ int
 Session::import_audiofile (import_status& status)
 {
        SNDFILE *in;
-       FileSource **newfiles = 0;
-       ARDOUR::AudioRegion::SourceList sources;
+       AudioFileSource **newfiles = 0;
+       AudioRegion::SourceList sources;
        SF_INFO info;
        float *data = 0;
        Sample **channel_data = 0;
@@ -61,11 +64,12 @@ Session::import_audiofile (import_status& status)
        jack_nframes_t so_far;
        char buf[PATH_MAX+1];
        int ret = -1;
-       vector<AudioRegion *> new_regions;
        vector<string> new_paths;
        struct tm* now;
        string tmp_convert_file;
        
+       status.new_regions.clear ();
+
        if ((in = sf_open (status.pathname.c_str(), SFM_READ, &info)) == 0) {
                error << string_compose(_("Import: cannot open input sound file \"%1\""), status.pathname) << endmsg;
                return -1;
@@ -90,7 +94,7 @@ Session::import_audiofile (import_status& status)
                }
        }
 
-       newfiles = new FileSource *[info.channels];
+       newfiles = new AudioFileSource *[info.channels];
        for (n = 0; n < info.channels; ++n) {
                newfiles[n] = 0;
        }
@@ -133,7 +137,10 @@ Session::import_audiofile (import_status& status)
 
                        
                try { 
-                       newfiles[n] = new FileSource (buf, frame_rate());
+                       newfiles[n] = new SndFileSource (buf, 
+                                                        Config->get_native_file_data_format(),
+                                                        Config->get_native_file_header_format(),
+                                                        frame_rate ());
                }
 
                catch (failed_constructor& err) {
@@ -211,10 +218,10 @@ Session::import_audiofile (import_status& status)
                        sources.push_back(newfiles[n]);
                }
 
-               AudioRegion *r = new AudioRegion (sources, 0, newfiles[0]->length(), region_name_from_path (PBD::basename(basepath)),
+               AudioRegion *r = new AudioRegion (sources, 0, newfiles[0]->length(), region_name_from_path (Glib::path_get_basename (basepath)),
                                        0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile));
                
-               new_regions.push_back (r);
+               status.new_regions.push_back (r);
 
        } else {
                for (n = 0; n < nfiles && !status.cancel; ++n) {
@@ -227,10 +234,10 @@ Session::import_audiofile (import_status& status)
                           did not bother to create whole-file AudioRegions for them. Do it now.
                        */
                
-                       AudioRegion *r = new AudioRegion (*newfiles[n], 0, newfiles[n]->length(), region_name_from_path (PBD::basename (newfiles[n]->name())),
+                       AudioRegion *r = new AudioRegion (*newfiles[n], 0, newfiles[n]->length(), region_name_from_path (Glib::path_get_basename (newfiles[n]->name())),
                                                0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile | AudioRegion::Import));
 
-                       new_regions.push_back (r);
+                       status.new_regions.push_back (r);
                }
        }
        
@@ -259,7 +266,7 @@ Session::import_audiofile (import_status& status)
        }
 
        if (status.cancel) {
-               for (vector<AudioRegion *>::iterator i = new_regions.begin(); i != new_regions.end(); ++i) {
+               for (vector<AudioRegion *>::iterator i = status.new_regions.begin(); i != status.new_regions.end(); ++i) {
                        delete *i;
                }
 
@@ -284,7 +291,7 @@ Session::import_audiofile (import_status& status)
 string
 Session::build_tmp_convert_name(string infile)
 {
-       string tmp_name(_path + "/." + PBD::basename (infile.c_str()) + "XXXXXX");
+       string tmp_name(_path + "/." + Glib::path_get_basename (infile.c_str()) + "XXXXXX");
        char* tmp = new char[tmp_name.length() + 1];
        tmp_name.copy(tmp, string::npos);
        tmp[tmp_name.length()] = 0;