From c7c0cf726e2b88bafe381a77f74e0da04ee60727 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Wed, 29 Jul 2020 22:34:06 +0200 Subject: [PATCH] multi_audio: Replace old buffer infos with old cycle numbers. The old buffer info was not initialized so would possibly contain bogus initial content. Since the introduction of the TimeComputer, the old buffer info was not used to update the timesource data and the only remaining use was for keeping track of the previous cycle number. Replace the old buffer info by just the old cycle number and initialize that. Change-Id: I8be5a17f086a9f81f9b8fd0629e10460518f3d8c Reviewed-on: https://review.haiku-os.org/c/haiku/+/3111 Reviewed-by: waddlesplash --- .../multi_audio/MultiAudioNode.cpp | 23 +++++++++---------- .../multi_audio/MultiAudioNode.h | 1 - 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.cpp b/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.cpp index 69d1819a7b..a22fda5628 100644 --- a/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.cpp +++ b/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.cpp @@ -46,7 +46,7 @@ public: media_format fPreferredFormat; media_format fFormat; volatile uint32 fBufferCycle; - multi_buffer_info fOldBufferInfo; + int32 fOldBufferCycle; BBuffer* fBuffer; Resampler *fResampler; }; @@ -67,7 +67,7 @@ public: bool fOutputEnabled; uint64 fSamplesSent; volatile uint32 fBufferCycle; - multi_buffer_info fOldBufferInfo; + int32 fOldBufferCycle; Resampler* fResampler; }; @@ -131,6 +131,7 @@ node_input::node_input(media_input& input, media_format format) fInput = input; fPreferredFormat = format; fBufferCycle = 1; + fOldBufferCycle = -1; fBuffer = NULL; fResampler = NULL; } @@ -154,6 +155,7 @@ node_output::node_output(media_output& output, media_format format) fOutput = output; fPreferredFormat = format; fBufferCycle = 1; + fOldBufferCycle = -1; fResampler = NULL; } @@ -1837,8 +1839,7 @@ MultiAudioNode::_OutputThread() if (bufferInfo.playback_buffer_cycle >= 0 && bufferInfo.playback_buffer_cycle < fDevice->BufferList().return_playback_buffers - && (input->fOldBufferInfo.playback_buffer_cycle - != bufferInfo.playback_buffer_cycle + && (input->fOldBufferCycle != bufferInfo.playback_buffer_cycle || fDevice->BufferList().return_playback_buffers == 1) && (input->fInput.source != media_source::null || input->fChannelId == 0)) { @@ -1851,11 +1852,10 @@ MultiAudioNode::_OutputThread() // update the timesource if (input->fChannelId == 0) { //PRINT(("updating timesource\n")); - _UpdateTimeSource(bufferInfo, input->fOldBufferInfo, - *input); + _UpdateTimeSource(bufferInfo, *input); } - input->fOldBufferInfo = bufferInfo; + input->fOldBufferCycle = bufferInfo.playback_buffer_cycle; if (input->fBuffer != NULL) { _FillNextBuffer(*input, input->fBuffer); @@ -1889,7 +1889,7 @@ MultiAudioNode::_OutputThread() if (bufferInfo.record_buffer_cycle >= 0 && bufferInfo.record_buffer_cycle < fDevice->BufferList().return_record_buffers - && (output->fOldBufferInfo.record_buffer_cycle + && (output->fOldBufferCycle != bufferInfo.record_buffer_cycle || fDevice->BufferList().return_record_buffers == 1)) { //PRINT(("record_buffer_cycle ok\n")); @@ -1919,7 +1919,7 @@ MultiAudioNode::_OutputThread() } } - output->fOldBufferInfo = bufferInfo; + output->fOldBufferCycle = bufferInfo.record_buffer_cycle; } else { //PRINT(("record_buffer_cycle non ok\n")); } @@ -2119,11 +2119,10 @@ MultiAudioNode::_AllocateBuffers(node_output &channel) void -MultiAudioNode::_UpdateTimeSource(multi_buffer_info& info, - multi_buffer_info& oldInfo, node_input& input) +MultiAudioNode::_UpdateTimeSource(multi_buffer_info& info, node_input& input) { //CALLED(); - if (!fTimeSourceStarted || oldInfo.played_real_time == 0) + if (!fTimeSourceStarted) return; fTimeComputer.AddTimeStamp(info.played_real_time, diff --git a/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.h b/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.h index 1db87f6431..687ae8b518 100644 --- a/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.h +++ b/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.h @@ -211,7 +211,6 @@ private: BBuffer* _FillNextBuffer(multi_buffer_info& info, node_output& output); void _UpdateTimeSource(multi_buffer_info& info, - multi_buffer_info& oldInfo, node_input& input); node_output* _FindOutput(media_source source);