IMediaRecorder.cpp revision addf2cbb120346ae42e78fa739245a353db5edad
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"
2034fb29696b0f3abf61b10f8d053b1f33d501de0aMark Salyzyn
2134fb29696b0f3abf61b10f8d053b1f33d501de0aMark Salyzyn#include <inttypes.h>
2234fb29696b0f3abf61b10f8d053b1f33d501de0aMark Salyzyn#include <unistd.h>
2334fb29696b0f3abf61b10f8d053b1f33d501de0aMark Salyzyn
2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Log.h>
257562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/Parcel.h>
26d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala#include <camera/android/hardware/ICamera.h>
27d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala#include <camera/ICameraRecordingProxy.h>
2837047fceba836f341d0108beed0991b0f8dfc543James Dong#include <media/IMediaRecorderClient.h>
2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaRecorder.h>
30df712ea86e6350f7005a02ab0e1c60c28a343ed0Mathias Agopian#include <gui/Surface.h>
318ba01021b573889802e67e029225a96f0dfa471aAndy McFadden#include <gui/IGraphicBufferProducer.h>
32addf2cbb120346ae42e78fa739245a353db5edadChong Zhang#include <media/stagefright/PersistentSurface.h>
33b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi
3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android {
3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum {
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    RELEASE = IBinder::FIRST_CALL_TRANSACTION,
3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    INIT,
3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    CLOSE,
408f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang    SET_INPUT_SURFACE,
41b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    QUERY_SURFACE_MEDIASOURCE,
4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    RESET,
4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    STOP,
4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    START,
4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    PREPARE,
4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    GET_MAX_AMPLITUDE,
4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_SOURCE,
4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_AUDIO_SOURCE,
4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_OUTPUT_FORMAT,
5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_ENCODER,
5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_AUDIO_ENCODER,
5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_OUTPUT_FILE_FD,
5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_SIZE,
5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_FRAMERATE,
55c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    SET_PARAMETERS,
5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_PREVIEW_SURFACE,
5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_CAMERA,
58ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    SET_LISTENER,
59d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    SET_CLIENT_NAME,
60d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    PAUSE,
61d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    RESUME
6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaRecorder: public BpInterface<IMediaRecorder>
6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
67090ef604f81447eab4aa0a5b45d6307482573560Chih-Hung Hsieh    explicit BpMediaRecorder(const sp<IBinder>& impl)
6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    : BpInterface<IMediaRecorder>(impl)
6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
72d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    status_t setCamera(const sp<hardware::ICamera>& camera, const sp<ICameraRecordingProxy>& proxy)
7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
743856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setCamera(%p,%p)", camera.get(), proxy.get());
7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
7706b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen        data.writeStrongBinder(IInterface::asBinder(camera));
7806b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen        data.writeStrongBinder(IInterface::asBinder(proxy));
7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_CAMERA, data, &reply);
8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
83addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    status_t setInputSurface(const sp<PersistentSurface>& surface)
84e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang    {
858f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang        ALOGV("setInputSurface(%p)", surface.get());
86e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang        Parcel data, reply;
87e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
88addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        surface->writeToParcel(&data);
898f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang        remote()->transact(SET_INPUT_SURFACE, data, &reply);
90e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang        return reply.readInt32();
91e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang    }
92e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang
938ba01021b573889802e67e029225a96f0dfa471aAndy McFadden    sp<IGraphicBufferProducer> querySurfaceMediaSource()
94b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    {
953856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("Query SurfaceMediaSource");
96b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        Parcel data, reply;
97b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
98b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        remote()->transact(QUERY_SURFACE_MEDIASOURCE, data, &reply);
99b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        int returnedNull = reply.readInt32();
100b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        if (returnedNull) {
101b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            return NULL;
102b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        }
1038ba01021b573889802e67e029225a96f0dfa471aAndy McFadden        return interface_cast<IGraphicBufferProducer>(reply.readStrongBinder());
104b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    }
105b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi
10699617adda9bc46c43f511f0940bc735c73de61deMathias Agopian    status_t setPreviewSurface(const sp<IGraphicBufferProducer>& surface)
10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1083856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setPreviewSurface(%p)", surface.get());
10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
11106b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen        data.writeStrongBinder(IInterface::asBinder(surface));
11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_PREVIEW_SURFACE, data, &reply);
11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t init()
11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1183856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("init");
11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(INIT, data, &reply);
12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoSource(int vs)
12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1273856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoSource(%d)", vs);
12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(vs);
13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_SOURCE, data, &reply);
13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setAudioSource(int as)
13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1373856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setAudioSource(%d)", as);
13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(as);
14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_SOURCE, data, &reply);
14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFormat(int of)
14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1473856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setOutputFormat(%d)", of);
14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(of);
15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FORMAT, data, &reply);
15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoEncoder(int ve)
15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1573856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoEncoder(%d)", ve);
15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(ve);
16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_ENCODER, data, &reply);
16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setAudioEncoder(int ae)
16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1673856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setAudioEncoder(%d)", ae);
16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(ae);
17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_ENCODER, data, &reply);
17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFile(int fd, int64_t offset, int64_t length) {
17634fb29696b0f3abf61b10f8d053b1f33d501de0aMark Salyzyn        ALOGV("setOutputFile(%d, %" PRId64 ", %" PRId64 ")", fd, offset, length);
17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeFileDescriptor(fd);
18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt64(offset);
18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt64(length);
18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FILE_FD, data, &reply);
18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoSize(int width, int height)
18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1883856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoSize(%dx%d)", width, height);
18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(width);
19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(height);
19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_SIZE, data, &reply);
19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoFrameRate(int frames_per_second)
19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1993856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoFrameRate(%d)", frames_per_second);
20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(frames_per_second);
20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_FRAMERATE, data, &reply);
20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
207c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    status_t setParameters(const String8& params)
208c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    {
2093856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setParameter(%s)", params.string());
210c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        Parcel data, reply;
211c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
212c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        data.writeString8(params);
213c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        remote()->transact(SET_PARAMETERS, data, &reply);
214c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        return reply.readInt32();
215c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    }
216c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project
21737047fceba836f341d0108beed0991b0f8dfc543James Dong    status_t setListener(const sp<IMediaRecorderClient>& listener)
21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2193856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setListener(%p)", listener.get());
22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
22206b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen        data.writeStrongBinder(IInterface::asBinder(listener));
22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_LISTENER, data, &reply);
22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
227ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    status_t setClientName(const String16& clientName)
228ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    {
229ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        ALOGV("setClientName(%s)", String8(clientName).string());
230ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        Parcel data, reply;
231ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
232ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        data.writeString16(clientName);
233ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        remote()->transact(SET_CLIENT_NAME, data, &reply);
234ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        return reply.readInt32();
235ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    }
236ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala
23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t prepare()
23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2393856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("prepare");
24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(PREPARE, 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 getMaxAmplitude(int* max)
24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2483856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("getMaxAmplitude");
24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(GET_MAX_AMPLITUDE, data, &reply);
25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        *max = reply.readInt32();
25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t start()
25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2583856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("start");
25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(START, data, &reply);
26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t stop()
26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2673856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("stop");
26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(STOP, data, &reply);
27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t reset()
27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2763856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("reset");
27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RESET, data, &reply);
28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
283d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    status_t pause()
284d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    {
285d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        ALOGV("pause");
286d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        Parcel data, reply;
287d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
288d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        remote()->transact(PAUSE, data, &reply);
289d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        return reply.readInt32();
290d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    }
291d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim
292d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    status_t resume()
293d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    {
294d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        ALOGV("resume");
295d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        Parcel data, reply;
296d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
297d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        remote()->transact(RESUME, data, &reply);
298d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        return reply.readInt32();
299d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    }
300d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim
30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t close()
30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
3033856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("close");
30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
30589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
30689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(CLOSE, data, &reply);
30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t release()
31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
3123856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("release");
31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RELEASE, data, &reply);
31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
31889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
32056f0cc533a38bdb84bc03adcb43515614ab21baenikoIMPLEMENT_META_INTERFACE(MediaRecorder, "android.media.IMediaRecorder");
32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
32289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------
32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaRecorder::onTransact(
325b187de1ada34a9023c05d020a4592686ba761278Glenn Kasten                                     uint32_t code, const Parcel& data, Parcel* reply,
326b187de1ada34a9023c05d020a4592686ba761278Glenn Kasten                                     uint32_t flags)
32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
328e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten    switch (code) {
32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RELEASE: {
3303856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("RELEASE");
33189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(release());
33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
33489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
33589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case INIT: {
3363856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("INIT");
33789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
33889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(init());
33989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
34089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
34189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case CLOSE: {
3423856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("CLOSE");
34389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
34489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(close());
34589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
34689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
34789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RESET: {
3483856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("RESET");
34989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
35089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(reset());
35189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
35289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
35389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case STOP: {
3543856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("STOP");
35589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
35689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(stop());
35789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
35989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case START: {
3603856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("START");
36189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
36289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(start());
36389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
36489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
365d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        case PAUSE: {
366d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            ALOGV("PAUSE");
367d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            CHECK_INTERFACE(IMediaRecorder, data, reply);
368d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            reply->writeInt32(pause());
369d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            return NO_ERROR;
370d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        } break;
371d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        case RESUME: {
372d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            ALOGV("RESUME");
373d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            CHECK_INTERFACE(IMediaRecorder, data, reply);
374d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            reply->writeInt32(resume());
375d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            return NO_ERROR;
376d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        } break;
37789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case PREPARE: {
3783856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("PREPARE");
37989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
38089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(prepare());
38189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
38289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
38389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case GET_MAX_AMPLITUDE: {
3843856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("GET_MAX_AMPLITUDE");
38589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
38689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int max = 0;
38789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            status_t ret = getMaxAmplitude(&max);
38889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(max);
38989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(ret);
39089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
39189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
39289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_SOURCE: {
3933856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_SOURCE");
39489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
39589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int vs = data.readInt32();
39689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoSource(vs));
39789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
39889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
39989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_SOURCE: {
4003856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_AUDIO_SOURCE");
40189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
40289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int as = data.readInt32();
40389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setAudioSource(as));
40489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
40589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
40689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FORMAT: {
4073856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_OUTPUT_FORMAT");
40889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
40989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int of = data.readInt32();
41089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFormat(of));
41189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
41289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
41389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_ENCODER: {
4143856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_ENCODER");
41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int ve = data.readInt32();
41789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoEncoder(ve));
41889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
41989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
42089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_ENCODER: {
4213856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_AUDIO_ENCODER");
42289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
42389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int ae = data.readInt32();
42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setAudioEncoder(ae));
42589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
42689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
42789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
42889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FILE_FD: {
4293856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_OUTPUT_FILE_FD");
43089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
43189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int fd = dup(data.readFileDescriptor());
43289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int64_t offset = data.readInt64();
43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int64_t length = data.readInt64();
43489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFile(fd, offset, length));
43525d83125cee222993673d3ba261ae1186bcad8c2James Dong            ::close(fd);
43689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
4375d6aca5d86e86af3f8f597be573d4563d69ceb85Nipun Kwatra        } break;
43889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_SIZE: {
4393856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_SIZE");
44089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
44189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int width = data.readInt32();
44289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int height = data.readInt32();
44389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoSize(width, height));
44489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
44589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
44689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_FRAMERATE: {
4473856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_FRAMERATE");
44889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
44989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int frames_per_second = data.readInt32();
45089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoFrameRate(frames_per_second));
45189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
45289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
453c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        case SET_PARAMETERS: {
4543856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_PARAMETER");
455c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
456c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            reply->writeInt32(setParameters(data.readString8()));
457c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            return NO_ERROR;
458c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        } break;
45989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_LISTENER: {
4603856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_LISTENER");
46189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
46237047fceba836f341d0108beed0991b0f8dfc543James Dong            sp<IMediaRecorderClient> listener =
46337047fceba836f341d0108beed0991b0f8dfc543James Dong                interface_cast<IMediaRecorderClient>(data.readStrongBinder());
46489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setListener(listener));
46589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
46689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
467ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        case SET_CLIENT_NAME: {
468ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            ALOGV("SET_CLIENT_NAME");
469ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            CHECK_INTERFACE(IMediaRecorder, data, reply);
470ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            reply->writeInt32(setClientName(data.readString16()));
471ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            return NO_ERROR;
472ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        }
47389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_PREVIEW_SURFACE: {
4743856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_PREVIEW_SURFACE");
47589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
476b187de1ada34a9023c05d020a4592686ba761278Glenn Kasten            sp<IGraphicBufferProducer> surface = interface_cast<IGraphicBufferProducer>(
477b187de1ada34a9023c05d020a4592686ba761278Glenn Kasten                    data.readStrongBinder());
47889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setPreviewSurface(surface));
47989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
48089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
48189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_CAMERA: {
4823856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_CAMERA");
48389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
484d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala            sp<hardware::ICamera> camera =
485d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala                    interface_cast<hardware::ICamera>(data.readStrongBinder());
4864ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li            sp<ICameraRecordingProxy> proxy =
487d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala                    interface_cast<ICameraRecordingProxy>(data.readStrongBinder());
4884ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li            reply->writeInt32(setCamera(camera, proxy));
48989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
49089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
4918f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang        case SET_INPUT_SURFACE: {
4928f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang            ALOGV("SET_INPUT_SURFACE");
493e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang            CHECK_INTERFACE(IMediaRecorder, data, reply);
494addf2cbb120346ae42e78fa739245a353db5edadChong Zhang            sp<PersistentSurface> surface = new PersistentSurface();
495addf2cbb120346ae42e78fa739245a353db5edadChong Zhang            surface->readFromParcel(&data);
4968f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang            reply->writeInt32(setInputSurface(surface));
497e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang            return NO_ERROR;
498e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang        } break;
499b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        case QUERY_SURFACE_MEDIASOURCE: {
5003856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("QUERY_SURFACE_MEDIASOURCE");
501b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            CHECK_INTERFACE(IMediaRecorder, data, reply);
502b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            // call the mediaserver side to create
503b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            // a surfacemediasource
5048ba01021b573889802e67e029225a96f0dfa471aAndy McFadden            sp<IGraphicBufferProducer> surfaceMediaSource = querySurfaceMediaSource();
505b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            // The mediaserver might have failed to create a source
506b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            int returnedNull= (surfaceMediaSource == NULL) ? 1 : 0 ;
507b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            reply->writeInt32(returnedNull);
508b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            if (!returnedNull) {
50906b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen                reply->writeStrongBinder(IInterface::asBinder(surfaceMediaSource));
510b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            }
511b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            return NO_ERROR;
512b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        } break;
51389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        default:
51489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return BBinder::onTransact(code, data, reply, flags);
51589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
51689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
51789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
51889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------------
51989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
52040bc906252974d0b389ae4a147232d0c9a97193fGlenn Kasten} // namespace android
521