IMediaRecorder.cpp revision 7562408b2261d38415453378b6188f74fda99d88
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/*
289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **
389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Copyright 2008, HTC Inc.
489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **
589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Licensed under the Apache License, Version 2.0 (the "License");
689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** you may not use this file except in compliance with the License.
789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** You may obtain a copy of the License at
889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **
989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **     http://www.apache.org/licenses/LICENSE-2.0
1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **
1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Unless required by applicable law or agreed to in writing, software
1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** distributed under the License is distributed on an "AS IS" BASIS,
1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** See the License for the specific language governing permissions and
1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** limitations under the License.
1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */
1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project//#define LOG_NDEBUG 0
1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define LOG_TAG "IMediaRecorder"
2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Log.h>
217562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/Parcel.h>
2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <ui/ISurface.h>
2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <ui/ICamera.h>
2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayerClient.h>
2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaRecorder.h>
2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android {
2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum {
3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    RELEASE = IBinder::FIRST_CALL_TRANSACTION,
3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    INIT,
3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    CLOSE,
3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    RESET,
3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    STOP,
3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    START,
3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    PREPARE,
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    GET_MAX_AMPLITUDE,
3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_SOURCE,
3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_AUDIO_SOURCE,
4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_OUTPUT_FORMAT,
4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_ENCODER,
4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_AUDIO_ENCODER,
4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_OUTPUT_FILE_PATH,
4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_OUTPUT_FILE_FD,
4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_SIZE,
4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_FRAMERATE,
47c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    SET_PARAMETERS,
4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_PREVIEW_SURFACE,
4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_CAMERA,
5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_LISTENER
5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaRecorder: public BpInterface<IMediaRecorder>
5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    BpMediaRecorder(const sp<IBinder>& impl)
5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    : BpInterface<IMediaRecorder>(impl)
5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setCamera(const sp<ICamera>& camera)
6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setCamera(%p)", camera.get());
6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeStrongBinder(camera->asBinder());
6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_CAMERA, data, &reply);
6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setPreviewSurface(const sp<ISurface>& surface)
7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setPreviewSurface(%p)", surface.get());
7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeStrongBinder(surface->asBinder());
7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_PREVIEW_SURFACE, data, &reply);
7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t init()
8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("init");
8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(INIT, data, &reply);
8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoSource(int vs)
9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setVideoSource(%d)", vs);
9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(vs);
9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_SOURCE, data, &reply);
9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setAudioSource(int as)
10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setAudioSource(%d)", as);
10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(as);
10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_SOURCE, data, &reply);
10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFormat(int of)
11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setOutputFormat(%d)", of);
11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(of);
11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FORMAT, data, &reply);
11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoEncoder(int ve)
12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setVideoEncoder(%d)", ve);
12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(ve);
12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_ENCODER, data, &reply);
12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setAudioEncoder(int ae)
13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setAudioEncoder(%d)", ae);
13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(ae);
13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_ENCODER, data, &reply);
13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFile(const char* path)
14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setOutputFile(%s)", path);
14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeCString(path);
14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FILE_PATH, data, &reply);
14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFile(int fd, int64_t offset, int64_t length) {
15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length);
15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeFileDescriptor(fd);
15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt64(offset);
15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt64(length);
15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FILE_FD, data, &reply);
15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoSize(int width, int height)
16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setVideoSize(%dx%d)", width, height);
16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(width);
16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(height);
16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_SIZE, data, &reply);
16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoFrameRate(int frames_per_second)
17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setVideoFrameRate(%d)", frames_per_second);
17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(frames_per_second);
17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_FRAMERATE, data, &reply);
17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
182c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    status_t setParameters(const String8& params)
183c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    {
184c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        LOGV("setParameter(%s)", params.string());
185c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        Parcel data, reply;
186c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
187c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        data.writeString8(params);
188c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        remote()->transact(SET_PARAMETERS, data, &reply);
189c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        return reply.readInt32();
190c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    }
191c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project
19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setListener(const sp<IMediaPlayerClient>& listener)
19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setListener(%p)", listener.get());
19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeStrongBinder(listener->asBinder());
19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_LISTENER, data, &reply);
19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t prepare()
20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("prepare");
20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(PREPARE, data, &reply);
20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t getMaxAmplitude(int* max)
21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("getMaxAmplitude");
21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(GET_MAX_AMPLITUDE, data, &reply);
21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        *max = reply.readInt32();
21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t start()
22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("start");
22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(START, data, &reply);
22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t stop()
23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("stop");
23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(STOP, data, &reply);
23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t reset()
24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("reset");
24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RESET, data, &reply);
24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t close()
24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("close");
25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(CLOSE, data, &reply);
25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t release()
25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("release");
26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RELEASE, data, &reply);
26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(MediaRecorder, "android.hardware.IMediaRecorder");
26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------
27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define CHECK_INTERFACE(interface, data, reply) \
27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGW("Call incorrectly routed to " #interface); \
27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return PERMISSION_DENIED; \
27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    } } while (0)
27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaRecorder::onTransact(
27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                                     uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    switch(code) {
28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RELEASE: {
28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("RELEASE");
28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(release());
28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case INIT: {
28889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("INIT");
28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(init());
29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
29289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case CLOSE: {
29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("CLOSE");
29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(close());
29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RESET: {
30089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("RESET");
30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(reset());
30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
30589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case STOP: {
30689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("STOP");
30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(stop());
30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case START: {
31289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("START");
31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(start());
31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case PREPARE: {
31889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("PREPARE");
31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(prepare());
32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
32289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case GET_MAX_AMPLITUDE: {
32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("GET_MAX_AMPLITUDE");
32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
32689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int max = 0;
32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            status_t ret = getMaxAmplitude(&max);
32889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(max);
32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(ret);
33089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
33189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_SOURCE: {
33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_VIDEO_SOURCE");
33489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
33589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int vs = data.readInt32();
33689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoSource(vs));
33789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
33889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
33989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_SOURCE: {
34089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_AUDIO_SOURCE");
34189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
34289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int as = data.readInt32();
34389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setAudioSource(as));
34489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
34589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
34689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FORMAT: {
34789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_OUTPUT_FORMAT");
34889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
34989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int of = data.readInt32();
35089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFormat(of));
35189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
35289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
35389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_ENCODER: {
35489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_VIDEO_ENCODER");
35589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
35689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int ve = data.readInt32();
35789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoEncoder(ve));
35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
35989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
36089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_ENCODER: {
36189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_AUDIO_ENCODER");
36289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
36389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int ae = data.readInt32();
36489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setAudioEncoder(ae));
36589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
36689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
36789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
36889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FILE_PATH: {
36989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_OUTPUT_FILE_PATH");
37089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
37189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            const char* path = data.readCString();
37289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFile(path));
37389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
37489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
37589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FILE_FD: {
37689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_OUTPUT_FILE_FD");
37789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
37889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int fd = dup(data.readFileDescriptor());
37989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int64_t offset = data.readInt64();
38089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int64_t length = data.readInt64();
38189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFile(fd, offset, length));
38289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
38389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
38489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_SIZE: {
38589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_VIDEO_SIZE");
38689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
38789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int width = data.readInt32();
38889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int height = data.readInt32();
38989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoSize(width, height));
39089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
39189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
39289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_FRAMERATE: {
39389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_VIDEO_FRAMERATE");
39489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
39589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int frames_per_second = data.readInt32();
39689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoFrameRate(frames_per_second));
39789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
39889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
399c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        case SET_PARAMETERS: {
400c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            LOGV("SET_PARAMETER");
401c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
402c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            reply->writeInt32(setParameters(data.readString8()));
403c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            return NO_ERROR;
404c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        } break;
40589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_LISTENER: {
40689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_LISTENER");
40789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
40889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            sp<IMediaPlayerClient> listener =
40989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                interface_cast<IMediaPlayerClient>(data.readStrongBinder());
41089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setListener(listener));
41189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
41289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
41389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_PREVIEW_SURFACE: {
41489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_PREVIEW_SURFACE");
41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            sp<ISurface> surface = interface_cast<ISurface>(data.readStrongBinder());
41789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setPreviewSurface(surface));
41889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
41989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
42089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_CAMERA: {
42189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_CAMERA");
42289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
42389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            sp<ICamera> camera = interface_cast<ICamera>(data.readStrongBinder());
42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setCamera(camera));
42589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
42689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
42789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        default:
42889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return BBinder::onTransact(code, data, reply, flags);
42989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
43089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
43189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
43289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------------
43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
43489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
435