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