IAudioTrack.h revision 3acbd053c842e76e1a40fc8a0bf62de87eebf00f
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_IAUDIOTRACK_H 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define ANDROID_IAUDIOTRACK_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/RefBase.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Errors.h> 257562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IInterface.h> 267562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IMemory.h> 274ff14bae91075eb274eb1c2975982358946e7e63John Grossman#include <utils/LinearTransform.h> 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass IAudioTrack : public IInterface 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 35e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kastenpublic: 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DECLARE_META_INTERFACE(AudioTrack); 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 381099586bd48a8a90bb1cc4e7c279703bc7259214Glenn Kasten /* Get this track's control block */ 391099586bd48a8a90bb1cc4e7c279703bc7259214Glenn Kasten virtual sp<IMemory> getCblk() const = 0; 401099586bd48a8a90bb1cc4e7c279703bc7259214Glenn Kasten 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* After it's created the track is not active. Call start() to 423acbd053c842e76e1a40fc8a0bf62de87eebf00fGlenn Kasten * make it active. 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 443acbd053c842e76e1a40fc8a0bf62de87eebf00fGlenn Kasten virtual status_t start() = 0; 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Stop a track. If set, the callback will cease being called and 47e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten * obtainBuffer will return an error. Buffers that are already released 4899e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten * will continue to be processed, unless/until flush() is called. 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void stop() = 0; 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5299e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten /* Flush a stopped or paused track. All pending/released buffers are discarded. 5399e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten * This function has no effect if the track is not stopped or paused. 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void flush() = 0; 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 57362c4e697d8e9c034e964ac7b40227e054491547Glenn Kasten /* Mute or unmute this track. 58362c4e697d8e9c034e964ac7b40227e054491547Glenn Kasten * While muted, the callback, if set, is still called. 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void mute(bool) = 0; 61e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Pause a track. If set, the callback will cease being called and 63e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten * obtainBuffer will return an error. Buffers that are already released 6499e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten * will continue to be processed, unless/until flush() is called. 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void pause() = 0; 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 68be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent /* Attach track auxiliary output to specified effect. Use effectId = 0 69be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent * to detach track from effect. 70be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent */ 71be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent virtual status_t attachAuxEffect(int effectId) = 0; 72be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 734ff14bae91075eb274eb1c2975982358946e7e63John Grossman 744ff14bae91075eb274eb1c2975982358946e7e63John Grossman /* Allocate a shared memory buffer suitable for holding timed audio 754ff14bae91075eb274eb1c2975982358946e7e63John Grossman samples */ 764ff14bae91075eb274eb1c2975982358946e7e63John Grossman virtual status_t allocateTimedBuffer(size_t size, 774ff14bae91075eb274eb1c2975982358946e7e63John Grossman sp<IMemory>* buffer) = 0; 784ff14bae91075eb274eb1c2975982358946e7e63John Grossman 794ff14bae91075eb274eb1c2975982358946e7e63John Grossman /* Queue a buffer obtained via allocateTimedBuffer for playback at the given 804ff14bae91075eb274eb1c2975982358946e7e63John Grossman timestamp */ 814ff14bae91075eb274eb1c2975982358946e7e63John Grossman virtual status_t queueTimedBuffer(const sp<IMemory>& buffer, 824ff14bae91075eb274eb1c2975982358946e7e63John Grossman int64_t pts) = 0; 834ff14bae91075eb274eb1c2975982358946e7e63John Grossman 844ff14bae91075eb274eb1c2975982358946e7e63John Grossman /* Define the linear transform that will be applied to the timestamps 854ff14bae91075eb274eb1c2975982358946e7e63John Grossman given to queueTimedBuffer (which are expressed in media time). 864ff14bae91075eb274eb1c2975982358946e7e63John Grossman Target specifies whether this transform converts media time to local time 874ff14bae91075eb274eb1c2975982358946e7e63John Grossman or Tungsten time. The values for target are defined in AudioTrack.h */ 884ff14bae91075eb274eb1c2975982358946e7e63John Grossman virtual status_t setMediaTimeTransform(const LinearTransform& xform, 894ff14bae91075eb274eb1c2975982358946e7e63John Grossman int target) = 0; 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BnAudioTrack : public BnInterface<IAudioTrack> 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t onTransact( uint32_t code, 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const Parcel& data, 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel* reply, 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = 0); 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_IAUDIOTRACK_H 108