AAudioStreamConfiguration.cpp revision 71f35bb687476694882a617ba4a810a0bb56fe23
1/* 2 * Copyright 2016 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#include <stdint.h> 18 19#include <sys/mman.h> 20#include <aaudio/AAudio.h> 21 22#include <binder/Parcel.h> 23#include <binder/Parcelable.h> 24 25#include "binding/AAudioStreamConfiguration.h" 26 27using android::NO_ERROR; 28using android::status_t; 29using android::Parcel; 30using android::Parcelable; 31 32using namespace aaudio; 33 34AAudioStreamConfiguration::AAudioStreamConfiguration() {} 35AAudioStreamConfiguration::~AAudioStreamConfiguration() {} 36 37status_t AAudioStreamConfiguration::writeToParcel(Parcel* parcel) const { 38 status_t status; 39 status = parcel->writeInt32(mDeviceId); 40 if (status != NO_ERROR) goto error; 41 status = parcel->writeInt32(mSampleRate); 42 if (status != NO_ERROR) goto error; 43 status = parcel->writeInt32(mSamplesPerFrame); 44 if (status != NO_ERROR) goto error; 45 status = parcel->writeInt32((int32_t) mSharingMode); 46 if (status != NO_ERROR) goto error; 47 status = parcel->writeInt32((int32_t) mAudioFormat); 48 if (status != NO_ERROR) goto error; 49 status = parcel->writeInt32(mBufferCapacity); 50 if (status != NO_ERROR) goto error; 51 return NO_ERROR; 52error: 53 ALOGE("AAudioStreamConfiguration.writeToParcel(): write failed = %d", status); 54 return status; 55} 56 57status_t AAudioStreamConfiguration::readFromParcel(const Parcel* parcel) { 58 int32_t temp; 59 status_t status = parcel->readInt32(&mDeviceId); 60 if (status != NO_ERROR) goto error; 61 status = parcel->readInt32(&mSampleRate); 62 if (status != NO_ERROR) goto error; 63 status = parcel->readInt32(&mSamplesPerFrame); 64 if (status != NO_ERROR) goto error; 65 status = parcel->readInt32(&temp); 66 if (status != NO_ERROR) goto error; 67 mSharingMode = (aaudio_sharing_mode_t) temp; 68 status = parcel->readInt32(&temp); 69 if (status != NO_ERROR) goto error; 70 mAudioFormat = (aaudio_audio_format_t) temp; 71 status = parcel->readInt32(&mBufferCapacity); 72 if (status != NO_ERROR) goto error; 73 return NO_ERROR; 74error: 75 ALOGE("AAudioStreamConfiguration.readFromParcel(): read failed = %d", status); 76 return status; 77} 78 79aaudio_result_t AAudioStreamConfiguration::validate() const { 80 // Validate results of the open. 81 if (mSampleRate < 0 || mSampleRate >= 8 * 48000) { // TODO review limits 82 ALOGE("AAudioStreamConfiguration.validate(): invalid sampleRate = %d", mSampleRate); 83 return AAUDIO_ERROR_INTERNAL; 84 } 85 86 if (mSamplesPerFrame < 1 || mSamplesPerFrame >= 32) { // TODO review limits 87 ALOGE("AAudioStreamConfiguration.validate() invalid samplesPerFrame = %d", mSamplesPerFrame); 88 return AAUDIO_ERROR_INTERNAL; 89 } 90 91 switch (mAudioFormat) { 92 case AAUDIO_FORMAT_PCM_I16: 93 case AAUDIO_FORMAT_PCM_FLOAT: 94 break; 95 default: 96 ALOGE("AAudioStreamConfiguration.validate() invalid audioFormat = %d", mAudioFormat); 97 return AAUDIO_ERROR_INTERNAL; 98 } 99 100 if (mBufferCapacity < 0) { 101 ALOGE("AAudioStreamConfiguration.validate() invalid mBufferCapacity = %d", mBufferCapacity); 102 return AAUDIO_ERROR_INTERNAL; 103 } 104 return AAUDIO_OK; 105} 106 107void AAudioStreamConfiguration::dump() const { 108 ALOGD("AAudioStreamConfiguration mDeviceId = %d", mDeviceId); 109 ALOGD("AAudioStreamConfiguration mSampleRate = %d", mSampleRate); 110 ALOGD("AAudioStreamConfiguration mSamplesPerFrame = %d", mSamplesPerFrame); 111 ALOGD("AAudioStreamConfiguration mSharingMode = %d", (int)mSharingMode); 112 ALOGD("AAudioStreamConfiguration mAudioFormat = %d", (int)mAudioFormat); 113 ALOGD("AAudioStreamConfiguration mBufferCapacity = %d", mBufferCapacity); 114} 115