IMediaRecorder.cpp revision 89fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5
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>
2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/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,
4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_PREVIEW_SURFACE,
4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_CAMERA,
4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_LISTENER
5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaRecorder: public BpInterface<IMediaRecorder>
5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    BpMediaRecorder(const sp<IBinder>& impl)
5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    : BpInterface<IMediaRecorder>(impl)
5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setCamera(const sp<ICamera>& camera)
6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setCamera(%p)", camera.get());
6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeStrongBinder(camera->asBinder());
6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_CAMERA, data, &reply);
6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setPreviewSurface(const sp<ISurface>& surface)
7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setPreviewSurface(%p)", surface.get());
7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeStrongBinder(surface->asBinder());
7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_PREVIEW_SURFACE, data, &reply);
7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t init()
8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("init");
8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(INIT, data, &reply);
8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoSource(int vs)
9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setVideoSource(%d)", vs);
9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(vs);
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_SOURCE, data, &reply);
9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setAudioSource(int as)
10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setAudioSource(%d)", as);
10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(as);
10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_SOURCE, data, &reply);
10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFormat(int of)
11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setOutputFormat(%d)", of);
11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(of);
11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FORMAT, data, &reply);
11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoEncoder(int ve)
12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setVideoEncoder(%d)", ve);
12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(ve);
12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_ENCODER, data, &reply);
12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setAudioEncoder(int ae)
13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setAudioEncoder(%d)", ae);
13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(ae);
13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_ENCODER, data, &reply);
13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFile(const char* path)
14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setOutputFile(%s)", path);
14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeCString(path);
14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FILE_PATH, data, &reply);
14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFile(int fd, int64_t offset, int64_t length) {
15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length);
15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeFileDescriptor(fd);
15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt64(offset);
15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt64(length);
15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FILE_FD, data, &reply);
15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoSize(int width, int height)
16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setVideoSize(%dx%d)", width, height);
16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(width);
16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(height);
16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_SIZE, data, &reply);
16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoFrameRate(int frames_per_second)
17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setVideoFrameRate(%d)", frames_per_second);
17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(frames_per_second);
17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_FRAMERATE, data, &reply);
17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setListener(const sp<IMediaPlayerClient>& listener)
18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("setListener(%p)", listener.get());
18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeStrongBinder(listener->asBinder());
18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_LISTENER, data, &reply);
18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t prepare()
19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("prepare");
19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(PREPARE, data, &reply);
19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t getMaxAmplitude(int* max)
20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("getMaxAmplitude");
20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(GET_MAX_AMPLITUDE, data, &reply);
20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        *max = reply.readInt32();
20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t start()
21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("start");
21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(START, data, &reply);
21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t stop()
22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("stop");
22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(STOP, data, &reply);
22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t reset()
22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("reset");
23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RESET, data, &reply);
23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t close()
23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("close");
24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(CLOSE, data, &reply);
24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t release()
24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGV("release");
24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RELEASE, data, &reply);
25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(MediaRecorder, "android.hardware.IMediaRecorder");
25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------
25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define CHECK_INTERFACE(interface, data, reply) \
26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGW("Call incorrectly routed to " #interface); \
26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return PERMISSION_DENIED; \
26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    } } while (0)
26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaRecorder::onTransact(
26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                                     uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    switch(code) {
27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RELEASE: {
27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("RELEASE");
27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(release());
27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case INIT: {
27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("INIT");
27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(init());
28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case CLOSE: {
28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("CLOSE");
28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(close());
28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
28889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RESET: {
28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("RESET");
29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(reset());
29289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case STOP: {
29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("STOP");
29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(stop());
29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
30089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case START: {
30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("START");
30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(start());
30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
30589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
30689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case PREPARE: {
30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("PREPARE");
30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(prepare());
31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
31289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case GET_MAX_AMPLITUDE: {
31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("GET_MAX_AMPLITUDE");
31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int max = 0;
31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            status_t ret = getMaxAmplitude(&max);
31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(max);
31889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(ret);
31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_SOURCE: {
32289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_VIDEO_SOURCE");
32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int vs = data.readInt32();
32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoSource(vs));
32689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
32889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_SOURCE: {
32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_AUDIO_SOURCE");
33089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
33189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int as = data.readInt32();
33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setAudioSource(as));
33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
33489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
33589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FORMAT: {
33689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_OUTPUT_FORMAT");
33789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
33889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int of = data.readInt32();
33989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFormat(of));
34089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
34189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
34289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_ENCODER: {
34389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_VIDEO_ENCODER");
34489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
34589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int ve = data.readInt32();
34689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoEncoder(ve));
34789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
34889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
34989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_ENCODER: {
35089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_AUDIO_ENCODER");
35189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
35289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int ae = data.readInt32();
35389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setAudioEncoder(ae));
35489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
35589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
35689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
35789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FILE_PATH: {
35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_OUTPUT_FILE_PATH");
35989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
36089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            const char* path = data.readCString();
36189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFile(path));
36289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
36389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
36489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FILE_FD: {
36589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_OUTPUT_FILE_FD");
36689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
36789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int fd = dup(data.readFileDescriptor());
36889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int64_t offset = data.readInt64();
36989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int64_t length = data.readInt64();
37089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFile(fd, offset, length));
37189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
37289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
37389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_SIZE: {
37489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_VIDEO_SIZE");
37589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
37689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int width = data.readInt32();
37789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int height = data.readInt32();
37889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoSize(width, height));
37989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
38089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
38189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_FRAMERATE: {
38289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_VIDEO_FRAMERATE");
38389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
38489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int frames_per_second = data.readInt32();
38589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoFrameRate(frames_per_second));
38689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
38789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
38889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_LISTENER: {
38989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_LISTENER");
39089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
39189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            sp<IMediaPlayerClient> listener =
39289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                interface_cast<IMediaPlayerClient>(data.readStrongBinder());
39389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setListener(listener));
39489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
39589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
39689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_PREVIEW_SURFACE: {
39789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_PREVIEW_SURFACE");
39889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
39989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            sp<ISurface> surface = interface_cast<ISurface>(data.readStrongBinder());
40089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setPreviewSurface(surface));
40189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
40289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
40389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_CAMERA: {
40489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            LOGV("SET_CAMERA");
40589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
40689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            sp<ICamera> camera = interface_cast<ICamera>(data.readStrongBinder());
40789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setCamera(camera));
40889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
40989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
41089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        default:
41189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return BBinder::onTransact(code, data, reply, flags);
41289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
41389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
41489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------------
41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
41789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
418