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;
734 FlushFromAccuracy accuracy, int64_t positionInFrames) {
753 return Result::ErrorUnimplemented;
780 return mErrorCallbackCalled.exchange(
true);
790 StreamState endingState,
791 int64_t timeoutNanoseconds);
801 return DataCallbackResult::Stop;
818 return mDataCallbackEnabled;
826 mDataCallbackEnabled = enabled;
839 if (mDelayBeforeCloseMillis > 0) {
840 usleep(mDelayBeforeCloseMillis * 1000);
864 void setWeakThis(std::shared_ptr<oboe::AudioStream> &sharedStream) {
865 mWeakThis = sharedStream;
871 std::shared_ptr<oboe::AudioStream> lockWeakThis() {
872 return mWeakThis.lock();
875 std::weak_ptr<AudioStream> mWeakThis;
895 oboe::Result mErrorCallbackResult = oboe::Result::OK;
905 static constexpr int kMinDelayBeforeCloseMillis = 10;
906 static constexpr int kMaxDelayBeforeCloseMillis = 100;
907 int32_t mDelayBeforeCloseMillis = kMinDelayBeforeCloseMillis;
912 void checkScheduler();
913 int mPreviousScheduler = -1;
915 std::atomic<bool> mDataCallbackEnabled{
false};
916 std::atomic<bool> mErrorCallbackCalled{
false};
918 std::atomic<bool> mPerformanceHintEnabled{
false};
928 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:901
virtual Result pause(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)
std::atomic< int64_t > mFramesRead
Definition AudioStream.h:891
virtual Result waitForStateChange(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0
virtual DataCallbackResult onDefaultCallback(void *, int)
Definition AudioStream.h:800
void setDataCallbackEnabled(bool enabled)
Definition AudioStream.h:825
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:858
int32_t getBytesPerFrame() const
Definition AudioStream.h:250
void sleepBeforeClose()
Definition AudioStream.h:838
virtual void updateFramesWritten()=0
virtual Result open()
Definition AudioStream.h:66
virtual void beginPerformanceHintInCallback()
Definition AudioStream.h:847
virtual Result requestFlush()=0
virtual void endPerformanceHintInCallback(int32_t)
Definition AudioStream.h:853
virtual Result requestPause()=0
virtual Result requestStop()=0
virtual ResultWithValue< PlaybackParameters > getPlaybackParameters()
Definition AudioStream.h:764
std::atomic< int64_t > mFramesWritten
Definition AudioStream.h:883
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:779
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
virtual oboe::Result setPlaybackParameters(const PlaybackParameters ¶meters)
Definition AudioStream.h:752
bool isDataCallbackEnabled()
Definition AudioStream.h:817
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< int64_t > flushFromFrame(FlushFromAccuracy accuracy, int64_t positionInFrames)
Definition AudioStream.h:733
virtual ResultWithValue< FrameTimestamp > getTimestamp(clockid_t)
Definition ResultWithValue.h:47
Definition Definitions.h:1135
Definition AudioStream.h:925