1204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk/* 2204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Copyright 2016 The Android Open Source Project 3204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * 4204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Licensed under the Apache License, Version 2.0 (the "License"); 5204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * you may not use this file except in compliance with the License. 6204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * You may obtain a copy of the License at 7204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * 8204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * http://www.apache.org/licenses/LICENSE-2.0 9204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * 10204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Unless required by applicable law or agreed to in writing, software 11204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * distributed under the License is distributed on an "AS IS" BASIS, 12204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * See the License for the specific language governing permissions and 14204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * limitations under the License. 15204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */ 16204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 17204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <stdint.h> 18204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 19204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <sys/mman.h> 20a4eb0d86a29be2763be5fac51727858d5095794bPhil Burk#include <aaudio/AAudio.h> 21a4eb0d86a29be2763be5fac51727858d5095794bPhil Burk 22204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <binder/Parcel.h> 23204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <binder/Parcelable.h> 24204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 255ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include "binding/AAudioStreamConfiguration.h" 26204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 27204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::NO_ERROR; 28204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::status_t; 29204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::Parcel; 30204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::Parcelable; 31204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 325ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkusing namespace aaudio; 33204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 345ed503c7a66c90f93759c90237a9b432dbd93f9fPhil BurkAAudioStreamConfiguration::AAudioStreamConfiguration() {} 355ed503c7a66c90f93759c90237a9b432dbd93f9fPhil BurkAAudioStreamConfiguration::~AAudioStreamConfiguration() {} 36204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 375ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkstatus_t AAudioStreamConfiguration::writeToParcel(Parcel* parcel) const { 38c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk status_t status; 39901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->writeInt32(getDeviceId()); 40c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 41901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->writeInt32(getSampleRate()); 42c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 43901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->writeInt32(getSamplesPerFrame()); 44c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 45901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->writeInt32((int32_t) getSharingMode()); 46c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 47901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->writeInt32((int32_t) getFormat()); 48c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 4915f7cab18eb12870545734588b12d873d0fe5d84Phil Burk status = parcel->writeInt32((int32_t) getDirection()); 5015f7cab18eb12870545734588b12d873d0fe5d84Phil Burk if (status != NO_ERROR) goto error; 51901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->writeInt32(getBufferCapacity()); 52c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 53d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk status = parcel->writeInt32((int32_t) getUsage()); 54d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk if (status != NO_ERROR) goto error; 55d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk status = parcel->writeInt32((int32_t) getContentType()); 56d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk if (status != NO_ERROR) goto error; 57d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk status = parcel->writeInt32((int32_t) getInputPreset()); 58d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk if (status != NO_ERROR) goto error; 594e1af9fc9c1108d4514e92774f750bcd434dbbccPhil Burk status = parcel->writeInt32(getSessionId()); 604e1af9fc9c1108d4514e92774f750bcd434dbbccPhil Burk if (status != NO_ERROR) goto error; 61c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk return NO_ERROR; 62c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkerror: 63c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGE("AAudioStreamConfiguration.writeToParcel(): write failed = %d", status); 64c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk return status; 65204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk} 66204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 675ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkstatus_t AAudioStreamConfiguration::readFromParcel(const Parcel* parcel) { 68901f65deb49786f4dffd39ac965c0bb681392c0bjiabin int32_t value; 69901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status_t status = parcel->readInt32(&value); 70c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 71901f65deb49786f4dffd39ac965c0bb681392c0bjiabin setDeviceId(value); 72901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->readInt32(&value); 73c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 74901f65deb49786f4dffd39ac965c0bb681392c0bjiabin setSampleRate(value); 75901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->readInt32(&value); 76c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 77901f65deb49786f4dffd39ac965c0bb681392c0bjiabin setSamplesPerFrame(value); 78901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->readInt32(&value); 79c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 80d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk setSharingMode((aaudio_sharing_mode_t) value); 81901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->readInt32(&value); 82c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 83d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk setFormat((aaudio_format_t) value); 84901f65deb49786f4dffd39ac965c0bb681392c0bjiabin status = parcel->readInt32(&value); 85c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (status != NO_ERROR) goto error; 8615f7cab18eb12870545734588b12d873d0fe5d84Phil Burk setDirection((aaudio_direction_t) value); 8715f7cab18eb12870545734588b12d873d0fe5d84Phil Burk status = parcel->readInt32(&value); 8815f7cab18eb12870545734588b12d873d0fe5d84Phil Burk if (status != NO_ERROR) goto error; 89901f65deb49786f4dffd39ac965c0bb681392c0bjiabin setBufferCapacity(value); 90d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk status = parcel->readInt32(&value); 91d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk if (status != NO_ERROR) goto error; 92d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk setUsage((aaudio_usage_t) value); 93d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk status = parcel->readInt32(&value); 94d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk if (status != NO_ERROR) goto error; 95d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk setContentType((aaudio_content_type_t) value); 96d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk status = parcel->readInt32(&value); 97d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk if (status != NO_ERROR) goto error; 98d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk setInputPreset((aaudio_input_preset_t) value); 994e1af9fc9c1108d4514e92774f750bcd434dbbccPhil Burk status = parcel->readInt32(&value); 1004e1af9fc9c1108d4514e92774f750bcd434dbbccPhil Burk if (status != NO_ERROR) goto error; 1014e1af9fc9c1108d4514e92774f750bcd434dbbccPhil Burk setSessionId(value); 102c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk return NO_ERROR; 103c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkerror: 104c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGE("AAudioStreamConfiguration.readFromParcel(): read failed = %d", status); 105c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk return status; 10615f7cab18eb12870545734588b12d873d0fe5d84Phil Burk} 107