Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b2d71d3a authored by Eino-Ville Talvala's avatar Eino-Ville Talvala Committed by Android (Google) Code Review
Browse files

Merge "Camera API 2, Device 2/3: Implement idle and shutter callbacks" into klp-dev

parents 56ce7260 f1e98d85
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -67,11 +67,11 @@ public:
                           IBinder::FLAG_ONEWAY);
    }

    void onResultReceived(int32_t frameId, camera_metadata* result) {
    void onResultReceived(int32_t requestId, camera_metadata* result) {
        ALOGV("onResultReceived");
        Parcel data, reply;
        data.writeInterfaceToken(IProCameraCallbacks::getInterfaceDescriptor());
        data.writeInt32(frameId);
        data.writeInt32(requestId);
        CameraMetadata::writeToParcel(data, result);
        remote()->transact(RESULT_RECEIVED, data, &reply, IBinder::FLAG_ONEWAY);
    }
@@ -107,10 +107,10 @@ status_t BnProCameraCallbacks::onTransact(
        case RESULT_RECEIVED: {
            ALOGV("RESULT_RECEIVED");
            CHECK_INTERFACE(IProCameraCallbacks, data, reply);
            int32_t frameId = data.readInt32();
            int32_t requestId = data.readInt32();
            camera_metadata_t *result = NULL;
            CameraMetadata::readFromParcel(data, &result);
            onResultReceived(frameId, result);
            onResultReceived(requestId, result);
            return NO_ERROR;
            break;
        }
+3 −3
Original line number Diff line number Diff line
@@ -90,8 +90,8 @@ void ProCamera::onLockStatusChanged(
    }
}

void ProCamera::onResultReceived(int32_t frameId, camera_metadata* result) {
    ALOGV("%s: frameId = %d, result = %p", __FUNCTION__, frameId, result);
void ProCamera::onResultReceived(int32_t requestId, camera_metadata* result) {
    ALOGV("%s: requestId = %d, result = %p", __FUNCTION__, requestId, result);

    sp<ProCameraListener> listener;
    {
@@ -112,7 +112,7 @@ void ProCamera::onResultReceived(int32_t frameId, camera_metadata* result) {
    result = tmp.release();

    if (listener != NULL) {
        listener->onResultReceived(frameId, result);
        listener->onResultReceived(requestId, result);
    } else {
        free_camera_metadata(result);
    }
+51 −17
Original line number Diff line number Diff line
@@ -32,7 +32,9 @@
namespace android {

enum {
    NOTIFY_CALLBACK = IBinder::FIRST_CALL_TRANSACTION,
    CAMERA_ERROR = IBinder::FIRST_CALL_TRANSACTION,
    CAMERA_IDLE,
    CAPTURE_STARTED,
    RESULT_RECEIVED,
};

@@ -44,19 +46,37 @@ public:
    {
    }

    // generic callback from camera service to app
    void notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2)
    void onDeviceError(CameraErrorCode errorCode)
    {
        ALOGV("notifyCallback");
        ALOGV("onDeviceError");
        Parcel data, reply;
        data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor());
        data.writeInt32(msgType);
        data.writeInt32(ext1);
        data.writeInt32(ext2);
        remote()->transact(NOTIFY_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY);
        data.writeInt32(static_cast<int32_t>(errorCode));
        remote()->transact(CAMERA_ERROR, data, &reply, IBinder::FLAG_ONEWAY);
        data.writeNoException();
    }

    void onDeviceIdle()
    {
        ALOGV("onDeviceIdle");
        Parcel data, reply;
        data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor());
        remote()->transact(CAMERA_IDLE, data, &reply, IBinder::FLAG_ONEWAY);
        data.writeNoException();
    }

    void onCaptureStarted(int32_t requestId, int64_t timestamp)
    {
        ALOGV("onCaptureStarted");
        Parcel data, reply;
        data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor());
        data.writeInt32(requestId);
        data.writeInt64(timestamp);
        remote()->transact(CAPTURE_STARTED, data, &reply, IBinder::FLAG_ONEWAY);
        data.writeNoException();
    }


    void onResultReceived(int32_t requestId, const CameraMetadata& result) {
        ALOGV("onResultReceived");
        Parcel data, reply;
@@ -79,18 +99,33 @@ status_t BnCameraDeviceCallbacks::onTransact(
{
    ALOGV("onTransact - code = %d", code);
    switch(code) {
        case NOTIFY_CALLBACK: {
            ALOGV("NOTIFY_CALLBACK");
        case CAMERA_ERROR: {
            ALOGV("onDeviceError");
            CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply);
            int32_t msgType = data.readInt32();
            int32_t ext1 = data.readInt32();
            int32_t ext2 = data.readInt32();
            notifyCallback(msgType, ext1, ext2);
            CameraErrorCode errorCode =
                    static_cast<CameraErrorCode>(data.readInt32());
            onDeviceError(errorCode);
            data.readExceptionCode();
            return NO_ERROR;
        } break;
        case CAMERA_IDLE: {
            ALOGV("onDeviceIdle");
            CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply);
            onDeviceIdle();
            data.readExceptionCode();
            return NO_ERROR;
        } break;
        case CAPTURE_STARTED: {
            ALOGV("onCaptureStarted");
            CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply);
            int32_t requestId = data.readInt32();
            int64_t timestamp = data.readInt64();
            onCaptureStarted(requestId, timestamp);
            data.readExceptionCode();
            return NO_ERROR;
        } break;
        case RESULT_RECEIVED: {
            ALOGV("RESULT_RECEIVED");
            ALOGV("onResultReceived");
            CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply);
            int32_t requestId = data.readInt32();
            CameraMetadata result;
@@ -102,8 +137,7 @@ status_t BnCameraDeviceCallbacks::onTransact(
            onResultReceived(requestId, result);
            data.readExceptionCode();
            return NO_ERROR;
            break;
        }
        } break;
        default:
            return BBinder::onTransact(code, data, reply, flags);
    }
+2 −3
Original line number Diff line number Diff line
@@ -284,9 +284,9 @@ protected:
        }
    }

    virtual void onResultReceived(int32_t frameId,
    virtual void onResultReceived(int32_t requestId,
                                  camera_metadata* request) {
        dout << "Result received frameId = " << frameId
        dout << "Result received requestId = " << requestId
             << ", requestPtr = " << (void*)request << std::endl;
        QueueEvent(RESULT_RECEIVED);
        free_camera_metadata(request);
@@ -1276,4 +1276,3 @@ TEST_F(ProCameraTest, ServiceListenersFunctional) {
}
}
}
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ public:
    /** Missing by design: implementation is client-side in ProCamera.cpp **/
    // virtual void onBufferReceived(int streamId,
    //                               const CpuConsumer::LockedBufer& buf);
    virtual void            onResultReceived(int32_t frameId,
    virtual void            onResultReceived(int32_t requestId,
                                             camera_metadata* result) = 0;
};

Loading