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