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