19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_AUDIOTRACK_H 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_AUDIOTRACK_H 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/IAudioFlinger.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/IAudioTrack.h> 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/AudioSystem.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/RefBase.h> 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Errors.h> 290795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IInterface.h> 300795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IMemory.h> 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/threads.h> 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass audio_track_cblk_t; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AudioTrack 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum channel_index { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MONO = 0, 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LEFT = 0, 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RIGHT = 1 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Events used by AudioTrack callback function (audio_track_cblk_t). 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum event_type { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EVENT_MORE_DATA = 0, // Request to write more data to PCM buffer. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EVENT_UNDERRUN = 1, // PCM buffer underrun occured. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EVENT_LOOP_END = 2, // Sample loop end was reached; playback restarted from loop start if loop count was not 0. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EVENT_MARKER = 3, // Playback head is at the specified marker position (See setMarkerPosition()). 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EVENT_NEW_POS = 4, // Playback head is at a new position (See setPositionUpdatePeriod()). 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EVENT_BUFFER_END = 5 // Playback head is at the end of the buffer. 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Create Buffer on the stack and pass it to obtainBuffer() 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and releaseBuffer(). 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Buffer 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MUTE = 0x00000001 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int channelCount; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t frameCount; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t size; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project union { 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* raw; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project short* i16; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int8_t* i8; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* As a convenience, if a callback is supplied, a handler thread 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is automatically created with the appropriate priority. This thread 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * invokes the callback when a new buffer becomes availlable or an underrun condition occurs. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parameters: 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * event: type of event notified (see enum AudioTrack::event_type). 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user: Pointer to context for use by the callback receiver. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * info: Pointer to optional parameter according to event type: 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - EVENT_MORE_DATA: pointer to AudioTrack::Buffer struct. The callback must not write 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more bytes than indicated by 'size' field and update 'size' if less bytes are 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * written. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - EVENT_UNDERRUN: unused. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - EVENT_LOOP_END: pointer to an int indicating the number of loops remaining. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - EVENT_MARKER: pointer to an uin32_t containing the marker position in frames. 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - EVENT_NEW_POS: pointer to an uin32_t containing the new position in frames. 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - EVENT_BUFFER_END: unused. 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typedef void (*callback_t)(int event, void* user, void *info); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Constructs an uninitialized AudioTrack. No connection with 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * AudioFlinger takes place. 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioTrack(); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Creates an audio track and registers it with AudioFlinger. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Once created, the track needs to be started before it can be used. 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unspecified values are set to the audio hardware's current 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parameters: 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * streamType: Select the type of audio stream this track is attached to 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (e.g. AudioSystem::MUSIC). 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sampleRate: Track sampling rate in Hz. 120a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * format: Audio format (e.g AudioSystem::PCM_16_BIT for signed 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16 bits per sample). 122a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * channels: Channel mask: see AudioSystem::audio_channels. 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * frameCount: Total size of track PCM buffer in frames. This defines the 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * latency of the track. 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flags: Reserved for future use. 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cbf: Callback function. If not null, this function is called periodically 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to request new PCM data. 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * notificationFrames: The callback function is called each time notificationFrames PCM 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * frames have been comsumed from track input buffer. 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user Context for use by the callback receiver. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioTrack( int streamType, 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate = 0, 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format = 0, 136a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int channels = 0, 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int frameCount = 0, 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags = 0, 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callback_t cbf = 0, 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* user = 0, 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int notificationFrames = 0); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Creates an audio track and registers it with AudioFlinger. With this constructor, 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The PCM data to be rendered by AudioTrack is passed in a shared memory buffer 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * identified by the argument sharedBuffer. This prototype is for static buffer playback. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PCM data must be present into memory before the AudioTrack is started. 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Write() and Flush() methods are not supported in this case. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It is recommented to pass a callback function to be notified of playback end by an 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * EVENT_UNDERRUN event. 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioTrack( int streamType, 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate = 0, 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format = 0, 155a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int channels = 0, 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<IMemory>& sharedBuffer = 0, 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags = 0, 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callback_t cbf = 0, 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* user = 0, 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int notificationFrames = 0); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Terminates the AudioTrack and unregisters it from AudioFlinger. 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Also destroys all resources assotiated with the AudioTrack. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ~AudioTrack(); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Initialize an uninitialized AudioTrack. 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returned status (from utils/Errors.h) can be: 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - NO_ERROR: successful intialization 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - INVALID_OPERATION: AudioTrack is already intitialized 172a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * - BAD_VALUE: invalid parameter (channels, format, sampleRate...) 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - NO_INIT: audio server or audio hardware not initialized 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * */ 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t set(int streamType =-1, 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate = 0, 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format = 0, 178a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int channels = 0, 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int frameCount = 0, 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags = 0, 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callback_t cbf = 0, 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* user = 0, 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int notificationFrames = 0, 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<IMemory>& sharedBuffer = 0, 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool threadCanCallJava = false); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Result of constructing the AudioTrack. This must be checked 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * before using any AudioTrack API (except for set()), using 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an uninitialized AudioTrack produces undefined results. 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See set() method above for possible return codes. 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t initCheck() const; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Returns this track's latency in milliseconds. 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This includes the latency due to AudioTrack buffer size, AudioMixer (if any) 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and audio hardware driver. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t latency() const; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* getters, see constructor */ 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int streamType() const; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format() const; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int channelCount() const; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t frameCount() const; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int frameSize() const; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMemory>& sharedBuffer(); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* After it's created the track is not active. Call start() to 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * make it active. If set, the callback will start being called. 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void start(); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Stop a track. If set, the callback will cease being called and 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * obtainBuffer returns STOPPED. Note that obtainBuffer() still works 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and will fill up buffers until the pool is exhausted. 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void stop(); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool stopped() const; 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* flush a stopped track. All pending buffers are discarded. 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This function has no effect if the track is not stoped. 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void flush(); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Pause a track. If set, the callback will cease being called and 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * obtainBuffer returns STOPPED. Note that obtainBuffer() still works 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and will fill up buffers until the pool is exhausted. 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void pause(); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* mute or unmutes this track. 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * While mutted, the callback, if set, is still called. 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void mute(bool); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool muted() const; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* set volume for this track, mostly used for games' sound effects 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setVolume(float left, float right); 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void getVolume(float* left, float* right); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* set sample rate for this track, mostly used for games' sound effects 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24888e209dcf8c2ebddda5c272f46d1bd5478bc639cEric Laurent status_t setSampleRate(int sampleRate); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getSampleRate(); 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Enables looping and sets the start and end points of looping. 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parameters: 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * loopStart: loop start expressed as the number of PCM frames played since AudioTrack start. 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * loopEnd: loop end expressed as the number of PCM frames played since AudioTrack start. 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * loopCount: number of loops to execute. Calling setLoop() with loopCount == 0 cancels any pending or 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * active loop. loopCount = -1 means infinite looping. 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For proper operation the following condition must be respected: 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (loopEnd-loopStart) <= framecount() 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setLoop(uint32_t loopStart, uint32_t loopEnd, int loopCount); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t getLoop(uint32_t *loopStart, uint32_t *loopEnd, int *loopCount); 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Sets marker position. When playback reaches the number of frames specified, a callback with event 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * type EVENT_MARKER is called. Calling setMarkerPosition with marker == 0 cancels marker notification 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * callback. 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the AudioTrack has been opened with no callback function associated, the operation will fail. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parameters: 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * marker: marker position expressed in frames. 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returned status (from utils/Errors.h) can be: 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - NO_ERROR: successful operation 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - INVALID_OPERATION: the AudioTrack has no callback installed. 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setMarkerPosition(uint32_t marker); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t getMarkerPosition(uint32_t *marker); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Sets position update period. Every time the number of frames specified has been played, 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a callback with event type EVENT_NEW_POS is called. 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calling setPositionUpdatePeriod with updatePeriod == 0 cancels new position notification 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * callback. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the AudioTrack has been opened with no callback function associated, the operation will fail. 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parameters: 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * updatePeriod: position update notification period expressed in frames. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returned status (from utils/Errors.h) can be: 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - NO_ERROR: successful operation 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - INVALID_OPERATION: the AudioTrack has no callback installed. 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setPositionUpdatePeriod(uint32_t updatePeriod); 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t getPositionUpdatePeriod(uint32_t *updatePeriod); 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Sets playback head position within AudioTrack buffer. The new position is specified 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in number of frames. 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method must be called with the AudioTrack in paused or stopped state. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that the actual position set is <position> modulo the AudioTrack buffer size in frames. 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Therefore using this method makes sense only when playing a "static" audio buffer 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as opposed to streaming. 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The getPosition() method on the other hand returns the total number of frames played since 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * playback start. 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parameters: 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * position: New playback head position within AudioTrack buffer. 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returned status (from utils/Errors.h) can be: 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - NO_ERROR: successful operation 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - INVALID_OPERATION: the AudioTrack is not stopped. 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - BAD_VALUE: The specified position is beyond the number of frames present in AudioTrack buffer 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setPosition(uint32_t position); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t getPosition(uint32_t *position); 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Forces AudioTrack buffer full condition. When playing a static buffer, this method avoids 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rewriting the buffer before restarting playback after a stop. 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method must be called with the AudioTrack in paused or stopped state. 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returned status (from utils/Errors.h) can be: 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - NO_ERROR: successful operation 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - INVALID_OPERATION: the AudioTrack is not stopped. 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t reload(); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 333a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* returns a handle on the audio output used by this AudioTrack. 334a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * 335a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * Parameters: 336a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * none. 337a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * 338a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * Returned value: 339a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * handle on audio hardware output 340a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent */ 341a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent audio_io_handle_t getOutput(); 342a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* obtains a buffer of "frameCount" frames. The buffer must be 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * filled entirely. If the track is stopped, obtainBuffer() returns 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * STOPPED instead of NO_ERROR as long as there are buffers availlable, 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which point NO_MORE_BUFFERS is returned. 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Buffers will be returned until the pool (buffercount()) 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is exhausted, at which point obtainBuffer() will either block 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or return WOULD_BLOCK depending on the value of the "blocking" 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * parameter. 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NO_MORE_BUFFERS = 0x80000001, 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project STOPPED = 1 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t obtainBuffer(Buffer* audioBuffer, int32_t waitCount); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void releaseBuffer(Buffer* audioBuffer); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* As a convenience we provide a write() interface to the audio buffer. 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is implemented on top of lockBuffer/unlockBuffer. For best 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * performance 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t write(const void* buffer, size_t size); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dumps the state of an audio track. 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t dump(int fd, const Vector<String16>& args) const; 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* copying audio tracks is not allowed */ 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioTrack(const AudioTrack& other); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioTrack& operator = (const AudioTrack& other); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* a small internal class to handle the callback */ 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class AudioTrackThread : public Thread 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioTrackThread(AudioTrack& receiver, bool bCanCallJava = false); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend class AudioTrack; 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool threadLoop(); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t readyToRun(); 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void onFirstRef(); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioTrack& mReceiver; 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Mutex mLock; 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool processAudioBuffer(const sp<AudioTrackThread>& thread); 394bda7469d9b1ec6d9c9d6da40ddf64dc39ff271a9Eric Laurent status_t createTrack(int streamType, 395bda7469d9b1ec6d9c9d6da40ddf64dc39ff271a9Eric Laurent uint32_t sampleRate, 396bda7469d9b1ec6d9c9d6da40ddf64dc39ff271a9Eric Laurent int format, 397bda7469d9b1ec6d9c9d6da40ddf64dc39ff271a9Eric Laurent int channelCount, 398bda7469d9b1ec6d9c9d6da40ddf64dc39ff271a9Eric Laurent int frameCount, 399bda7469d9b1ec6d9c9d6da40ddf64dc39ff271a9Eric Laurent uint32_t flags, 400bda7469d9b1ec6d9c9d6da40ddf64dc39ff271a9Eric Laurent const sp<IMemory>& sharedBuffer, 401bda7469d9b1ec6d9c9d6da40ddf64dc39ff271a9Eric Laurent audio_io_handle_t output); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IAudioTrack> mAudioTrack; 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMemory> mCblkMemory; 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AudioTrackThread> mAudioTrackThread; 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mVolume[2]; 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mFrameCount; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project audio_track_cblk_t* mCblk; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t mStreamType; 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t mFormat; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t mChannelCount; 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t mMuted; 415a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t mChannels; 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t mStatus; 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mLatency; 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project volatile int32_t mActive; 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callback_t mCbf; 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* mUserData; 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mNotificationFrames; 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMemory> mSharedBuffer; 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mLoopCount; 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mRemainingFrames; 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mMarkerPosition; 4284a5c1a7e84a250eafe0e3a12d859c45747520d55Jean-Michel Trivi bool mMarkerReached; 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mNewPosition; 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mUpdatePeriod; 431a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t mFlags; 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // ANDROID_AUDIOTRACK_H 438