1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_IAUDIOTRACK_H
18 #define ANDROID_IAUDIOTRACK_H
19 
20 #include <stdint.h>
21 #include <sys/types.h>
22 
23 #include <utils/RefBase.h>
24 #include <utils/Errors.h>
25 #include <binder/IInterface.h>
26 #include <binder/IMemory.h>
27 #include <utils/String8.h>
28 #include <media/AudioTimestamp.h>
29 
30 namespace android {
31 
32 // ----------------------------------------------------------------------------
33 
34 class IAudioTrack : public IInterface
35 {
36 public:
37     DECLARE_META_INTERFACE(AudioTrack);
38 
39     /* Get this track's control block */
40     virtual sp<IMemory> getCblk() const = 0;
41 
42     /* After it's created the track is not active. Call start() to
43      * make it active.
44      */
45     virtual status_t    start() = 0;
46 
47     /* Stop a track. If set, the callback will cease being called and
48      * obtainBuffer will return an error. Buffers that are already released
49      * will continue to be processed, unless/until flush() is called.
50      */
51     virtual void        stop() = 0;
52 
53     /* Flush a stopped or paused track. All pending/released buffers are discarded.
54      * This function has no effect if the track is not stopped or paused.
55      */
56     virtual void        flush() = 0;
57 
58     /* Pause a track. If set, the callback will cease being called and
59      * obtainBuffer will return an error. Buffers that are already released
60      * will continue to be processed, unless/until flush() is called.
61      */
62     virtual void        pause() = 0;
63 
64     /* Attach track auxiliary output to specified effect. Use effectId = 0
65      * to detach track from effect.
66      */
67     virtual status_t    attachAuxEffect(int effectId) = 0;
68 
69     /* Send parameters to the audio hardware */
70     virtual status_t    setParameters(const String8& keyValuePairs) = 0;
71 
72     /* Return NO_ERROR if timestamp is valid.  timestamp is undefined otherwise. */
73     virtual status_t    getTimestamp(AudioTimestamp& timestamp) = 0;
74 
75     /* Signal the playback thread for a change in control block */
76     virtual void        signal() = 0;
77 };
78 
79 // ----------------------------------------------------------------------------
80 
81 class BnAudioTrack : public BnInterface<IAudioTrack>
82 {
83 public:
84     virtual status_t    onTransact( uint32_t code,
85                                     const Parcel& data,
86                                     Parcel* reply,
87                                     uint32_t flags = 0);
88 };
89 
90 // ----------------------------------------------------------------------------
91 
92 }; // namespace android
93 
94 #endif // ANDROID_IAUDIOTRACK_H
95