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