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,
53fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang    SET_NEXT_OUTPUT_FILE_FD,
5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_SIZE,
5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_VIDEO_FRAMERATE,
56c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    SET_PARAMETERS,
5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_PREVIEW_SURFACE,
5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_CAMERA,
59ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    SET_LISTENER,
60d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    SET_CLIENT_NAME,
61d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    PAUSE,
62ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick    RESUME,
63ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick    GET_METRICS,
64fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    SET_INPUT_DEVICE,
65fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    GET_ROUTED_DEVICE_ID,
66fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    ENABLE_AUDIO_DEVICE_CALLBACK,
67609850df59219845a8c4ebe18a2687447ea570ccjiabin    GET_ACTIVE_MICROPHONES,
68ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick
6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaRecorder: public BpInterface<IMediaRecorder>
7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
74090ef604f81447eab4aa0a5b45d6307482573560Chih-Hung Hsieh    explicit BpMediaRecorder(const sp<IBinder>& impl)
7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    : BpInterface<IMediaRecorder>(impl)
7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
79d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    status_t setCamera(const sp<hardware::ICamera>& camera, const sp<ICameraRecordingProxy>& proxy)
8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
813856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setCamera(%p,%p)", camera.get(), proxy.get());
8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
8406b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen        data.writeStrongBinder(IInterface::asBinder(camera));
8506b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen        data.writeStrongBinder(IInterface::asBinder(proxy));
8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_CAMERA, data, &reply);
8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
90addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    status_t setInputSurface(const sp<PersistentSurface>& surface)
91e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang    {
928f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang        ALOGV("setInputSurface(%p)", surface.get());
93e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang        Parcel data, reply;
94e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
95addf2cbb120346ae42e78fa739245a353db5edadChong Zhang        surface->writeToParcel(&data);
968f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang        remote()->transact(SET_INPUT_SURFACE, data, &reply);
97e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang        return reply.readInt32();
98e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang    }
99e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang
1008ba01021b573889802e67e029225a96f0dfa471aAndy McFadden    sp<IGraphicBufferProducer> querySurfaceMediaSource()
101b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    {
1023856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("Query SurfaceMediaSource");
103b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        Parcel data, reply;
104b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
105b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        remote()->transact(QUERY_SURFACE_MEDIASOURCE, data, &reply);
106b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        int returnedNull = reply.readInt32();
107b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        if (returnedNull) {
108b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            return NULL;
109b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        }
1108ba01021b573889802e67e029225a96f0dfa471aAndy McFadden        return interface_cast<IGraphicBufferProducer>(reply.readStrongBinder());
111b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    }
112b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi
11399617adda9bc46c43f511f0940bc735c73de61deMathias Agopian    status_t setPreviewSurface(const sp<IGraphicBufferProducer>& surface)
11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1153856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setPreviewSurface(%p)", surface.get());
11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
11806b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen        data.writeStrongBinder(IInterface::asBinder(surface));
11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_PREVIEW_SURFACE, data, &reply);
12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t init()
12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1253856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("init");
12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(INIT, data, &reply);
12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoSource(int vs)
13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1343856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoSource(%d)", vs);
13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(vs);
13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_SOURCE, data, &reply);
13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setAudioSource(int as)
14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1443856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setAudioSource(%d)", as);
14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(as);
14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_SOURCE, data, &reply);
14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setOutputFormat(int of)
15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1543856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setOutputFormat(%d)", of);
15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(of);
15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FORMAT, data, &reply);
15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoEncoder(int ve)
16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1643856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoEncoder(%d)", ve);
16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(ve);
16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_ENCODER, data, &reply);
16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setAudioEncoder(int ae)
17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
1743856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setAudioEncoder(%d)", ae);
17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(ae);
17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_ENCODER, data, &reply);
17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
182fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang    status_t setOutputFile(int fd) {
183fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang        ALOGV("setOutputFile(%d)", fd);
18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeFileDescriptor(fd);
18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_OUTPUT_FILE_FD, data, &reply);
18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
191fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang    status_t setNextOutputFile(int fd) {
192fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang        ALOGV("setNextOutputFile(%d)", fd);
193fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang        Parcel data, reply;
194fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
195fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang        data.writeFileDescriptor(fd);
196fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang        remote()->transact(SET_NEXT_OUTPUT_FILE_FD, data, &reply);
197fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang        return reply.readInt32();
198fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang    }
199fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang
20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoSize(int width, int height)
20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2023856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoSize(%dx%d)", width, height);
20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(width);
20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(height);
20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_SIZE, data, &reply);
20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVideoFrameRate(int frames_per_second)
21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2133856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setVideoFrameRate(%d)", frames_per_second);
21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(frames_per_second);
21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VIDEO_FRAMERATE, data, &reply);
21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
221c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    status_t setParameters(const String8& params)
222c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    {
2233856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setParameter(%s)", params.string());
224c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        Parcel data, reply;
225c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
226c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        data.writeString8(params);
227c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        remote()->transact(SET_PARAMETERS, data, &reply);
228c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        return reply.readInt32();
229c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    }
230c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project
23137047fceba836f341d0108beed0991b0f8dfc543James Dong    status_t setListener(const sp<IMediaRecorderClient>& listener)
23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2333856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("setListener(%p)", listener.get());
23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
23606b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen        data.writeStrongBinder(IInterface::asBinder(listener));
23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_LISTENER, data, &reply);
23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
241ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    status_t setClientName(const String16& clientName)
242ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    {
243ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        ALOGV("setClientName(%s)", String8(clientName).string());
244ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        Parcel data, reply;
245ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
246ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        data.writeString16(clientName);
247ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        remote()->transact(SET_CLIENT_NAME, data, &reply);
248ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        return reply.readInt32();
249ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    }
250ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala
25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t prepare()
25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2533856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("prepare");
25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(PREPARE, data, &reply);
25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t getMaxAmplitude(int* max)
26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2623856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("getMaxAmplitude");
26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(GET_MAX_AMPLITUDE, data, &reply);
26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        *max = reply.readInt32();
26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
270ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick    status_t getMetrics(Parcel* reply)
271ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick    {
272ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick        ALOGV("getMetrics");
273ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick        Parcel data;
274ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
275ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick        status_t ret = remote()->transact(GET_METRICS, data, reply);
276ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick        if (ret == NO_ERROR) {
277ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick            return OK;
278ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick        }
279ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick        return UNKNOWN_ERROR;
280ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick    }
281ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick
28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t start()
28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2843856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("start");
28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(START, data, &reply);
28889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t stop()
29289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
2933856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("stop");
29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(STOP, data, &reply);
29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
30089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t reset()
30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
3023856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("reset");
30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
30589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RESET, data, &reply);
30689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
309d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    status_t pause()
310d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    {
311d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        ALOGV("pause");
312d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        Parcel data, reply;
313d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
314d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        remote()->transact(PAUSE, data, &reply);
315d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        return reply.readInt32();
316d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    }
317d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim
318d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    status_t resume()
319d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    {
320d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        ALOGV("resume");
321d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        Parcel data, reply;
322d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
323d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        remote()->transact(RESUME, data, &reply);
324d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        return reply.readInt32();
325d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    }
326d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim
32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t close()
32889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
3293856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("close");
33089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
33189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(CLOSE, data, &reply);
33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
33489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
33589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
33689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t release()
33789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
3383856b090cd04ba5dd4a59a12430ed724d5995909Steve Block        ALOGV("release");
33989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
34089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
34189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RELEASE, data, &reply);
34289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
34389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
344fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin
345fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    status_t setInputDevice(audio_port_handle_t deviceId)
346fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    {
347fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        ALOGV("setInputDevice");
348fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        Parcel data, reply;
349fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
350fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        data.writeInt32(deviceId);
351fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin
352fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        status_t status = remote()->transact(SET_INPUT_DEVICE, data, &reply);
353fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        if (status != OK) {
354fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            ALOGE("setInputDevice binder call failed: %d", status);
355fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            return status;
356fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        }
357fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        return reply.readInt32();;
358fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    }
359fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin
360fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    audio_port_handle_t getRoutedDeviceId(audio_port_handle_t *deviceId)
361fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    {
362fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        ALOGV("getRoutedDeviceId");
363fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        Parcel data, reply;
364fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
365fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin
366fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        status_t status = remote()->transact(GET_ROUTED_DEVICE_ID, data, &reply);
367fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        if (status != OK) {
368fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            ALOGE("getRoutedDeviceid binder call failed: %d", status);
369fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            *deviceId = AUDIO_PORT_HANDLE_NONE;
370fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            return status;
371fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        }
372fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin
373fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        status = reply.readInt32();
374fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        if (status != NO_ERROR) {
375fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            *deviceId = AUDIO_PORT_HANDLE_NONE;
376fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        } else {
377fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            *deviceId = reply.readInt32();
378fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        }
379fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        return status;
380fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    }
381fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin
382fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    status_t enableAudioDeviceCallback(bool enabled)
383fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    {
384fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        ALOGV("enableAudioDeviceCallback");
385fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        Parcel data, reply;
386fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
387fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        data.writeBool(enabled);
388fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        status_t status = remote()->transact(ENABLE_AUDIO_DEVICE_CALLBACK, data, &reply);
389fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        if (status != OK) {
390fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            ALOGE("enableAudioDeviceCallback binder call failed: %d, %d", enabled, status);
391fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            return status;
392fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        }
393fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        return reply.readInt32();
394fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    }
395609850df59219845a8c4ebe18a2687447ea570ccjiabin
396609850df59219845a8c4ebe18a2687447ea570ccjiabin    status_t getActiveMicrophones(std::vector<media::MicrophoneInfo>* activeMicrophones)
397609850df59219845a8c4ebe18a2687447ea570ccjiabin    {
398609850df59219845a8c4ebe18a2687447ea570ccjiabin        ALOGV("getActiveMicrophones");
399609850df59219845a8c4ebe18a2687447ea570ccjiabin        Parcel data, reply;
400609850df59219845a8c4ebe18a2687447ea570ccjiabin        data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
401609850df59219845a8c4ebe18a2687447ea570ccjiabin        status_t status = remote()->transact(GET_ACTIVE_MICROPHONES, data, &reply);
402609850df59219845a8c4ebe18a2687447ea570ccjiabin        if (status != OK
403609850df59219845a8c4ebe18a2687447ea570ccjiabin                || (status = (status_t)reply.readInt32()) != NO_ERROR) {
404609850df59219845a8c4ebe18a2687447ea570ccjiabin            return status;
405609850df59219845a8c4ebe18a2687447ea570ccjiabin        }
406609850df59219845a8c4ebe18a2687447ea570ccjiabin        status = reply.readParcelableVector(activeMicrophones);
407609850df59219845a8c4ebe18a2687447ea570ccjiabin        return status;
408609850df59219845a8c4ebe18a2687447ea570ccjiabin    }
409609850df59219845a8c4ebe18a2687447ea570ccjiabin
41089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
41189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
41256f0cc533a38bdb84bc03adcb43515614ab21baenikoIMPLEMENT_META_INTERFACE(MediaRecorder, "android.media.IMediaRecorder");
41389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
41489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------
41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaRecorder::onTransact(
417b187de1ada34a9023c05d020a4592686ba761278Glenn Kasten                                     uint32_t code, const Parcel& data, Parcel* reply,
418b187de1ada34a9023c05d020a4592686ba761278Glenn Kasten                                     uint32_t flags)
41989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
420e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten    switch (code) {
42189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RELEASE: {
4223856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("RELEASE");
42389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(release());
42589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
42689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
42789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case INIT: {
4283856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("INIT");
42989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
43089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(init());
43189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
43289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case CLOSE: {
4343856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("CLOSE");
43589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
43689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(close());
43789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
43889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
43989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RESET: {
4403856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("RESET");
44189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
44289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(reset());
44389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
44489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
44589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case STOP: {
4463856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("STOP");
44789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
44889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(stop());
44989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
45089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
45189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case START: {
4523856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("START");
45389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
45489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(start());
45589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
45689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
457d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        case PAUSE: {
458d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            ALOGV("PAUSE");
459d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            CHECK_INTERFACE(IMediaRecorder, data, reply);
460d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            reply->writeInt32(pause());
461d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            return NO_ERROR;
462d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        } break;
463d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        case RESUME: {
464d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            ALOGV("RESUME");
465d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            CHECK_INTERFACE(IMediaRecorder, data, reply);
466d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            reply->writeInt32(resume());
467d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim            return NO_ERROR;
468d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim        } break;
46989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case PREPARE: {
4703856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("PREPARE");
47189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
47289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(prepare());
47389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
47489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
47589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case GET_MAX_AMPLITUDE: {
4763856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("GET_MAX_AMPLITUDE");
47789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
47889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int max = 0;
47989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            status_t ret = getMaxAmplitude(&max);
48089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(max);
48189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(ret);
48289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
48389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
484ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick        case GET_METRICS: {
485ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick            ALOGV("GET_METRICS");
486ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick            status_t ret = getMetrics(reply);
487ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick            return ret;
488ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick        } break;
48989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_SOURCE: {
4903856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_SOURCE");
49189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
49289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int vs = data.readInt32();
49389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoSource(vs));
49489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
49589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
49689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_SOURCE: {
4973856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_AUDIO_SOURCE");
49889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
49989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int as = data.readInt32();
50089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setAudioSource(as));
50189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
50289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
50389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FORMAT: {
5043856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_OUTPUT_FORMAT");
50589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
50689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int of = data.readInt32();
50789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setOutputFormat(of));
50889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
50989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
51089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_ENCODER: {
5113856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_ENCODER");
51289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
51389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int ve = data.readInt32();
51489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoEncoder(ve));
51589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
51689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
51789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_ENCODER: {
5183856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_AUDIO_ENCODER");
51989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
52089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int ae = data.readInt32();
52189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setAudioEncoder(ae));
52289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
52389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
52489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
52589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_OUTPUT_FILE_FD: {
5263856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_OUTPUT_FILE_FD");
52789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
52889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int fd = dup(data.readFileDescriptor());
529fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang            reply->writeInt32(setOutputFile(fd));
530fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang            ::close(fd);
531fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang            return NO_ERROR;
532fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang        } break;
533fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang        case SET_NEXT_OUTPUT_FILE_FD: {
534fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang            ALOGV("SET_NEXT_OUTPUT_FILE_FD");
535fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang            CHECK_INTERFACE(IMediaRecorder, data, reply);
536fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang            int fd = dup(data.readFileDescriptor());
537fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang            reply->writeInt32(setNextOutputFile(fd));
53825d83125cee222993673d3ba261ae1186bcad8c2James Dong            ::close(fd);
53989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
5405d6aca5d86e86af3f8f597be573d4563d69ceb85Nipun Kwatra        } break;
54189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_SIZE: {
5423856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_SIZE");
54389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
54489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int width = data.readInt32();
54589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int height = data.readInt32();
54689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoSize(width, height));
54789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
54889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
54989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VIDEO_FRAMERATE: {
5503856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_VIDEO_FRAMERATE");
55189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
55289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int frames_per_second = data.readInt32();
55389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setVideoFrameRate(frames_per_second));
55489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
55589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
556c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        case SET_PARAMETERS: {
5573856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_PARAMETER");
558c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
559c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            reply->writeInt32(setParameters(data.readString8()));
560c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project            return NO_ERROR;
561c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        } break;
56289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_LISTENER: {
5633856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_LISTENER");
56489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
56537047fceba836f341d0108beed0991b0f8dfc543James Dong            sp<IMediaRecorderClient> listener =
56637047fceba836f341d0108beed0991b0f8dfc543James Dong                interface_cast<IMediaRecorderClient>(data.readStrongBinder());
56789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setListener(listener));
56889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
56989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
570ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        case SET_CLIENT_NAME: {
571ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            ALOGV("SET_CLIENT_NAME");
572ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            CHECK_INTERFACE(IMediaRecorder, data, reply);
573ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            reply->writeInt32(setClientName(data.readString16()));
574ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            return NO_ERROR;
575ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        }
57689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_PREVIEW_SURFACE: {
5773856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_PREVIEW_SURFACE");
57889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
579b187de1ada34a9023c05d020a4592686ba761278Glenn Kasten            sp<IGraphicBufferProducer> surface = interface_cast<IGraphicBufferProducer>(
580b187de1ada34a9023c05d020a4592686ba761278Glenn Kasten                    data.readStrongBinder());
58189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setPreviewSurface(surface));
58289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
58389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
58489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_CAMERA: {
5853856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("SET_CAMERA");
58689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaRecorder, data, reply);
587d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala            sp<hardware::ICamera> camera =
588d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala                    interface_cast<hardware::ICamera>(data.readStrongBinder());
5894ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li            sp<ICameraRecordingProxy> proxy =
590d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala                    interface_cast<ICameraRecordingProxy>(data.readStrongBinder());
5914ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li            reply->writeInt32(setCamera(camera, proxy));
59289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
59389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
5948f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang        case SET_INPUT_SURFACE: {
5958f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang            ALOGV("SET_INPUT_SURFACE");
596e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang            CHECK_INTERFACE(IMediaRecorder, data, reply);
597addf2cbb120346ae42e78fa739245a353db5edadChong Zhang            sp<PersistentSurface> surface = new PersistentSurface();
598addf2cbb120346ae42e78fa739245a353db5edadChong Zhang            surface->readFromParcel(&data);
5998f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang            reply->writeInt32(setInputSurface(surface));
600e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang            return NO_ERROR;
601e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhang        } break;
602b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        case QUERY_SURFACE_MEDIASOURCE: {
6033856b090cd04ba5dd4a59a12430ed724d5995909Steve Block            ALOGV("QUERY_SURFACE_MEDIASOURCE");
604b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            CHECK_INTERFACE(IMediaRecorder, data, reply);
605b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            // call the mediaserver side to create
606b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            // a surfacemediasource
6078ba01021b573889802e67e029225a96f0dfa471aAndy McFadden            sp<IGraphicBufferProducer> surfaceMediaSource = querySurfaceMediaSource();
608b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            // The mediaserver might have failed to create a source
609b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            int returnedNull= (surfaceMediaSource == NULL) ? 1 : 0 ;
610b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            reply->writeInt32(returnedNull);
611b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            if (!returnedNull) {
61206b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen                reply->writeStrongBinder(IInterface::asBinder(surfaceMediaSource));
613b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            }
614b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi            return NO_ERROR;
615b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi        } break;
616fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        case SET_INPUT_DEVICE: {
617fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            ALOGV("SET_INPUT_DEVICE");
618fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            CHECK_INTERFACE(IMediaRecorder, data, reply);
619fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            audio_port_handle_t deviceId;
620fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            status_t status = data.readInt32(&deviceId);
621fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            if (status == NO_ERROR) {
622fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin                reply->writeInt32(setInputDevice(deviceId));
623fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            } else {
624fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin                reply->writeInt32(BAD_VALUE);
625fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            }
626fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            return NO_ERROR;
627fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        } break;
628fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        case GET_ROUTED_DEVICE_ID: {
629fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            ALOGV("GET_ROUTED_DEVICE_ID");
630fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            CHECK_INTERFACE(IMediaRecorder, data, reply);
631fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            audio_port_handle_t deviceId;
632fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            status_t status = getRoutedDeviceId(&deviceId);
633fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            reply->writeInt32(status);
634fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            if (status == NO_ERROR) {
635fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin                reply->writeInt32(deviceId);
636fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            }
637fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            return NO_ERROR;
638fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        } break;
639fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        case ENABLE_AUDIO_DEVICE_CALLBACK: {
640fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            ALOGV("ENABLE_AUDIO_DEVICE_CALLBACK");
641fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            CHECK_INTERFACE(IMediaRecorder, data, reply);
642fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            bool enabled;
643fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            status_t status = data.readBool(&enabled);
644fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            if (status == NO_ERROR) {
645fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin                reply->writeInt32(enableAudioDeviceCallback(enabled));
646fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            } else {
647fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin                reply->writeInt32(BAD_VALUE);
648fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            }
649fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin            return NO_ERROR;
650609850df59219845a8c4ebe18a2687447ea570ccjiabin        } break;
651609850df59219845a8c4ebe18a2687447ea570ccjiabin        case GET_ACTIVE_MICROPHONES: {
652609850df59219845a8c4ebe18a2687447ea570ccjiabin            ALOGV("GET_ACTIVE_MICROPHONES");
653609850df59219845a8c4ebe18a2687447ea570ccjiabin            CHECK_INTERFACE(IMediaRecorder, data, reply);
654609850df59219845a8c4ebe18a2687447ea570ccjiabin            std::vector<media::MicrophoneInfo> activeMicrophones;
655609850df59219845a8c4ebe18a2687447ea570ccjiabin            status_t status = getActiveMicrophones(&activeMicrophones);
656609850df59219845a8c4ebe18a2687447ea570ccjiabin            reply->writeInt32(status);
657609850df59219845a8c4ebe18a2687447ea570ccjiabin            if (status != NO_ERROR) {
658609850df59219845a8c4ebe18a2687447ea570ccjiabin                return NO_ERROR;
659609850df59219845a8c4ebe18a2687447ea570ccjiabin            }
660609850df59219845a8c4ebe18a2687447ea570ccjiabin            reply->writeParcelableVector(activeMicrophones);
661609850df59219845a8c4ebe18a2687447ea570ccjiabin            return NO_ERROR;
662609850df59219845a8c4ebe18a2687447ea570ccjiabin
663fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin        }
66489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        default:
66589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return BBinder::onTransact(code, data, reply, flags);
66689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
66789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
66889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
66989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------------
67089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
67140bc906252974d0b389ae4a147232d0c9a97193fGlenn Kasten} // namespace android
672