AudioStreamBuilder.h revision e1ce491a25faf06fdeab00dd938515f71f28b095
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
17e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#ifndef OBOE_AUDIOSTREAMBUILDER_H
18e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#define OBOE_AUDIOSTREAMBUILDER_H
19e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
20e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#include <oboe/OboeAudio.h>
21e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#include "AudioStream.h"
22e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
23e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burknamespace oboe {
24e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
25e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk/**
26e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Factory class for an AudioStream.
27e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk */
28e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burkclass AudioStreamBuilder {
29e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burkpublic:
30e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    AudioStreamBuilder();
31e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
32e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    ~AudioStreamBuilder();
33e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
34e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    int getSamplesPerFrame() const {
35e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return mSamplesPerFrame;
36e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
37e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
38e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    /**
39e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk     * This is also known as channelCount.
40e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk     */
41e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    AudioStreamBuilder *setSamplesPerFrame(int samplesPerFrame) {
42e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        mSamplesPerFrame = samplesPerFrame;
43e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return this;
44e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
45e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
46e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    oboe_direction_t getDirection() const {
47e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return mDirection;
48e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
49e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
50e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    AudioStreamBuilder *setDirection(oboe_direction_t direction) {
51e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        mDirection = direction;
52e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return this;
53e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
54e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
55e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    oboe_sample_rate_t getSampleRate() const {
56e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return mSampleRate;
57e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
58e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
59e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    AudioStreamBuilder *setSampleRate(oboe_sample_rate_t sampleRate) {
60e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        mSampleRate = sampleRate;
61e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return this;
62e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
63e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
64e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    oboe_audio_format_t getFormat() const {
65e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return mFormat;
66e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
67e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
68e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    AudioStreamBuilder *setFormat(oboe_audio_format_t format) {
69e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        mFormat = format;
70e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return this;
71e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
72e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
73e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    oboe_sharing_mode_t getSharingMode() const {
74e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return mSharingMode;
75e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
76e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
77e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    AudioStreamBuilder *setSharingMode(oboe_sharing_mode_t sharingMode) {
78e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        mSharingMode = sharingMode;
79e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return this;
80e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
81e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
82e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    OboeDeviceId getDeviceId() const {
83e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return mDeviceId;
84e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
85e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
86e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    AudioStreamBuilder *setDeviceId(OboeDeviceId deviceId) {
87e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        mDeviceId = deviceId;
88e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return this;
89e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
90e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
91e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    oboe_result_t build(AudioStream **streamPtr);
92e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
93e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burkprivate:
94e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    int32_t              mSamplesPerFrame = OBOE_UNSPECIFIED;
95e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    oboe_sample_rate_t   mSampleRate = OBOE_UNSPECIFIED;
96e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    OboeDeviceId         mDeviceId = OBOE_UNSPECIFIED; // TODO need better default
97e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    oboe_sharing_mode_t  mSharingMode = OBOE_SHARING_MODE_LEGACY;
98e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    oboe_audio_format_t  mFormat = OBOE_UNSPECIFIED;
99e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    oboe_direction_t     mDirection = OBOE_DIRECTION_OUTPUT;
100e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk};
101e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
102e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk} /* namespace oboe */
103e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
104e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#endif /* OBOE_AUDIOSTREAMBUILDER_H */
105