mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 11:46:25 +01:00
change the logic for a capture buffer flush to disk when a locate is occuring
We can't check for Session::actively_recording() because punch out may have disabled that. Rather than add logic to check if a flush is needed (which is not much different than the code that runs as part of the flush to disk), just do a flush anyway.
This commit is contained in:
parent
7ff47ab80e
commit
71343e835a
1 changed files with 16 additions and 7 deletions
|
|
@ -314,6 +314,8 @@ Session::realtime_locate ()
|
||||||
void
|
void
|
||||||
Session::butler_transport_work ()
|
Session::butler_transport_work ()
|
||||||
{
|
{
|
||||||
|
/* Note: this function executes in the butler thread context */
|
||||||
|
|
||||||
restart:
|
restart:
|
||||||
bool finished;
|
bool finished;
|
||||||
PostTransportWork ptw;
|
PostTransportWork ptw;
|
||||||
|
|
@ -329,20 +331,27 @@ Session::butler_transport_work ()
|
||||||
|
|
||||||
if (ptw & PostTransportLocate) {
|
if (ptw & PostTransportLocate) {
|
||||||
|
|
||||||
if (get_play_loop() && !Config->get_seamless_loop() && actively_recording()) {
|
if (get_play_loop() && !Config->get_seamless_loop()) {
|
||||||
|
|
||||||
/* this locate is happening while we are doing loop
|
DEBUG_TRACE (DEBUG::Butler, "flush loop recording fragment to disk\n");
|
||||||
* recording but with seam-ed (non-seamless) looping.
|
|
||||||
* We must flush any data to disk before resetting
|
/* this locate might be happening while we are
|
||||||
* buffers as part of the pending locate (which happens
|
* loop recording.
|
||||||
* a little later in this method).
|
*
|
||||||
|
* Non-seamless looping will require a locate (below) that
|
||||||
|
* will reset capture buffers and throw away data.
|
||||||
|
*
|
||||||
|
* Rather than first find all tracks and see if they
|
||||||
|
* have outstanding data, just do a flush anyway. It
|
||||||
|
* may be cheaper this way anyway, and is certainly
|
||||||
|
* more accurate.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool more_disk_io_to_do = false;
|
bool more_disk_io_to_do = false;
|
||||||
uint32_t errors = 0;
|
uint32_t errors = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
more_disk_io_to_do = _butler->flush_tracks_to_disk (r, errors, true);
|
more_disk_io_to_do = _butler->flush_tracks_to_disk_after_locate (r, errors);
|
||||||
|
|
||||||
if (errors) {
|
if (errors) {
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue