AudioTrackShared.h revision c2f1f07084818942352c6bbfb36af9b6b330eb4e
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * you may not use this file except in compliance with the License. 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * You may obtain a copy of the License at 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * See the License for the specific language governing permissions and 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * limitations under the License. 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifndef ANDROID_AUDIO_TRACK_SHARED_H 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define ANDROID_AUDIO_TRACK_SHARED_H 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdint.h> 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/types.h> 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/threads.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define THREAD_PRIORITY_AUDIO_CLIENT (ANDROID_PRIORITY_AUDIO) 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Maximum cumulated timeout milliseconds before restarting audioflinger thread 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define MAX_STARTUP_TIMEOUT_MS 3000 // Longer timeout period at startup to cope with A2DP init time 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define MAX_RUN_TIMEOUT_MS 1000 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define WAIT_PERIOD_MS 10 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstruct audio_track_cblk_t 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // The data members are grouped so that members accessed frequently and in the same context 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // are in the same line of data cache. 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex lock; 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Condition cv; 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project volatile uint32_t user; 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project volatile uint32_t server; 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t userBase; 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t serverBase; 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* buffers; 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t frameCount; 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // Cache line boundary 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t loopStart; 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t loopEnd; 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int loopCount; 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project volatile union { 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint16_t volume[2]; 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t volumeLR; 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 57573266210fb2b2e7d86fbd46d0dfe16763611d91Eric Laurent uint32_t sampleRate; 58c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent // NOTE: audio_track_cblk_t::frameSize is not equal to AudioTrack::frameSize() for 59c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent // 8 bit PCM data: in this case, mCblk->frameSize is based on a sample size of 60c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent // 16 bit because data is converted to 16 bit before being stored in buffer 61c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t frameSize; 62573266210fb2b2e7d86fbd46d0dfe16763611d91Eric Laurent uint8_t channels; 63573266210fb2b2e7d86fbd46d0dfe16763611d91Eric Laurent uint8_t flowControlFlag; // underrun (out) or overrrun (in) indication 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint8_t out; // out equals 1 for AudioTrack and 0 for AudioRecord 65c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint8_t forceReady; 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint16_t bufferTimeoutMs; // Maximum cumulated timeout before restarting audioflinger 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint16_t waitTimeMs; // Cumulated wait time 68c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent // Cache line boundary (32 bytes) 69c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project audio_track_cblk_t(); 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t stepUser(uint32_t frameCount); 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool stepServer(uint32_t frameCount); 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* buffer(uint32_t offset) const; 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t framesAvailable(); 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t framesAvailable_l(); 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t framesReady(); 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_AUDIO_TRACK_SHARED_H 85