mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 11:46:25 +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 ();
|
int rename_write_sources ();
|
||||||
void reset_write_sources (bool, bool force = false);
|
void reset_write_sources (bool, bool force = false);
|
||||||
void non_realtime_input_change ();
|
void non_realtime_input_change ();
|
||||||
|
void non_realtime_locate (nframes_t location);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class Auditioner;
|
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
|
void
|
||||||
AudioDiskstream::get_input_sources ()
|
AudioDiskstream::get_input_sources ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -224,12 +224,7 @@ Session::butler_transport_work ()
|
||||||
|
|
||||||
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
|
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
|
||||||
if (!(*i)->hidden()) {
|
if (!(*i)->hidden()) {
|
||||||
if ((*i)->speed() != 1.0f || (*i)->speed() != -1.0f) {
|
(*i)->non_realtime_locate (_transport_frame);
|
||||||
(*i)->seek ((nframes_t) (_transport_frame * (double) (*i)->speed()));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
(*i)->seek (_transport_frame);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (on_entry != g_atomic_int_get (&butler_should_do_transport_work)) {
|
if (on_entry != g_atomic_int_get (&butler_should_do_transport_work)) {
|
||||||
/* new request, stop seeking, and start again */
|
/* 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) {
|
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
|
||||||
if (!(*i)->hidden()) {
|
if (!(*i)->hidden()) {
|
||||||
if ((*i)->speed() != 1.0f || (*i)->speed() != -1.0f) {
|
(*i)->non_realtime_locate (_transport_frame);
|
||||||
(*i)->seek ((nframes_t) (_transport_frame * (double) (*i)->speed()));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
(*i)->seek (_transport_frame);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (on_entry != g_atomic_int_get (&butler_should_do_transport_work)) {
|
if (on_entry != g_atomic_int_get (&butler_should_do_transport_work)) {
|
||||||
finished = false;
|
finished = false;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue