AAudioStreamConfiguration.cpp revision c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fb
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 <binder/Parcel.h> 21#include <binder/Parcelable.h> 22 23#include <aaudio/AAudioDefinitions.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 ALOGD("AAudioStreamConfiguration.writeToParcel(): mSharingMode = %d", mSharingMode); 47 if (status != NO_ERROR) goto error; 48 status = parcel->writeInt32((int32_t) mAudioFormat); 49 if (status != NO_ERROR) goto error; 50 status = parcel->writeInt32(mBufferCapacity); 51 if (status != NO_ERROR) goto error; 52 return NO_ERROR; 53error: 54 ALOGE("AAudioStreamConfiguration.writeToParcel(): write failed = %d", status); 55 return status; 56} 57 58status_t AAudioStreamConfiguration::readFromParcel(const Parcel* parcel) { 59 int32_t temp; 60 status_t status = parcel->readInt32(&mDeviceId); 61 if (status != NO_ERROR) goto error; 62 status = parcel->readInt32(&mSampleRate); 63 if (status != NO_ERROR) goto error; 64 status = parcel->readInt32(&mSamplesPerFrame); 65 if (status != NO_ERROR) goto error; 66 status = parcel->readInt32(&temp); 67 if (status != NO_ERROR) goto error; 68 mSharingMode = (aaudio_sharing_mode_t) temp; 69 ALOGD("AAudioStreamConfiguration.readFromParcel(): mSharingMode = %d", mSharingMode); 70 status = parcel->readInt32(&temp); 71 if (status != NO_ERROR) goto error; 72 mAudioFormat = (aaudio_audio_format_t) temp; 73 status = parcel->readInt32(&mBufferCapacity); 74 if (status != NO_ERROR) goto error; 75 return NO_ERROR; 76error: 77 ALOGE("AAudioStreamConfiguration.readFromParcel(): read failed = %d", status); 78 return status; 79} 80 81aaudio_result_t AAudioStreamConfiguration::validate() const { 82 // Validate results of the open. 83 if (mSampleRate < 0 || mSampleRate >= 8 * 48000) { // TODO review limits 84 ALOGE("AAudioStreamConfiguration.validate(): invalid sampleRate = %d", mSampleRate); 85 return AAUDIO_ERROR_INTERNAL; 86 } 87 88 if (mSamplesPerFrame < 1 || mSamplesPerFrame >= 32) { // TODO review limits 89 ALOGE("AAudioStreamConfiguration.validate() invalid samplesPerFrame = %d", mSamplesPerFrame); 90 return AAUDIO_ERROR_INTERNAL; 91 } 92 93 switch (mAudioFormat) { 94 case AAUDIO_FORMAT_PCM_I16: 95 case AAUDIO_FORMAT_PCM_FLOAT: 96 case AAUDIO_FORMAT_PCM_I8_24: 97 case AAUDIO_FORMAT_PCM_I32: 98 break; 99 default: 100 ALOGE("AAudioStreamConfiguration.validate() invalid audioFormat = %d", mAudioFormat); 101 return AAUDIO_ERROR_INTERNAL; 102 } 103 104 if (mBufferCapacity < 0) { 105 ALOGE("AAudioStreamConfiguration.validate() invalid mBufferCapacity = %d", mBufferCapacity); 106 return AAUDIO_ERROR_INTERNAL; 107 } 108 return AAUDIO_OK; 109} 110 111void AAudioStreamConfiguration::dump() const { 112 ALOGD("AAudioStreamConfiguration mDeviceId = %d", mDeviceId); 113 ALOGD("AAudioStreamConfiguration mSampleRate = %d", mSampleRate); 114 ALOGD("AAudioStreamConfiguration mSamplesPerFrame = %d", mSamplesPerFrame); 115 ALOGD("AAudioStreamConfiguration mSharingMode = %d", (int)mSharingMode); 116 ALOGD("AAudioStreamConfiguration mAudioFormat = %d", (int)mAudioFormat); 117 ALOGD("AAudioStreamConfiguration mBufferCapacity = %d", mBufferCapacity); 118} 119