IAudioTrack.cpp revision 5841db78dff14898538200287d246577b1fc37e2
1/* //device/extlibs/pv/android/IAudioTrack.cpp
2**
3** Copyright 2007, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9**     http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#include <stdint.h>
19#include <sys/types.h>
20
21#include <binder/Parcel.h>
22
23#include <media/IAudioTrack.h>
24
25namespace android {
26
27enum {
28    GET_CBLK = IBinder::FIRST_CALL_TRANSACTION,
29    START,
30    STOP,
31    FLUSH,
32    MUTE,
33    PAUSE
34};
35
36class BpAudioTrack : public BpInterface<IAudioTrack>
37{
38public:
39    BpAudioTrack(const sp<IBinder>& impl)
40        : BpInterface<IAudioTrack>(impl)
41    {
42    }
43
44    virtual status_t start()
45    {
46        Parcel data, reply;
47        data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
48        remote()->transact(START, data, &reply);
49        return reply.readInt32();
50    }
51
52    virtual void stop()
53    {
54        Parcel data, reply;
55        data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
56        remote()->transact(STOP, data, &reply);
57    }
58
59    virtual void flush()
60    {
61        Parcel data, reply;
62        data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
63        remote()->transact(FLUSH, data, &reply);
64    }
65
66    virtual void mute(bool e)
67    {
68        Parcel data, reply;
69        data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
70        data.writeInt32(e);
71        remote()->transact(MUTE, data, &reply);
72    }
73
74    virtual void pause()
75    {
76        Parcel data, reply;
77        data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
78        remote()->transact(PAUSE, data, &reply);
79    }
80
81    virtual sp<IMemory> getCblk() const
82    {
83        Parcel data, reply;
84        sp<IMemory> cblk;
85        data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
86        status_t status = remote()->transact(GET_CBLK, data, &reply);
87        if (status == NO_ERROR) {
88            cblk = interface_cast<IMemory>(reply.readStrongBinder());
89        }
90        return cblk;
91    }
92};
93
94IMPLEMENT_META_INTERFACE(AudioTrack, "android.media.IAudioTrack");
95
96// ----------------------------------------------------------------------
97
98status_t BnAudioTrack::onTransact(
99    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
100{
101    switch(code) {
102       case GET_CBLK: {
103            CHECK_INTERFACE(IAudioTrack, data, reply);
104            reply->writeStrongBinder(getCblk()->asBinder());
105            return NO_ERROR;
106        } break;
107        case START: {
108            CHECK_INTERFACE(IAudioTrack, data, reply);
109            reply->writeInt32(start());
110            return NO_ERROR;
111        } break;
112        case STOP: {
113            CHECK_INTERFACE(IAudioTrack, data, reply);
114            stop();
115            return NO_ERROR;
116        } break;
117        case FLUSH: {
118            CHECK_INTERFACE(IAudioTrack, data, reply);
119            flush();
120            return NO_ERROR;
121        } break;
122        case MUTE: {
123            CHECK_INTERFACE(IAudioTrack, data, reply);
124            mute( data.readInt32() );
125            return NO_ERROR;
126        } break;
127        case PAUSE: {
128            CHECK_INTERFACE(IAudioTrack, data, reply);
129            pause();
130            return NO_ERROR;
131        }
132        default:
133            return BBinder::onTransact(code, data, reply, flags);
134    }
135}
136
137}; // namespace android
138
139