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