AudioFlinger: Add PatchRecord PatchTrack interfaces
IAfPatchTrack
IAfPatchRecord
Test: atest audiorecord_tests audiotrack_tests audiorouting_tests trackplayerbase_tests audiosystem_tests
Test: atest AudioTrackTest AudioRecordTest
Test: YouTube and Camera
Bug: 288339104
Bug: 288468076
Merged-In: I2dde38e5e1cee1af75d28ddbc647db7000b9cf0c
Change-Id: I2dde38e5e1cee1af75d28ddbc647db7000b9cf0c
diff --git a/services/audioflinger/IAfTrack.h b/services/audioflinger/IAfTrack.h
index ec58db0..bd2228b 100644
--- a/services/audioflinger/IAfTrack.h
+++ b/services/audioflinger/IAfTrack.h
@@ -388,4 +388,40 @@
virtual void copyMetadataTo(MetadataInserter& backInserter) const = 0; // see IAfTrack
};
+// PatchProxyBufferProvider interface is implemented by PatchTrack and PatchRecord.
+// it provides buffer access methods that map those of a ClientProxy (see AudioTrackShared.h)
+class PatchProxyBufferProvider {
+public:
+ virtual ~PatchProxyBufferProvider() = default;
+ virtual bool producesBufferOnDemand() const = 0;
+ virtual status_t obtainBuffer(
+ Proxy::Buffer* buffer, const struct timespec* requested = nullptr) = 0;
+ virtual void releaseBuffer(Proxy::Buffer* buffer) = 0;
+};
+
+class IAfPatchTrackBase : public virtual RefBase {
+public:
+ virtual void setPeerTimeout(std::chrono::nanoseconds timeout) = 0;
+ virtual void setPeerProxy(const sp<IAfPatchTrackBase>& proxy, bool holdReference) = 0;
+ virtual void clearPeerProxy() = 0;
+ virtual PatchProxyBufferProvider* asPatchProxyBufferProvider() = 0;
+};
+
+class IAfPatchTrack : public virtual IAfTrack, public virtual IAfPatchTrackBase {};
+
+// Abstraction for the Audio Source for the RecordThread (HAL or PassthruPatchRecord).
+struct Source {
+ virtual ~Source() = default;
+ // The following methods have the same signatures as in StreamHalInterface.
+ virtual status_t read(void* buffer, size_t bytes, size_t* read) = 0;
+ virtual status_t getCapturePosition(int64_t* frames, int64_t* time) = 0;
+ virtual status_t standby() = 0;
+};
+
+class IAfPatchRecord : public virtual IAfRecordTrack, public virtual IAfPatchTrackBase {
+public:
+ virtual Source* getSource() = 0;
+ virtual size_t writeFrames(const void* src, size_t frameCount, size_t frameSize) = 0;
+};
+
} // namespace android