189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/*
289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **
368335fdd6e9c1d622384612605d6952503cb7fd0Jean-Baptiste Queru ** Copyright 2008, The Android Open Source Project
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>
223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <camera/ICamera.h>
2337047fceba836f341d0108beed0991b0f8dfc543James Dong#include <media/IMediaRecorderClient.h>
2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaRecorder.h>
25df712ea86e6350f7005a02ab0e1c60c28a343ed0Mathias Agopian#include <gui/Surface.h>
26b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi#include <gui/ISurfaceTexture.h>
2725d83125cee222993673d3ba261ae1186bcad8c2James Dong#include <unistd.h>
2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
29b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi
3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android {
3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum {
3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    RELEASE = IBinder::FIRST_CALL_TRANSACTION,
3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    INIT,
3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    CLOSE,
36b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    QUERY_SURFACE_MEDIASOURCE,
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    RESET,
3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    STOP,
3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    START,
4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    PREPARE,
4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    GET_MAX_AMPLITUDE,
4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_SOURCE,
4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_AUDIO_SOURCE,
4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_OUTPUT_FORMAT,
4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_ENCODER,
4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_AUDIO_ENCODER,
4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_OUTPUT_FILE_PATH,
4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_OUTPUT_FILE_FD,
4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_SIZE,
5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_FRAMERATE,
51c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    SET_PARAMETERS,
5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_PREVIEW_SURFACE,
5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_CAMERA,
5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_LISTENER
5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaRecorder: public BpInterface<IMediaRecorder>
5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    BpMediaRecorder(const sp<IBinder>& impl)
6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    : BpInterface<IMediaRecorder>(impl)
6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
654ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li    status_t setCamera(const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy)
6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
673856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setCamera(%p,%p)", camera.get(), proxy.get());
6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeStrongBinder(camera->asBinder());
714ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li        data.writeStrongBinder(proxy->asBinder());
7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_CAMERA, data, &reply);
7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
76b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    sp<ISurfaceTexture> querySurfaceMediaSource()
77b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    {
783856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("Query SurfaceMediaSource");
79b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        Parcel data, reply;
80b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
81b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        remote()->transact(QUERY_SURFACE_MEDIASOURCE, data, &reply);
82b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        int returnedNull = reply.readInt32();
83b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        if (returnedNull) {
84b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            return NULL;
85b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        }
86b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        return interface_cast<ISurfaceTexture>(reply.readStrongBinder());
87b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    }
88b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi
894b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis    status_t setPreviewSurface(const sp<Surface>& surface)
9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
913856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setPreviewSurface(%p)", surface.get());
9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
944b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis        Surface::writeToParcel(surface, &data);
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_PREVIEW_SURFACE, 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 init()
10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1013856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("init");
10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(INIT, data, &reply);
10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoSource(int vs)
10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1103856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoSource(%d)", vs);
11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(vs);
11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_SOURCE, data, &reply);
11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setAudioSource(int as)
11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1203856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setAudioSource(%d)", as);
12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(as);
12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_SOURCE, data, &reply);
12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFormat(int of)
12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1303856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setOutputFormat(%d)", of);
13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(of);
13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FORMAT, data, &reply);
13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoEncoder(int ve)
13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1403856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoEncoder(%d)", ve);
14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(ve);
14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_ENCODER, data, &reply);
14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setAudioEncoder(int ae)
14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1503856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setAudioEncoder(%d)", ae);
15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(ae);
15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_ENCODER, data, &reply);
15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFile(const char* path)
15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1603856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setOutputFile(%s)", path);
16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeCString(path);
16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FILE_PATH, data, &reply);
16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFile(int fd, int64_t offset, int64_t length) {
1693856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length);
17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeFileDescriptor(fd);
17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt64(offset);
17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt64(length);
17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FILE_FD, data, &reply);
17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoSize(int width, int height)
18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1813856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoSize(%dx%d)", width, height);
18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(width);
18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(height);
18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_SIZE, data, &reply);
18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoFrameRate(int frames_per_second)
19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1923856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoFrameRate(%d)", frames_per_second);
19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(frames_per_second);
19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_FRAMERATE, data, &reply);
19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
200c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    status_t setParameters(const String8& params)
201c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    {
2023856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setParameter(%s)", params.string());
203c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        Parcel data, reply;
204c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
205c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        data.writeString8(params);
206c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        remote()->transact(SET_PARAMETERS, data, &reply);
207c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        return reply.readInt32();
208c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    }
209c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project
21037047fceba836f341d0108beed0991b0f8dfc543James Dong    status_t setListener(const sp<IMediaRecorderClient>& listener)
21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2123856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setListener(%p)", listener.get());
21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeStrongBinder(listener->asBinder());
21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_LISTENER, data, &reply);
21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t prepare()
22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2223856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("prepare");
22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(PREPARE, data, &reply);
22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t getMaxAmplitude(int* max)
23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2313856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("getMaxAmplitude");
23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(GET_MAX_AMPLITUDE, data, &reply);
23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        *max = reply.readInt32();
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 start()
24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2413856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("start");
24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(START, 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 stop()
24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2503856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("stop");
25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(STOP, 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 reset()
25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2593856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("reset");
26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RESET, 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    status_t close()
26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2683856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("close");
26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(CLOSE, data, &reply);
27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t release()
27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2773856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("release");
27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RELEASE, data, &reply);
28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
28556f0cc533a38bdb84bc03adcb43515614ab21baenikoIMPLEMENT_META_INTERFACE(MediaRecorder, "android.media.IMediaRecorder");
28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------
28889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaRecorder::onTransact(
29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                                     uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
292e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten    switch (code) {
29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RELEASE: {
2943856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("RELEASE");
29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(release());
29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case INIT: {
3003856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("INIT");
30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(init());
30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
30589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case CLOSE: {
3063856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("CLOSE");
30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(close());
30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RESET: {
3123856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("RESET");
31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(reset());
31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case STOP: {
3183856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("STOP");
31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(stop());
32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
32289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case START: {
3243856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("START");
32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
32689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(start());
32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
32889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case PREPARE: {
3303856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("PREPARE");
33189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(prepare());
33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
33489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
33589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case GET_MAX_AMPLITUDE: {
3363856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("GET_MAX_AMPLITUDE");
33789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
33889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int max = 0;
33989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            status_t ret = getMaxAmplitude(&max);
34089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(max);
34189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(ret);
34289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
34389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
34489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_SOURCE: {
3453856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_SOURCE");
34689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
34789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int vs = data.readInt32();
34889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoSource(vs));
34989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
35089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
35189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_SOURCE: {
3523856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_AUDIO_SOURCE");
35389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
35489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int as = data.readInt32();
35589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setAudioSource(as));
35689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
35789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FORMAT: {
3593856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_OUTPUT_FORMAT");
36089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
36189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int of = data.readInt32();
36289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFormat(of));
36389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
36489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
36589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_ENCODER: {
3663856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_ENCODER");
36789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
36889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int ve = data.readInt32();
36989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoEncoder(ve));
37089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
37189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
37289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_ENCODER: {
3733856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_AUDIO_ENCODER");
37489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
37589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int ae = data.readInt32();
37689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setAudioEncoder(ae));
37789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
37889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
37989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
38089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FILE_PATH: {
3813856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_OUTPUT_FILE_PATH");
38289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
38389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            const char* path = data.readCString();
38489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFile(path));
38589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
38689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
38789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FILE_FD: {
3883856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_OUTPUT_FILE_FD");
38989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
39089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int fd = dup(data.readFileDescriptor());
39189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int64_t offset = data.readInt64();
39289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int64_t length = data.readInt64();
39389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFile(fd, offset, length));
39425d83125cee222993673d3ba261ae1186bcad8c2James Dong            ::close(fd);
39589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
3965d6aca5d86e86af3f8f597be573d4563d69ceb85Nipun Kwatra        } break;
39789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_SIZE: {
3983856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_SIZE");
39989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
40089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int width = data.readInt32();
40189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int height = data.readInt32();
40289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoSize(width, height));
40389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
40489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
40589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_FRAMERATE: {
4063856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_FRAMERATE");
40789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
40889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int frames_per_second = data.readInt32();
40989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoFrameRate(frames_per_second));
41089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
41189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
412c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        case SET_PARAMETERS: {
4133856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_PARAMETER");
414c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
415c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            reply->writeInt32(setParameters(data.readString8()));
416c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            return NO_ERROR;
417c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        } break;
41889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_LISTENER: {
4193856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_LISTENER");
42089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
42137047fceba836f341d0108beed0991b0f8dfc543James Dong            sp<IMediaRecorderClient> listener =
42237047fceba836f341d0108beed0991b0f8dfc543James Dong                interface_cast<IMediaRecorderClient>(data.readStrongBinder());
42389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setListener(listener));
42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
42589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
42689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_PREVIEW_SURFACE: {
4273856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_PREVIEW_SURFACE");
42889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
4294b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis            sp<Surface> surface = Surface::readFromParcel(data);
43089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setPreviewSurface(surface));
43189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
43289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_CAMERA: {
4343856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_CAMERA");
43589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
43689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            sp<ICamera> camera = interface_cast<ICamera>(data.readStrongBinder());
4374ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li            sp<ICameraRecordingProxy> proxy =
4384ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li                interface_cast<ICameraRecordingProxy>(data.readStrongBinder());
4394ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li            reply->writeInt32(setCamera(camera, proxy));
44089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
44189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
442b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        case QUERY_SURFACE_MEDIASOURCE: {
4433856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("QUERY_SURFACE_MEDIASOURCE");
444b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            CHECK_INTERFACE(IMediaRecorder, data, reply);
445b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            // call the mediaserver side to create
446b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            // a surfacemediasource
447b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            sp<ISurfaceTexture> surfaceMediaSource = querySurfaceMediaSource();
448b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            // The mediaserver might have failed to create a source
449b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            int returnedNull= (surfaceMediaSource == NULL) ? 1 : 0 ;
450b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            reply->writeInt32(returnedNull);
451b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            if (!returnedNull) {
452b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                reply->writeStrongBinder(surfaceMediaSource->asBinder());
453b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            }
454b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            return NO_ERROR;
455b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        } break;
45689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        default:
45789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return BBinder::onTransact(code, data, reply, flags);
45889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
45989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
46089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
46189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------------
46289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
46389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
464