xref: /aosp_15_r20/frameworks/av/media/libaaudio/src/core/AudioStreamBuilder.h (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1 /*
2  * Copyright 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef AAUDIO_AUDIO_STREAM_BUILDER_H
18 #define AAUDIO_AUDIO_STREAM_BUILDER_H
19 
20 #include <set>
21 #include <stdint.h>
22 
23 #include <aaudio/AAudio.h>
24 
25 #include "AAudioStreamParameters.h"
26 #include "AudioStream.h"
27 
28 namespace aaudio {
29 
30 /**
31  * Factory class for an AudioStream.
32  */
33 class AudioStreamBuilder : public AAudioStreamParameters {
34 public:
35     AudioStreamBuilder() = default;
36 
37     ~AudioStreamBuilder() = default;
38 
isSharingModeMatchRequired()39     bool isSharingModeMatchRequired() const {
40         return mSharingModeMatchRequired;
41     }
42 
setSharingModeMatchRequired(bool required)43     AudioStreamBuilder* setSharingModeMatchRequired(bool required) {
44         mSharingModeMatchRequired = required;
45         return this;
46     }
47 
getPerformanceMode()48     int32_t getPerformanceMode() const {
49         return mPerformanceMode;
50     }
51 
setPerformanceMode(aaudio_performance_mode_t performanceMode)52     AudioStreamBuilder* setPerformanceMode(aaudio_performance_mode_t performanceMode) {
53         mPerformanceMode = performanceMode;
54         return this;
55     }
56 
getDataCallbackProc()57     AAudioStream_dataCallback getDataCallbackProc() const {
58         return mDataCallbackProc;
59     }
60 
setDataCallbackProc(AAudioStream_dataCallback proc)61     AudioStreamBuilder* setDataCallbackProc(AAudioStream_dataCallback proc) {
62         mDataCallbackProc = proc;
63         return this;
64     }
65 
getDataCallbackUserData()66     void *getDataCallbackUserData() const {
67         return mDataCallbackUserData;
68     }
69 
setDataCallbackUserData(void * userData)70     AudioStreamBuilder* setDataCallbackUserData(void *userData) {
71         mDataCallbackUserData = userData;
72         return this;
73     }
74 
getErrorCallbackProc()75     AAudioStream_errorCallback getErrorCallbackProc() const {
76         return mErrorCallbackProc;
77     }
78 
setErrorCallbackProc(AAudioStream_errorCallback proc)79     AudioStreamBuilder* setErrorCallbackProc(AAudioStream_errorCallback proc) {
80         mErrorCallbackProc = proc;
81         return this;
82     }
83 
setErrorCallbackUserData(void * userData)84     AudioStreamBuilder* setErrorCallbackUserData(void *userData) {
85         mErrorCallbackUserData = userData;
86         return this;
87     }
88 
getErrorCallbackUserData()89     void *getErrorCallbackUserData() const {
90         return mErrorCallbackUserData;
91     }
92 
setPresentationEndCallbackProc(AAudioStream_presentationEndCallback proc)93     AudioStreamBuilder* setPresentationEndCallbackProc(AAudioStream_presentationEndCallback proc) {
94         mPresentationEndCallbackProc = proc;
95         return this;
96     }
97 
getPresentationEndCallbackProc()98     AAudioStream_presentationEndCallback getPresentationEndCallbackProc() const {
99         return mPresentationEndCallbackProc;
100     }
101 
setPresentationEndCallbackUserData(void * userData)102     AudioStreamBuilder* setPresentationEndCallbackUserData(void *userData) {
103         mPresentationEndCallbackUserData = userData;
104         return this;
105     }
106 
getPresentationEndCallbackUserData()107     void *getPresentationEndCallbackUserData() const {
108         return mPresentationEndCallbackUserData;
109     }
110 
getFramesPerDataCallback()111     int32_t getFramesPerDataCallback() const {
112         return mFramesPerDataCallback;
113     }
114 
setFramesPerDataCallback(int32_t sizeInFrames)115     AudioStreamBuilder* setFramesPerDataCallback(int32_t sizeInFrames) {
116         mFramesPerDataCallback = sizeInFrames;
117         return this;
118     }
119 
setPrivacySensitiveRequest(bool privacySensitive)120     AudioStreamBuilder* setPrivacySensitiveRequest(bool privacySensitive) {
121         mPrivacySensitiveReq =
122             privacySensitive ? PRIVACY_SENSITIVE_ENABLED : PRIVACY_SENSITIVE_DISABLED;
123         return this;
124     }
125 
126     aaudio_result_t addTag(const char* tag);
127 
128     void clearTags();
129 
130     aaudio_result_t build(AudioStream **streamPtr);
131 
132     virtual aaudio_result_t validate() const override;
133 
134 
135     void logParameters() const;
136 
137     // Mark the stream so it can be deleted.
138     static void stopUsingStream(AudioStream *stream);
139 
140 private:
141     // Extract a raw pointer that we can pass to a 'C' app.
142     static AudioStream *startUsingStream(android::sp<AudioStream> &spAudioStream);
143 
144     bool                       mSharingModeMatchRequired = false; // must match sharing mode requested
145     aaudio_performance_mode_t  mPerformanceMode = AAUDIO_PERFORMANCE_MODE_NONE;
146 
147     AAudioStream_dataCallback  mDataCallbackProc = nullptr;  // external callback functions
148     void                      *mDataCallbackUserData = nullptr;
149     int32_t                    mFramesPerDataCallback = AAUDIO_UNSPECIFIED; // frames
150 
151     AAudioStream_errorCallback mErrorCallbackProc = nullptr;
152     void                      *mErrorCallbackUserData = nullptr;
153 
154     AAudioStream_presentationEndCallback mPresentationEndCallbackProc = nullptr;
155     void                                *mPresentationEndCallbackUserData = nullptr;
156 
157     enum {
158         PRIVACY_SENSITIVE_DEFAULT = -1,
159         PRIVACY_SENSITIVE_DISABLED = 0,
160         PRIVACY_SENSITIVE_ENABLED = 1,
161     };
162     typedef int32_t privacy_sensitive_t;
163     privacy_sensitive_t        mPrivacySensitiveReq = PRIVACY_SENSITIVE_DEFAULT;
164 };
165 
166 } /* namespace aaudio */
167 
168 #endif //AAUDIO_AUDIO_STREAM_BUILDER_H
169