24#include "oboe/Definitions.h"
25#include "oboe/ResultWithValue.h"
26#include "oboe/AudioStreamBuilder.h"
27#include "oboe/AudioStreamBase.h"
28#include "oboe/Utilities.h"
38constexpr int64_t kDefaultTimeoutNanos = (2000 * kNanosPerMillisecond);
90 return Result::ErrorUnimplemented;
102 virtual Result
start(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
108 virtual Result
pause(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
114 virtual Result
flush(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
120 virtual Result
stop(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
185 StreamState *nextState,
186 int64_t timeoutNanoseconds) = 0;
208 return Result::ErrorUnimplemented;
335 return Result::ErrorUnimplemented;
447 return previousCallback;
460 return previousCallback;
483 int64_t timeoutNanoseconds);
489 return mErrorCallbackResult;
493 int32_t getDelayBeforeCloseMillis()
const {
494 return mDelayBeforeCloseMillis;
512 mDelayBeforeCloseMillis = delayBeforeCloseMillis;
539 mPerformanceHintEnabled = enabled;
549 return mPerformanceHintEnabled;
579 return oboe::Result::ErrorUnimplemented;
608 [[maybe_unused]]
bool gpu,
609 [[maybe_unused]]
const char* debugName) {
610 return oboe::Result::ErrorUnimplemented;
639 [[maybe_unused]]
bool gpu,
640 [[maybe_unused]]
const char* debugName) {
641 return oboe::Result::ErrorUnimplemented;
671 [[maybe_unused]]
bool gpu,
672 [[maybe_unused]]
const char* debugName) {
673 return oboe::Result::ErrorUnimplemented;
676 virtual oboe::Result setOffloadDelayPadding([[maybe_unused]] int32_t delayInFrames,
677 [[maybe_unused]] int32_t paddingInFrames) {
678 return Result::ErrorUnimplemented;
681 virtual ResultWithValue<int32_t> getOffloadDelay() {
682 return ResultWithValue<int32_t>(Result::ErrorUnimplemented);
685 virtual ResultWithValue<int32_t> getOffloadPadding() {
686 return ResultWithValue<int32_t>(Result::ErrorUnimplemented);
689 virtual oboe::Result setOffloadEndOfStream() {
690 return Result::ErrorUnimplemented;
705 return mErrorCallbackCalled.exchange(
true);
715 StreamState endingState,
716 int64_t timeoutNanoseconds);
726 return DataCallbackResult::Stop;
743 return mDataCallbackEnabled;
751 mDataCallbackEnabled = enabled;
764 if (mDelayBeforeCloseMillis > 0) {
765 usleep(mDelayBeforeCloseMillis * 1000);
789 void setWeakThis(std::shared_ptr<oboe::AudioStream> &sharedStream) {
790 mWeakThis = sharedStream;
796 std::shared_ptr<oboe::AudioStream> lockWeakThis() {
797 return mWeakThis.lock();
800 std::weak_ptr<AudioStream> mWeakThis;
820 oboe::Result mErrorCallbackResult = oboe::Result::OK;
830 static constexpr int kMinDelayBeforeCloseMillis = 10;
831 int32_t mDelayBeforeCloseMillis = kMinDelayBeforeCloseMillis;
836 void checkScheduler();
837 int mPreviousScheduler = -1;
839 std::atomic<bool> mDataCallbackEnabled{
false};
840 std::atomic<bool> mErrorCallbackCalled{
false};
842 std::atomic<bool> mPerformanceHintEnabled{
false};
852 audioStream->
close();
Definition AudioStreamBase.h:31
int32_t mChannelCount
Definition AudioStreamBase.h:296
AudioStreamDataCallback * mDataCallback
Definition AudioStreamBase.h:284
AudioFormat mFormat
Definition AudioStreamBase.h:309
AudioStreamErrorCallback * mErrorCallback
Definition AudioStreamBase.h:288
Definition AudioStreamBuilder.h:34
Definition AudioStreamCallback.h:34
Definition AudioStreamCallback.h:102
Definition AudioStream.h:43
int32_t mFramesPerBurst
Definition AudioStream.h:826
virtual Result pause(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)
std::atomic< int64_t > mFramesRead
Definition AudioStream.h:816
virtual Result waitForStateChange(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0
virtual DataCallbackResult onDefaultCallback(void *, int)
Definition AudioStream.h:725
void setDataCallbackEnabled(bool enabled)
Definition AudioStream.h:750
bool usesAAudio() const
Definition AudioStream.h:409
virtual AudioApi getAudioApi() const =0
int32_t getFramesPerBurst() const
Definition AudioStream.h:237
virtual Result flush(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)
virtual oboe::Result notifyWorkloadReset(bool cpu, bool gpu, const char *debugName)
Definition AudioStream.h:638
virtual Result requestStart()=0
virtual ResultWithValue< double > calculateLatencyMillis()
Definition AudioStream.h:307
virtual ResultWithValue< int32_t > read(void *, int32_t, int64_t)
Definition AudioStream.h:391
virtual bool isXRunCountSupported() const =0
int32_t getBytesPerSample() const
virtual ResultWithValue< int32_t > getXRunCount()
Definition AudioStream.h:223
virtual void updateFramesRead()=0
virtual StreamState getState()=0
virtual Result release()
Definition AudioStream.h:89
virtual oboe::Result notifyWorkloadSpike(bool cpu, bool gpu, const char *debugName)
Definition AudioStream.h:670
virtual void closePerformanceHint()
Definition AudioStream.h:783
int32_t getBytesPerFrame() const
Definition AudioStream.h:250
void sleepBeforeClose()
Definition AudioStream.h:763
virtual void updateFramesWritten()=0
virtual Result open()
Definition AudioStream.h:66
virtual void beginPerformanceHintInCallback()
Definition AudioStream.h:772
virtual Result requestFlush()=0
virtual void endPerformanceHintInCallback(int32_t)
Definition AudioStream.h:778
virtual Result requestPause()=0
virtual Result requestStop()=0
std::atomic< int64_t > mFramesWritten
Definition AudioStream.h:808
virtual Result waitForStateTransition(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)
virtual void * getUnderlyingStream() const
Definition AudioStream.h:421
AudioStream(const AudioStreamBuilder &builder)
virtual oboe::Result getLastErrorCallbackResult() const
Definition AudioStream.h:488
virtual oboe::Result reportWorkload(int32_t appWorkload)
Definition AudioStream.h:578
bool isPerformanceHintEnabled()
Definition AudioStream.h:548
bool wasErrorCallbackCalled()
Definition AudioStream.h:704
ResultWithValue< int32_t > getAvailableFrames()
virtual oboe::Result notifyWorkloadIncrease(bool cpu, bool gpu, const char *debugName)
Definition AudioStream.h:607
virtual ResultWithValue< int32_t > setBufferSizeInFrames(int32_t)
Definition AudioStream.h:207
virtual int64_t getFramesWritten()
DataCallbackResult fireDataCallback(void *audioData, int numFrames)
ResultWithValue< int32_t > waitForAvailableFrames(int32_t numFrames, int64_t timeoutNanoseconds)
virtual Result getTimestamp(clockid_t, int64_t *, int64_t *)
Definition AudioStream.h:332
virtual ResultWithValue< int32_t > write(const void *, int32_t, int64_t)
Definition AudioStream.h:373
void setPerformanceHintEnabled(bool enabled)
Definition AudioStream.h:538
bool isDataCallbackEnabled()
Definition AudioStream.h:742
virtual Result stop(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)
virtual int64_t getFramesRead()
void calculateDefaultDelayBeforeCloseMillis()
virtual Result start(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)
void setDelayBeforeCloseMillis(int32_t delayBeforeCloseMillis)
Definition AudioStream.h:511
virtual ResultWithValue< FrameTimestamp > getTimestamp(clockid_t)
Definition ResultWithValue.h:47
Definition AudioStream.h:849