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"
37 bool highPerformanceAudio =
false;
46constexpr int64_t kDefaultTimeoutNanos = (2000 * kNanosPerMillisecond);
98 return Result::ErrorUnimplemented;
110 virtual Result
start(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
116 virtual Result
pause(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
122 virtual Result
flush(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
128 virtual Result
stop(int64_t timeoutNanoseconds = kDefaultTimeoutNanos);
193 StreamState *nextState,
194 int64_t timeoutNanoseconds) = 0;
216 return Result::ErrorUnimplemented;
343 return Result::ErrorUnimplemented;
455 return previousCallback;
469 return previousPartialCallback;
479 AudioStreamErrorCallback *swapErrorCallback(AudioStreamErrorCallback *errorCallback) {
482 return previousCallback;
505 int64_t timeoutNanoseconds);
511 return mErrorCallbackResult;
515 int32_t getDelayBeforeCloseMillis()
const {
516 return mDelayBeforeCloseMillis;
534 mDelayBeforeCloseMillis = delayBeforeCloseMillis;
561 mPerformanceHintEnabled = enabled;
570 mPerformanceHintConfig = config;
574 return mPerformanceHintConfig;
591 return mPerformanceHintEnabled;
621 return oboe::Result::ErrorUnimplemented;
650 [[maybe_unused]]
bool gpu,
651 [[maybe_unused]]
const char* debugName) {
652 return oboe::Result::ErrorUnimplemented;
681 [[maybe_unused]]
bool gpu,
682 [[maybe_unused]]
const char* debugName) {
683 return oboe::Result::ErrorUnimplemented;
713 [[maybe_unused]]
bool gpu,
714 [[maybe_unused]]
const char* debugName) {
715 return oboe::Result::ErrorUnimplemented;
718 virtual oboe::Result setOffloadDelayPadding([[maybe_unused]] int32_t delayInFrames,
719 [[maybe_unused]] int32_t paddingInFrames) {
720 return Result::ErrorUnimplemented;
723 virtual ResultWithValue<int32_t> getOffloadDelay() {
724 return ResultWithValue<int32_t>(Result::ErrorUnimplemented);
727 virtual ResultWithValue<int32_t> getOffloadPadding() {
728 return ResultWithValue<int32_t>(Result::ErrorUnimplemented);
731 virtual oboe::Result setOffloadEndOfStream() {
732 return Result::ErrorUnimplemented;
776 [[maybe_unused]] int64_t positionInFrames) {
796 return Result::ErrorUnimplemented;
814 std::shared_ptr<oboe::AudioStream> lockWeakThis() {
815 return mWeakThis.lock();
830 return mErrorCallbackCalled.exchange(
true);
840 StreamState endingState,
841 int64_t timeoutNanoseconds);
851 return DataCallbackResult::Stop;
877 return mDataCallbackEnabled;
885 mDataCallbackEnabled = enabled;
898 if (mDelayBeforeCloseMillis > 0) {
899 usleep(mDelayBeforeCloseMillis * 1000);
923 void setWeakThis(std::shared_ptr<oboe::AudioStream> &sharedStream) {
924 mWeakThis = sharedStream;
927 std::weak_ptr<AudioStream> mWeakThis;
929 PerformanceHintConfig mPerformanceHintConfig;
949 oboe::Result mErrorCallbackResult = oboe::Result::OK;
959 static constexpr int kMinDelayBeforeCloseMillis = 10;
960 static constexpr int kMaxDelayBeforeCloseMillis = 100;
961 int32_t mDelayBeforeCloseMillis = kMinDelayBeforeCloseMillis;
966 void checkScheduler();
967 int mPreviousScheduler = -1;
969 std::atomic<bool> mDataCallbackEnabled{
false};
970 std::atomic<bool> mErrorCallbackCalled{
false};
972 std::atomic<bool> mPerformanceHintEnabled{
false};
982 audioStream->
close();
Definition AudioStreamBase.h:31
int32_t mChannelCount
Definition AudioStreamBase.h:322
AudioStreamDataCallback * mDataCallback
Definition AudioStreamBase.h:306
AudioFormat mFormat
Definition AudioStreamBase.h:335
AudioStreamErrorCallback * mErrorCallback
Definition AudioStreamBase.h:314
AudioStreamPartialDataCallback * mPartialDataCallback
Definition AudioStreamBase.h:310
Definition AudioStreamBuilder.h:34
Definition AudioStreamCallback.h:34
Definition AudioStream.h:51
int32_t mFramesPerBurst
Definition AudioStream.h:955
virtual Result pause(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)
std::atomic< int64_t > mFramesRead
Definition AudioStream.h:945
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:850
void setDataCallbackEnabled(bool enabled)
Definition AudioStream.h:884
bool usesAAudio() const
Definition AudioStream.h:417
virtual AudioApi getAudioApi() const =0
int32_t getFramesPerBurst() const
Definition AudioStream.h:245
virtual Result flush(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)
virtual oboe::Result notifyWorkloadReset(bool cpu, bool gpu, const char *debugName)
Definition AudioStream.h:680
virtual Result requestStart()=0
virtual ResultWithValue< double > calculateLatencyMillis()
Definition AudioStream.h:315
virtual ResultWithValue< int32_t > read(void *, int32_t, int64_t)
Definition AudioStream.h:399
virtual bool isXRunCountSupported() const =0
int32_t getBytesPerSample() const
virtual ResultWithValue< int32_t > getXRunCount()
Definition AudioStream.h:231
virtual void updateFramesRead()=0
virtual StreamState getState()=0
virtual Result release()
Definition AudioStream.h:97
virtual oboe::Result notifyWorkloadSpike(bool cpu, bool gpu, const char *debugName)
Definition AudioStream.h:712
virtual void closePerformanceHint()
Definition AudioStream.h:917
int32_t getBytesPerFrame() const
Definition AudioStream.h:258
void sleepBeforeClose()
Definition AudioStream.h:897
virtual void updateFramesWritten()=0
virtual Result open()
Definition AudioStream.h:74
virtual void beginPerformanceHintInCallback()
Definition AudioStream.h:906
virtual Result requestFlush()=0
virtual void setReportActualDurationDisabled(bool disabled)
Definition AudioStream.h:582
virtual void endPerformanceHintInCallback(int32_t)
Definition AudioStream.h:912
virtual Result requestPause()=0
virtual Result requestStop()=0
virtual ResultWithValue< PlaybackParameters > getPlaybackParameters()
Definition AudioStream.h:807
std::atomic< int64_t > mFramesWritten
Definition AudioStream.h:937
virtual Result waitForStateTransition(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)
virtual void * getUnderlyingStream() const
Definition AudioStream.h:429
AudioStream(const AudioStreamBuilder &builder)
virtual oboe::Result getLastErrorCallbackResult() const
Definition AudioStream.h:510
virtual oboe::Result reportWorkload(int32_t appWorkload)
Definition AudioStream.h:620
bool isPerformanceHintEnabled()
Definition AudioStream.h:590
virtual int32_t firePartialDataCallback(void *audioData, int numFrames)
bool wasErrorCallbackCalled()
Definition AudioStream.h:829
ResultWithValue< int32_t > getAvailableFrames()
virtual oboe::Result notifyWorkloadIncrease(bool cpu, bool gpu, const char *debugName)
Definition AudioStream.h:649
virtual ResultWithValue< int32_t > setBufferSizeInFrames(int32_t)
Definition AudioStream.h:215
virtual int64_t getFramesWritten()
void setPerformanceHintConfig(const PerformanceHintConfig &config)
Definition AudioStream.h:569
ResultWithValue< int32_t > waitForAvailableFrames(int32_t numFrames, int64_t timeoutNanoseconds)
virtual Result getTimestamp(clockid_t, int64_t *, int64_t *)
Definition AudioStream.h:340
virtual ResultWithValue< int32_t > write(const void *, int32_t, int64_t)
Definition AudioStream.h:381
void setPerformanceHintEnabled(bool enabled)
Definition AudioStream.h:560
virtual oboe::Result setPlaybackParameters(const PlaybackParameters ¶meters)
Definition AudioStream.h:794
bool isDataCallbackEnabled()
Definition AudioStream.h:876
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:533
virtual ResultWithValue< int64_t > flushFromFrame(FlushFromAccuracy accuracy, int64_t positionInFrames)
Definition AudioStream.h:775
virtual ResultWithValue< FrameTimestamp > getTimestamp(clockid_t)
Definition AudioStreamCallback.h:210
Definition ResultWithValue.h:47
Definition Definitions.h:1135
Definition AudioStream.h:979