audioflinger: fix track metadata updates to HAL
Fix two problems with track metadata updates:
1) send update to HAL before starting mmap streams
2) send update to HAL after changing the route
Bug: 235763725
Test: repro steps in bug
Change-Id: I2e67c75fde165f565368759913acdb207a693c75
diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h
index 074ae8f..c7ba5c4 100644
--- a/services/audioflinger/Threads.h
+++ b/services/audioflinger/Threads.h
@@ -786,6 +786,11 @@
*/
bool readAndClearHasChanged();
+ /** Force updating track metadata to audio HAL stream next time
+ * readAndClearHasChanged() is called.
+ */
+ void setHasChanged() { mHasChanged = true; }
+
private:
void logTrack(const char *funcName, const sp<T> &track) const;
@@ -2014,7 +2019,7 @@
virtual void threadLoop_exit();
virtual void threadLoop_standby();
virtual bool shouldStandby_l() { return false; }
- virtual status_t exitStandby();
+ virtual status_t exitStandby_l() REQUIRES(mLock);
virtual status_t initCheck() const { return (mHalStream == 0) ? NO_INIT : NO_ERROR; }
virtual size_t frameCount() const { return mFrameCount; }
@@ -2165,7 +2170,7 @@
AudioStreamIn* clearInput();
- status_t exitStandby() override;
+ status_t exitStandby_l() REQUIRES(mLock) override;
void updateMetadata_l() override;
void processVolume_l() override;