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;
461 return previousPartialCallback;
471 AudioStreamErrorCallback *swapErrorCallback(AudioStreamErrorCallback *errorCallback) {
474 return previousCallback;
497 int64_t timeoutNanoseconds);
503 return mErrorCallbackResult;
507 int32_t getDelayBeforeCloseMillis()
const {
508 return mDelayBeforeCloseMillis;
526 mDelayBeforeCloseMillis = delayBeforeCloseMillis;
553 mPerformanceHintEnabled = enabled;
563 return mPerformanceHintEnabled;
593 return oboe::Result::ErrorUnimplemented;
622 [[maybe_unused]]
bool gpu,
623 [[maybe_unused]]
const char* debugName) {
624 return oboe::Result::ErrorUnimplemented;
653 [[maybe_unused]]
bool gpu,
654 [[maybe_unused]]
const char* debugName) {
655 return oboe::Result::ErrorUnimplemented;
685 [[maybe_unused]]
bool gpu,
686 [[maybe_unused]]
const char* debugName) {
687 return oboe::Result::ErrorUnimplemented;
690 virtual oboe::Result setOffloadDelayPadding([[maybe_unused]] int32_t delayInFrames,
691 [[maybe_unused]] int32_t paddingInFrames) {
692 return Result::ErrorUnimplemented;
695 virtual ResultWithValue<int32_t> getOffloadDelay() {
696 return ResultWithValue<int32_t>(Result::ErrorUnimplemented);
699 virtual ResultWithValue<int32_t> getOffloadPadding() {
700 return ResultWithValue<int32_t>(Result::ErrorUnimplemented);
703 virtual oboe::Result setOffloadEndOfStream() {
704 return Result::ErrorUnimplemented;
748 [[maybe_unused]] int64_t positionInFrames) {
768 return Result::ErrorUnimplemented;
786 std::shared_ptr<oboe::AudioStream> lockWeakThis() {
787 return mWeakThis.lock();
795 return mParentStream;
803 return mHasParentStream;
810 mParentStream = parentStream;
811 mHasParentStream = parentStream !=
nullptr;
826 return mErrorCallbackCalled.exchange(
true);
836 StreamState endingState,
837 int64_t timeoutNanoseconds);
847 return DataCallbackResult::Stop;
873 return mDataCallbackEnabled;
881 mDataCallbackEnabled = enabled;
894 if (mDelayBeforeCloseMillis > 0) {
895 usleep(mDelayBeforeCloseMillis * 1000);
919 void setWeakThis(std::shared_ptr<oboe::AudioStream> &sharedStream) {
920 mWeakThis = sharedStream;
923 std::weak_ptr<AudioStream> mWeakThis;
927 AudioStream *mParentStream{};
930 bool mHasParentStream{};
950 oboe::Result mErrorCallbackResult = oboe::Result::OK;
960 static constexpr int kMinDelayBeforeCloseMillis = 10;
961 static constexpr int kMaxDelayBeforeCloseMillis = 100;
962 int32_t mDelayBeforeCloseMillis = kMinDelayBeforeCloseMillis;
967 void checkScheduler();
968 int mPreviousScheduler = -1;
970 std::atomic<bool> mDataCallbackEnabled{
false};
971 std::atomic<bool> mErrorCallbackCalled{
false};
973 std::atomic<bool> mPerformanceHintEnabled{
false};
983 audioStream->
close();
Definition AudioStreamBase.h:31
int32_t mChannelCount
Definition AudioStreamBase.h:333
AudioStreamDataCallback * mDataCallback
Definition AudioStreamBase.h:315
AudioFormat mFormat
Definition AudioStreamBase.h:346
AudioStreamErrorCallback * mErrorCallback
Definition AudioStreamBase.h:323
AudioStreamPartialDataCallback * mPartialDataCallback
Definition AudioStreamBase.h:319
Definition AudioStreamBuilder.h:34
Definition AudioStreamCallback.h:34
Definition AudioStream.h:43
int32_t mFramesPerBurst
Definition AudioStream.h:956
virtual Result pause(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)
std::atomic< int64_t > mFramesRead
Definition AudioStream.h:946
virtual Result waitForStateChange(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0
virtual DataCallbackResult fireDataCallback(void *audioData, int numFrames)
virtual DataCallbackResult onDefaultCallback(void *, int)
Definition AudioStream.h:846
void setDataCallbackEnabled(bool enabled)
Definition AudioStream.h:880
bool usesAAudio() const
Definition AudioStream.h:409
bool hasParentStream() const
Definition AudioStream.h:802
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:652
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:684
virtual void closePerformanceHint()
Definition AudioStream.h:913
int32_t getBytesPerFrame() const
Definition AudioStream.h:250
void sleepBeforeClose()
Definition AudioStream.h:893
virtual void updateFramesWritten()=0
virtual Result open()
Definition AudioStream.h:66
virtual void beginPerformanceHintInCallback()
Definition AudioStream.h:902
virtual Result requestFlush()=0
virtual void endPerformanceHintInCallback(int32_t)
Definition AudioStream.h:908
virtual Result requestPause()=0
AudioStream * getParentStream() const
Definition AudioStream.h:794
virtual Result requestStop()=0
virtual ResultWithValue< PlaybackParameters > getPlaybackParameters()
Definition AudioStream.h:779
std::atomic< int64_t > mFramesWritten
Definition AudioStream.h:938
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:502
virtual oboe::Result reportWorkload(int32_t appWorkload)
Definition AudioStream.h:592
bool isPerformanceHintEnabled()
Definition AudioStream.h:562
virtual int32_t firePartialDataCallback(void *audioData, int numFrames)
bool wasErrorCallbackCalled()
Definition AudioStream.h:825
ResultWithValue< int32_t > getAvailableFrames()
virtual oboe::Result notifyWorkloadIncrease(bool cpu, bool gpu, const char *debugName)
Definition AudioStream.h:621
virtual ResultWithValue< int32_t > setBufferSizeInFrames(int32_t)
Definition AudioStream.h:207
virtual int64_t getFramesWritten()
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:552
virtual oboe::Result setPlaybackParameters(const PlaybackParameters ¶meters)
Definition AudioStream.h:766
bool isDataCallbackEnabled()
Definition AudioStream.h:872
void setParentStream(AudioStream *parentStream)
Definition AudioStream.h:809
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:525
virtual ResultWithValue< int64_t > flushFromFrame(FlushFromAccuracy accuracy, int64_t positionInFrames)
Definition AudioStream.h:747
virtual ResultWithValue< FrameTimestamp > getTimestamp(clockid_t)
Definition AudioStreamCallback.h:230
Definition ResultWithValue.h:47
Definition Definitions.h:1137
Definition AudioStream.h:980