1e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk/*
2e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Copyright 2015 The Android Open Source Project
3e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk *
4e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Licensed under the Apache License, Version 2.0 (the "License");
5e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * you may not use this file except in compliance with the License.
6e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * You may obtain a copy of the License at
7e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk *
8e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk *      http://www.apache.org/licenses/LICENSE-2.0
9e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk *
10e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Unless required by applicable law or agreed to in writing, software
11e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * distributed under the License is distributed on an "AS IS" BASIS,
12e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * See the License for the specific language governing permissions and
14e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * limitations under the License.
15e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk */
16e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
17e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk#ifndef AAUDIO_AUDIO_STREAM_BUILDER_H
18e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk#define AAUDIO_AUDIO_STREAM_BUILDER_H
19e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
20d8bdcabbac30d48ed17fa76c83cb9ee95c290a07Phil Burk#include <stdint.h>
21d8bdcabbac30d48ed17fa76c83cb9ee95c290a07Phil Burk
225ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include <aaudio/AAudio.h>
23d8bdcabbac30d48ed17fa76c83cb9ee95c290a07Phil Burk
24901f65deb49786f4dffd39ac965c0bb681392c0bjiabin#include "AAudioStreamParameters.h"
25e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#include "AudioStream.h"
26e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
275ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burknamespace aaudio {
28e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
29e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk/**
30e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Factory class for an AudioStream.
31e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk */
32901f65deb49786f4dffd39ac965c0bb681392c0bjiabinclass AudioStreamBuilder : public AAudioStreamParameters {
33e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burkpublic:
34e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    AudioStreamBuilder();
35e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
36e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    ~AudioStreamBuilder();
37e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
3871f35bb687476694882a617ba4a810a0bb56fe23Phil Burk    bool isSharingModeMatchRequired() const {
3971f35bb687476694882a617ba4a810a0bb56fe23Phil Burk        return mSharingModeMatchRequired;
4071f35bb687476694882a617ba4a810a0bb56fe23Phil Burk    }
4171f35bb687476694882a617ba4a810a0bb56fe23Phil Burk
4271f35bb687476694882a617ba4a810a0bb56fe23Phil Burk    AudioStreamBuilder* setSharingModeMatchRequired(bool required) {
4371f35bb687476694882a617ba4a810a0bb56fe23Phil Burk        mSharingModeMatchRequired = required;
4471f35bb687476694882a617ba4a810a0bb56fe23Phil Burk        return this;
4571f35bb687476694882a617ba4a810a0bb56fe23Phil Burk    }
4671f35bb687476694882a617ba4a810a0bb56fe23Phil Burk
47e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk    int32_t getPerformanceMode() const {
48e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk        return mPerformanceMode;
49e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk    }
50e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk
51e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk    AudioStreamBuilder* setPerformanceMode(aaudio_performance_mode_t performanceMode) {
52e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk        mPerformanceMode = performanceMode;
53e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk        return this;
54e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk    }
55e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk
56e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    AAudioStream_dataCallback getDataCallbackProc() const {
57e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        return mDataCallbackProc;
58e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    }
59e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
60e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    AudioStreamBuilder* setDataCallbackProc(AAudioStream_dataCallback proc) {
61e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        mDataCallbackProc = proc;
62e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        return this;
63e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    }
64e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
65e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    void *getDataCallbackUserData() const {
66e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        return mDataCallbackUserData;
67e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    }
68e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
69e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    AudioStreamBuilder* setDataCallbackUserData(void *userData) {
70e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        mDataCallbackUserData = userData;
71e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        return this;
72e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    }
73e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
74e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    AAudioStream_errorCallback getErrorCallbackProc() const {
75e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        return mErrorCallbackProc;
76e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    }
77e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
78e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    AudioStreamBuilder* setErrorCallbackProc(AAudioStream_errorCallback proc) {
79e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        mErrorCallbackProc = proc;
80e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        return this;
81e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    }
82e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
83e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    AudioStreamBuilder* setErrorCallbackUserData(void *userData) {
84e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        mErrorCallbackUserData = userData;
85e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        return this;
86e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    }
87e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
88e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    void *getErrorCallbackUserData() const {
89e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        return mErrorCallbackUserData;
90e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    }
91e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
92e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    int32_t getFramesPerDataCallback() const {
93e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        return mFramesPerDataCallback;
94e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    }
95e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
96e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    AudioStreamBuilder* setFramesPerDataCallback(int32_t sizeInFrames) {
97e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        mFramesPerDataCallback = sizeInFrames;
98e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk        return this;
99e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    }
100e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
1015ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk    aaudio_result_t build(AudioStream **streamPtr);
102e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
103901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    virtual aaudio_result_t validate() const override;
1043401bcdd98c5a43a14701a0e7299a2318c6863c9Phil Burk
105e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burkprivate:
106e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk    bool                       mSharingModeMatchRequired = false; // must match sharing mode requested
107e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk    aaudio_performance_mode_t  mPerformanceMode = AAUDIO_PERFORMANCE_MODE_NONE;
108e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
109e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    AAudioStream_dataCallback  mDataCallbackProc = nullptr;  // external callback functions
110e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    void                      *mDataCallbackUserData = nullptr;
111e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    int32_t                    mFramesPerDataCallback = AAUDIO_UNSPECIFIED; // frames
112e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk
113e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    AAudioStream_errorCallback mErrorCallbackProc = nullptr;
114e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk    void                      *mErrorCallbackUserData = nullptr;
115e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk};
116e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
1175ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk} /* namespace aaudio */
118e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
119e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk#endif //AAUDIO_AUDIO_STREAM_BUILDER_H
120