mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 03:36:32 +01:00
Audio diskstream fix from torbenh.
git-svn-id: svn://localhost/ardour2/branches/3.0@3876 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
d64ff6b659
commit
ff73f4e5e1
3 changed files with 15 additions and 12 deletions
|
|
@ -166,6 +166,7 @@ class AudioDiskstream : public Diskstream
|
|||
int rename_write_sources ();
|
||||
void reset_write_sources (bool, bool force = false);
|
||||
void non_realtime_input_change ();
|
||||
void non_realtime_locate (nframes_t location);
|
||||
|
||||
protected:
|
||||
friend class Auditioner;
|
||||
|
|
|
|||
|
|
@ -205,6 +205,18 @@ AudioDiskstream::non_realtime_input_change ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioDiskstream::non_realtime_locate (nframes_t location)
|
||||
{
|
||||
/* now refill channel buffers */
|
||||
|
||||
if (speed() != 1.0f || speed() != -1.0f) {
|
||||
seek ((nframes_t) (location * (double) speed()));
|
||||
} else {
|
||||
seek (location);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioDiskstream::get_input_sources ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -224,12 +224,7 @@ Session::butler_transport_work ()
|
|||
|
||||
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
|
||||
if (!(*i)->hidden()) {
|
||||
if ((*i)->speed() != 1.0f || (*i)->speed() != -1.0f) {
|
||||
(*i)->seek ((nframes_t) (_transport_frame * (double) (*i)->speed()));
|
||||
}
|
||||
else {
|
||||
(*i)->seek (_transport_frame);
|
||||
}
|
||||
(*i)->non_realtime_locate (_transport_frame);
|
||||
}
|
||||
if (on_entry != g_atomic_int_get (&butler_should_do_transport_work)) {
|
||||
/* new request, stop seeking, and start again */
|
||||
|
|
@ -434,12 +429,7 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
|
|||
|
||||
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
|
||||
if (!(*i)->hidden()) {
|
||||
if ((*i)->speed() != 1.0f || (*i)->speed() != -1.0f) {
|
||||
(*i)->seek ((nframes_t) (_transport_frame * (double) (*i)->speed()));
|
||||
}
|
||||
else {
|
||||
(*i)->seek (_transport_frame);
|
||||
}
|
||||
(*i)->non_realtime_locate (_transport_frame);
|
||||
}
|
||||
if (on_entry != g_atomic_int_get (&butler_should_do_transport_work)) {
|
||||
finished = false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue