ICamera.cpp revision bfa33aae4f54c0020a0568b16a3acb7b30b6ca3d
13cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian/* 23cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** 33cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** Copyright 2008, The Android Open Source Project 43cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** 53cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** Licensed under the Apache License, Version 2.0 (the "License"); 63cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** you may not use this file except in compliance with the License. 73cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** You may obtain a copy of the License at 83cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** 93cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** http://www.apache.org/licenses/LICENSE-2.0 103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** 113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** Unless required by applicable law or agreed to in writing, software 123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** distributed under the License is distributed on an "AS IS" BASIS, 133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** See the License for the specific language governing permissions and 153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** limitations under the License. 163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian*/ 173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian//#define LOG_NDEBUG 0 193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#define LOG_TAG "ICamera" 203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <utils/Log.h> 213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <stdint.h> 223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <sys/types.h> 233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <binder/Parcel.h> 243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <camera/ICamera.h> 253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopiannamespace android { 273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianenum { 293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, 303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian SET_PREVIEW_DISPLAY, 31bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis SET_PREVIEW_TEXTURE, 323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian SET_PREVIEW_CALLBACK_FLAG, 333cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian START_PREVIEW, 343cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian STOP_PREVIEW, 353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian AUTO_FOCUS, 363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CANCEL_AUTO_FOCUS, 373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian TAKE_PICTURE, 383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian SET_PARAMETERS, 393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian GET_PARAMETERS, 403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian SEND_COMMAND, 413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CONNECT, 423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOCK, 433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian UNLOCK, 443cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian PREVIEW_ENABLED, 453cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian START_RECORDING, 463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian STOP_RECORDING, 473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian RECORDING_ENABLED, 483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian RELEASE_RECORDING_FRAME, 49e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong GET_NUM_VIDEO_BUFFERS, 50e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong GET_VIDEO_BUFFER, 51e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong STORE_META_DATA_IN_BUFFERS, 523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; 533cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass BpCamera: public BpInterface<ICamera> 553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{ 563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic: 573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian BpCamera(const sp<IBinder>& impl) 583cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian : BpInterface<ICamera>(impl) 593cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 603cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 613cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 623cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // disconnect from camera service 633cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian void disconnect() 643cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 653cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("disconnect"); 663cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 673cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 683cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(DISCONNECT, data, &reply); 693cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 703cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 714b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis // pass the buffered Surface to the camera service 724b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis status_t setPreviewDisplay(const sp<Surface>& surface) 733cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 743cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("setPreviewDisplay"); 753cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 763cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 774b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis Surface::writeToParcel(surface, &data); 783cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(SET_PREVIEW_DISPLAY, data, &reply); 793cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readInt32(); 803cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 813cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 82bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis // pass the buffered SurfaceTexture to the camera service 83bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis status_t setPreviewTexture(const sp<ISurfaceTexture>& surfaceTexture) 84bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis { 85bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis LOGV("setPreviewTexture"); 86bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis Parcel data, reply; 87bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 88bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis sp<IBinder> b(surfaceTexture->asBinder()); 89bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis data.writeStrongBinder(b); 90bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis remote()->transact(SET_PREVIEW_TEXTURE, data, &reply); 91bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis return reply.readInt32(); 92bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis } 93bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis 943cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // set the preview callback flag to affect how the received frames from 953cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // preview are handled. See Camera.h for details. 963cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian void setPreviewCallbackFlag(int flag) 973cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 983cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("setPreviewCallbackFlag(%d)", flag); 993cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 1003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 1013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInt32(flag); 1023cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(SET_PREVIEW_CALLBACK_FLAG, data, &reply); 1033cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 1043cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1053cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // start preview mode, must call setPreviewDisplay first 1063cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian status_t startPreview() 1073cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 1083cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("startPreview"); 1093cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 1103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 1113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(START_PREVIEW, data, &reply); 1123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readInt32(); 1133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 1143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // start recording mode, must call setPreviewDisplay first 1163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian status_t startRecording() 1173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 1183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("startRecording"); 1193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 1203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 1213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(START_RECORDING, data, &reply); 1223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readInt32(); 1233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 1243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // stop preview mode 1263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian void stopPreview() 1273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 1283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("stopPreview"); 1293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 1303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 1313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(STOP_PREVIEW, data, &reply); 1323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 1333cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1343cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // stop recording mode 1353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian void stopRecording() 1363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 1373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("stopRecording"); 1383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 1393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 1403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(STOP_RECORDING, data, &reply); 1413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 1423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian void releaseRecordingFrame(const sp<IMemory>& mem) 1443cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 1453cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("releaseRecordingFrame"); 1463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 1473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 1483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeStrongBinder(mem->asBinder()); 1493cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(RELEASE_RECORDING_FRAME, data, &reply); 1503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 1513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 152e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong int32_t getNumberOfVideoBuffers() const 153e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong { 154e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong LOGV("getNumberOfVideoBuffers"); 155e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong Parcel data, reply; 156e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 157e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong remote()->transact(GET_NUM_VIDEO_BUFFERS, data, &reply); 158e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong return reply.readInt32(); 159e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong } 160e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong 161e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong sp<IMemory> getVideoBuffer(int32_t index) const 162e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong { 163e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong LOGV("getVideoBuffer: %d", index); 164e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong Parcel data, reply; 165e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 166e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong data.writeInt32(index); 167e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong remote()->transact(GET_VIDEO_BUFFER, data, &reply); 168e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong sp<IMemory> mem = interface_cast<IMemory>( 169e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong reply.readStrongBinder()); 170e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong return mem; 171e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong } 172e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong 173e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong status_t storeMetaDataInBuffers(bool enabled) 174e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong { 175e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong LOGV("storeMetaDataInBuffers: %s", enabled? "true": "false"); 176e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong Parcel data, reply; 177e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 178e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong data.writeInt32(enabled); 179e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong remote()->transact(STORE_META_DATA_IN_BUFFERS, data, &reply); 180e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong return reply.readInt32(); 181e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong } 182e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong 1833cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // check preview state 1843cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian bool previewEnabled() 1853cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 1863cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("previewEnabled"); 1873cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 1883cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 1893cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(PREVIEW_ENABLED, data, &reply); 1903cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readInt32(); 1913cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 1923cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1933cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // check recording state 1943cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian bool recordingEnabled() 1953cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 1963cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("recordingEnabled"); 1973cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 1983cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 1993cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(RECORDING_ENABLED, data, &reply); 2003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readInt32(); 2013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 2023cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 2033cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // auto focus 2043cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian status_t autoFocus() 2053cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 2063cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("autoFocus"); 2073cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 2083cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 2093cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(AUTO_FOCUS, data, &reply); 2103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian status_t ret = reply.readInt32(); 2113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return ret; 2123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 2133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 2143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // cancel focus 2153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian status_t cancelAutoFocus() 2163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 2173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("cancelAutoFocus"); 2183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 2193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 2203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(CANCEL_AUTO_FOCUS, data, &reply); 2213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian status_t ret = reply.readInt32(); 2223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return ret; 2233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 2243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 2253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // take a picture - returns an IMemory (ref-counted mmap) 2263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian status_t takePicture() 2273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 2283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("takePicture"); 2293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 2303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 2313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(TAKE_PICTURE, data, &reply); 2323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian status_t ret = reply.readInt32(); 2333cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return ret; 2343cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 2353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 2363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // set preview/capture parameters - key/value pairs 2373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian status_t setParameters(const String8& params) 2383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 2393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("setParameters"); 2403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 2413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 2423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeString8(params); 2433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(SET_PARAMETERS, data, &reply); 2443cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readInt32(); 2453cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 2463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 2473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // get preview/capture parameters - key/value pairs 2483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian String8 getParameters() const 2493cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 2503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("getParameters"); 2513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 2523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 2533cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(GET_PARAMETERS, data, &reply); 2543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readString8(); 2553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 2563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) 2573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 2588cc76ae259ad81d5a40277bbf5532696ebae8da8Wu-cheng Li LOGV("sendCommand"); 2593cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 2603cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 2613cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInt32(cmd); 2623cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInt32(arg1); 2633cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInt32(arg2); 2643cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(SEND_COMMAND, data, &reply); 2653cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readInt32(); 2663cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 2673cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t connect(const sp<ICameraClient>& cameraClient) 2683cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 2693cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 2703cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 2713cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeStrongBinder(cameraClient->asBinder()); 2723cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(CONNECT, data, &reply); 2733cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readInt32(); 2743cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 2753cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t lock() 2763cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 2773cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 2783cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 2793cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(LOCK, data, &reply); 2803cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readInt32(); 2813cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 2823cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t unlock() 2833cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian { 2843cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel data, reply; 2853cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); 2863cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian remote()->transact(UNLOCK, data, &reply); 2873cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return reply.readInt32(); 2883cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 2893cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; 2903cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 2913cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias AgopianIMPLEMENT_META_INTERFACE(Camera, "android.hardware.ICamera"); 2923cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 2933cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// ---------------------------------------------------------------------- 2943cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 2953cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianstatus_t BnCamera::onTransact( 2963cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 2973cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{ 2983cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian switch(code) { 2993cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case DISCONNECT: { 3003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("DISCONNECT"); 3013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3023cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian disconnect(); 3033cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3043cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 3053cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case SET_PREVIEW_DISPLAY: { 3063cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("SET_PREVIEW_DISPLAY"); 3073cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3084b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis sp<Surface> surface = Surface::readFromParcel(data); 3093cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(setPreviewDisplay(surface)); 3103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 312bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis case SET_PREVIEW_TEXTURE: { 313bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis LOGV("SET_PREVIEW_TEXTURE"); 314bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis CHECK_INTERFACE(ICamera, data, reply); 315bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis sp<ISurfaceTexture> st = interface_cast<ISurfaceTexture>(data.readStrongBinder()); 316bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis reply->writeInt32(setPreviewTexture(st)); 317bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis return NO_ERROR; 318bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis } break; 3193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case SET_PREVIEW_CALLBACK_FLAG: { 3203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("SET_PREVIEW_CALLBACK_TYPE"); 3213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian int callback_flag = data.readInt32(); 3233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian setPreviewCallbackFlag(callback_flag); 3243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 3263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case START_PREVIEW: { 3273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("START_PREVIEW"); 3283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(startPreview()); 3303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 3323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case START_RECORDING: { 3333cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("START_RECORDING"); 3343cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(startRecording()); 3363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 3383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case STOP_PREVIEW: { 3393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("STOP_PREVIEW"); 3403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian stopPreview(); 3423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 3443cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case STOP_RECORDING: { 3453cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("STOP_RECORDING"); 3463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian stopRecording(); 3483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3493cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 3503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case RELEASE_RECORDING_FRAME: { 3513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("RELEASE_RECORDING_FRAME"); 3523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3533cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian sp<IMemory> mem = interface_cast<IMemory>(data.readStrongBinder()); 3543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian releaseRecordingFrame(mem); 3553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 357e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong case GET_NUM_VIDEO_BUFFERS: { 358e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong LOGV("GET_NUM_VIDEO_BUFFERS"); 359e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong CHECK_INTERFACE(ICamera, data, reply); 360e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong reply->writeInt32(getNumberOfVideoBuffers()); 361e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong return NO_ERROR; 362e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong } break; 363e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong case GET_VIDEO_BUFFER: { 364e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong LOGV("GET_VIDEO_BUFFER"); 365e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong CHECK_INTERFACE(ICamera, data, reply); 366e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong int32_t index = data.readInt32(); 367e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong reply->writeStrongBinder(getVideoBuffer(index)->asBinder()); 368e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong return NO_ERROR; 369e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong } break; 370e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong case STORE_META_DATA_IN_BUFFERS: { 371e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong LOGV("STORE_META_DATA_IN_BUFFERS"); 372e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong CHECK_INTERFACE(ICamera, data, reply); 373e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong bool enabled = data.readInt32(); 374e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong reply->writeInt32(storeMetaDataInBuffers(enabled)); 375e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong return NO_ERROR; 376e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong } break; 3773cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case PREVIEW_ENABLED: { 3783cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("PREVIEW_ENABLED"); 3793cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3803cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(previewEnabled()); 3813cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3823cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 3833cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case RECORDING_ENABLED: { 3843cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("RECORDING_ENABLED"); 3853cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3863cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(recordingEnabled()); 3873cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3883cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 3893cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case AUTO_FOCUS: { 3903cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("AUTO_FOCUS"); 3913cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3923cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(autoFocus()); 3933cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 3943cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 3953cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case CANCEL_AUTO_FOCUS: { 3963cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("CANCEL_AUTO_FOCUS"); 3973cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 3983cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(cancelAutoFocus()); 3993cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 4003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 4013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case TAKE_PICTURE: { 4023cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("TAKE_PICTURE"); 4033cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 4043cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(takePicture()); 4053cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 4063cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 4073cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case SET_PARAMETERS: { 4083cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("SET_PARAMETERS"); 4093cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 4103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian String8 params(data.readString8()); 4113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(setParameters(params)); 4123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 4133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 4143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case GET_PARAMETERS: { 4153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("GET_PARAMETERS"); 4163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 4173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeString8(getParameters()); 4183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 4193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 4203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case SEND_COMMAND: { 4213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian LOGV("SEND_COMMAND"); 4223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 4233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian int command = data.readInt32(); 4243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian int arg1 = data.readInt32(); 4253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian int arg2 = data.readInt32(); 4263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(sendCommand(command, arg1, arg2)); 4273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 4283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 4293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case CONNECT: { 4303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 4313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian sp<ICameraClient> cameraClient = interface_cast<ICameraClient>(data.readStrongBinder()); 4323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(connect(cameraClient)); 4333cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 4343cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 4353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case LOCK: { 4363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 4373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(lock()); 4383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 4393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 4403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian case UNLOCK: { 4413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian CHECK_INTERFACE(ICamera, data, reply); 4423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian reply->writeInt32(unlock()); 4433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return NO_ERROR; 4443cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } break; 4453cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian default: 4463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian return BBinder::onTransact(code, data, reply, flags); 4473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian } 4483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian} 4493cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 4503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// ---------------------------------------------------------------------------- 4513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 4523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; // namespace android 453