audiorenderer: fixed bug where conform signals would send corrupt re-cache time

This commit is contained in:
itsmattkc
2020-04-06 17:10:15 +10:00
parent 4a8a44a8b1
commit 78c592cf8d
3 changed files with 15 additions and 10 deletions
+10 -5
View File
@@ -97,7 +97,7 @@ bool AudioRenderBackend::GenerateCacheIDInternal(QCryptographicHash &hash)
return true;
}
const AudioRenderingParams &AudioRenderBackend::params()
const AudioRenderingParams &AudioRenderBackend::params() const
{
return params_;
}
@@ -107,7 +107,7 @@ NodeInput *AudioRenderBackend::GetDependentInput()
return viewer_node()->samples_input();
}
QString AudioRenderBackend::CachePathName()
QString AudioRenderBackend::CachePathName() const
{
QString cache_fn = cache_id();
cache_fn.append(".pcm");
@@ -170,7 +170,7 @@ void AudioRenderBackend::InvalidateCacheInternal(const rational &start_range, co
RenderBackend::InvalidateCacheInternal(start_range, end_range);
}
void AudioRenderBackend::ConformUnavailable(StreamPtr stream, const TimeRange &range, const rational &stream_time, const AudioRenderingParams& params)
void AudioRenderBackend::ConformUnavailable(StreamPtr stream, TimeRange range, rational stream_time, AudioRenderingParams params)
{
ConformWaitInfo info = {stream, params, range, stream_time};
@@ -198,7 +198,7 @@ void AudioRenderBackend::ConformUnavailable(StreamPtr stream, const TimeRange &r
}
}
void AudioRenderBackend::ConformUpdated(Stream *stream, const AudioRenderingParams &params)
void AudioRenderBackend::ConformUpdated(Stream *stream, AudioRenderingParams params)
{
for (int i=0;i<conform_wait_info_.size();i++) {
const ConformWaitInfo& info = conform_wait_info_.at(i);
@@ -206,11 +206,16 @@ void AudioRenderBackend::ConformUpdated(Stream *stream, const AudioRenderingPara
if (info.stream.get() == stream
&& info.params == params) {
// Make a copy so the values we use aren't corrupt
ConformWaitInfo copy = info;
// Remove this entry from the list
conform_wait_info_.removeAt(i);
i--;
// Send invalidate cache signal
ic_from_conform_ = true;
InvalidateCache(info.affected_range);
InvalidateCache(copy.affected_range);
ic_from_conform_ = false;
}
+4 -4
View File
@@ -42,9 +42,9 @@ public:
virtual QIODevice* GetAudioPullDevice() = 0;
const AudioRenderingParams& params();
const AudioRenderingParams& params() const;
QString CachePathName();
QString CachePathName() const;
signals:
void ParamsChanged();
@@ -94,9 +94,9 @@ private:
bool ic_from_conform_;
private slots:
void ConformUnavailable(StreamPtr stream, const TimeRange& range, const rational& stream_time, const AudioRenderingParams &params);
void ConformUnavailable(StreamPtr stream, TimeRange range, rational stream_time, AudioRenderingParams params);
void ConformUpdated(Stream *stream, const AudioRenderingParams& params);
void ConformUpdated(Stream *stream, AudioRenderingParams params);
void TruncateCache(const rational& r);
+1 -1
View File
@@ -34,7 +34,7 @@ public:
void SetParameters(const AudioRenderingParams& audio_params);
signals:
void ConformUnavailable(StreamPtr stream, const TimeRange& range, const rational& stream_time, const AudioRenderingParams& params);
void ConformUnavailable(StreamPtr stream, TimeRange range, rational stream_time, AudioRenderingParams params);
protected:
virtual bool InitInternal() override;