ICameraDeviceCallbacks.cpp revision e7ee7637747371635a85fedd24d2190bb1f38651
1e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin/* 2e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** 3e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** Copyright 2013, The Android Open Source Project 4e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** 5e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** Licensed under the Apache License, Version 2.0 (the "License"); 6e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** you may not use this file except in compliance with the License. 7e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** You may obtain a copy of the License at 8e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** 9e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** http://www.apache.org/licenses/LICENSE-2.0 10e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** 11e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** Unless required by applicable law or agreed to in writing, software 12e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** distributed under the License is distributed on an "AS IS" BASIS, 13e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** See the License for the specific language governing permissions and 15e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** limitations under the License. 16e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin*/ 17e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 18e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin//#define LOG_NDEBUG 0 19e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#define LOG_TAG "ICameraDeviceCallbacks" 20e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <utils/Log.h> 21e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <stdint.h> 22e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <sys/types.h> 23e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 24e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <binder/Parcel.h> 25e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <gui/IGraphicBufferProducer.h> 26e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <gui/Surface.h> 27e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <utils/Mutex.h> 28e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 29e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <camera/photography/ICameraDeviceCallbacks.h> 30e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include "camera/CameraMetadata.h" 31e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 32e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinnamespace android { 33e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 34e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinenum { 35e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin NOTIFY_CALLBACK = IBinder::FIRST_CALL_TRANSACTION, 36e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin RESULT_RECEIVED, 37e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin}; 38e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 39e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass BpCameraDeviceCallbacks: public BpInterface<ICameraDeviceCallbacks> 40e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin{ 41e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinpublic: 42e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin BpCameraDeviceCallbacks(const sp<IBinder>& impl) 43e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin : BpInterface<ICameraDeviceCallbacks>(impl) 44e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin { 45e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 46e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 47e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin // generic callback from camera service to app 48e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin void notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2) 49e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin { 50e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin ALOGV("notifyCallback"); 51e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin Parcel data, reply; 52e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor()); 53e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin data.writeInt32(msgType); 54e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin data.writeInt32(ext1); 55e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin data.writeInt32(ext2); 56e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin remote()->transact(NOTIFY_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); 57e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin data.writeNoException(); 58e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 59e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 60e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin void onResultReceived(int32_t frameId, const CameraMetadata& result) { 61e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin ALOGV("onResultReceived"); 62e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin Parcel data, reply; 63e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor()); 64e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin data.writeInt32(frameId); 65e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin result.writeToParcel(&data); 66e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin remote()->transact(RESULT_RECEIVED, data, &reply, IBinder::FLAG_ONEWAY); 67e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin data.writeNoException(); 68e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 69e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin}; 70e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 71e7ee7637747371635a85fedd24d2190bb1f38651Igor MurashkinIMPLEMENT_META_INTERFACE(CameraDeviceCallbacks, 72e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin "android.hardware.photography.ICameraDeviceCallbacks"); 73e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 74e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin// ---------------------------------------------------------------------- 75e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 76e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinstatus_t BnCameraDeviceCallbacks::onTransact( 77e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 78e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin{ 79e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin ALOGV("onTransact - code = %d", code); 80e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin switch(code) { 81e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin case NOTIFY_CALLBACK: { 82e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin ALOGV("NOTIFY_CALLBACK"); 83e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply); 84e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin int32_t msgType = data.readInt32(); 85e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin int32_t ext1 = data.readInt32(); 86e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin int32_t ext2 = data.readInt32(); 87e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin notifyCallback(msgType, ext1, ext2); 88e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin data.readExceptionCode(); 89e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin return NO_ERROR; 90e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } break; 91e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin case RESULT_RECEIVED: { 92e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin ALOGV("RESULT_RECEIVED"); 93e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply); 94e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin int32_t frameId = data.readInt32(); 95e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin CameraMetadata result; 96e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin result.readFromParcel(const_cast<Parcel*>(&data)); 97e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin onResultReceived(frameId, result); 98e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin data.readExceptionCode(); 99e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin return NO_ERROR; 100e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin break; 101e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 102e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin default: 103e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin return BBinder::onTransact(code, data, reply, flags); 104e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 105e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin} 106e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 107e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin// ---------------------------------------------------------------------------- 108e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 109e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin}; // namespace android 110e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 111