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