Remove unnecessary 0 checks before delete; see http://www.parashift.com/c++-faq-lite...
[ardour.git] / libs / ardour / auditioner.cc
index 0ba30b2b8be5503878bdaa6e15356b23d20ee367..d6f63c2f9da410183e4e180672016ef4d9cec87d 100644 (file)
@@ -110,7 +110,7 @@ Auditioner::audition_current_playlist ()
 
        /* force a panner reset now that we have all channels */
 
-       _panner->reset (n_outputs().get(DataType::AUDIO), _diskstream->n_channels().get(DataType::AUDIO));
+       _panner->reset (n_outputs().n_audio(), _diskstream->n_channels().n_audio());
 
        g_atomic_int_set (&_active, 1);
 }
@@ -137,13 +137,13 @@ Auditioner::audition_region (boost::shared_ptr<Region> region)
        boost::shared_ptr<AudioRegion> the_region (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
        the_region->set_position (0, this);
 
-       _diskstream->playlist()->clear ();
+       _diskstream->playlist()->drop_regions ();
        _diskstream->playlist()->add_region (the_region, 0, 1);
 
-       if (_diskstream->n_channels().get(DataType::AUDIO) < the_region->n_channels()) {
-               audio_diskstream()->add_channel (the_region->n_channels() - _diskstream->n_channels().get(DataType::AUDIO));
-       } else if (_diskstream->n_channels().get(DataType::AUDIO) > the_region->n_channels()) {
-               audio_diskstream()->remove_channel (_diskstream->n_channels().get(DataType::AUDIO) - the_region->n_channels());
+       if (_diskstream->n_channels().n_audio() < the_region->n_channels()) {
+               audio_diskstream()->add_channel (the_region->n_channels() - _diskstream->n_channels().n_audio());
+       } else if (_diskstream->n_channels().n_audio() > the_region->n_channels()) {
+               audio_diskstream()->remove_channel (_diskstream->n_channels().n_audio() - the_region->n_channels());
        }
 
        /* force a panner reset now that we have all channels */
@@ -151,8 +151,19 @@ Auditioner::audition_region (boost::shared_ptr<Region> region)
        reset_panner();
 
        length = the_region->length();
-       _diskstream->seek (0);
-       current_frame = 0;
+
+       int dir;
+       nframes_t offset = the_region->sync_offset (dir);
+
+       /* can't audition from a negative sync point */
+
+       if (dir < 0) {
+               offset = 0;
+       }
+
+       _diskstream->seek (offset);
+       current_frame = offset;
+
        g_atomic_int_set (&_active, 1);
 }
 
@@ -194,29 +205,27 @@ Auditioner::output_changed (IOChange change, void* src)
        string phys;
 
        if (change & ConnectionsChanged) {
-               const char ** connections;
-               connections =  output (0)->get_connections ();
-               if (connections) {
+               vector<string> connections;
+               if (output (0)->get_connections (connections)) {
                        phys = _session.engine().get_nth_physical_output (DataType::AUDIO, 0);
                        if (phys != connections[0]) {
                                Config->set_auditioner_output_left (connections[0]);
                        } else {
                                Config->set_auditioner_output_left ("default");
                        }
-                       free (connections);
                } else {
                        Config->set_auditioner_output_left ("");
                }
                
-               connections = output (1)->get_connections ();
-               if (connections) {
+               connections.clear ();
+
+               if (output (1)->get_connections (connections)) {
                        phys = _session.engine().get_nth_physical_output (DataType::AUDIO, 1);
                        if (phys != connections[0]) {
                                Config->set_auditioner_output_right (connections[0]);
                        } else {
                                Config->set_auditioner_output_right ("default");
                        }
-                       free (connections);
                } else {
                        Config->set_auditioner_output_right ("");
                }