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

Commit 7b33a74b authored by Igor Murashkin's avatar Igor Murashkin
Browse files

ProCamera: Add getInfo for getting static metadata (and a test)

Change-Id: I3b87dfbc621d98bf41f37a892a1012baf85b5166
parent a91537e2
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ enum {
    CANCEL_STREAM,
    CREATE_STREAM,
    CREATE_DEFAULT_REQUEST,
    GET_CAMERA_INFO,
};

/**
@@ -255,6 +256,17 @@ public:
    }


    virtual status_t getCameraInfo(int cameraId, camera_metadata** info)
    {
        Parcel data, reply;
        data.writeInterfaceToken(IProCameraUser::getInterfaceDescriptor());
        data.writeInt32(cameraId);
        remote()->transact(GET_CAMERA_INFO, data, &reply);
        readMetadata(reply, /*out*/info);
        return reply.readInt32();
    }


private:


@@ -367,6 +379,24 @@ status_t BnProCameraUser::onTransact(
            writeMetadata(*reply, request);
            reply->writeInt32(ret);

            free_camera_metadata(request);

            return NO_ERROR;
        } break;
        case GET_CAMERA_INFO: {
            CHECK_INTERFACE(IProCameraUser, data, reply);

            int cameraId = data.readInt32();

            camera_metadata_t* info = NULL;
            status_t ret;
            ret = getCameraInfo(cameraId, &info);

            writeMetadata(*reply, info);
            reply->writeInt32(ret);

            free_camera_metadata(info);

            return NO_ERROR;
        } break;
        default:
+18 −5
Original line number Diff line number Diff line
@@ -361,15 +361,28 @@ status_t ProCamera::createStreamCpu(int width, int height, int format,
}

int ProCamera::getNumberOfCameras() {
    ALOGE("%s: not implemented yet", __FUNCTION__);
    return 1;
    const sp<ICameraService> cs = getCameraService();

    if (!cs.get()) {
        return DEAD_OBJECT;
    }
    return cs->getNumberOfCameras();
}

camera_metadata* ProCamera::getCameraInfo(int cameraId) {
    ALOGE("%s: not implemented yet", __FUNCTION__);

    ALOGV("%s: cameraId = %d", __FUNCTION__, cameraId);
    return NULL;

    sp <IProCameraUser> c = mCamera;
    if (c == 0) return NULL;

    camera_metadata* ptr = NULL;
    status_t status = c->getCameraInfo(cameraId, &ptr);

    if (status != OK) {
        ALOGE("%s: Failed to get camera info, error = %d", __FUNCTION__, status);
    }

    return ptr;
}

status_t ProCamera::createDefaultRequest(int templateId,
+30 −0
Original line number Diff line number Diff line
@@ -324,10 +324,40 @@ protected:
        ASSERT_NE((void*)NULL, surface.get());
    }

    template <typename T>
    static bool FindItem(T needle, T* array, size_t count) {
        for (int i = 0; i < count; ++i) {
            if (array[i] == needle) {
                return true;
            }
        }
        return false;
    }

};

sp<Thread> ProCameraTest::mTestThread;

TEST_F(ProCameraTest, AvailableFormats) {
    if (HasFatalFailure()) {
        return;
    }

    camera_metadata_t* info = mCamera->getCameraInfo(CAMERA_ID);
    ASSERT_NE((void*)NULL, info);

    camera_metadata_entry_t entry;
    uint32_t tag = static_cast<uint32_t>(ANDROID_SCALER_AVAILABLE_FORMATS);
    EXPECT_EQ(OK, find_camera_metadata_entry(info, tag, &entry));

    EXPECT_TRUE(FindItem<int32_t>(HAL_PIXEL_FORMAT_YV12,
                                                  entry.data.i32, entry.count));
    EXPECT_TRUE(FindItem<int32_t>(HAL_PIXEL_FORMAT_YCrCb_420_SP,
                                                  entry.data.i32, entry.count));

    free_camera_metadata(info);
}

// test around exclusiveTryLock (immediate locking)
TEST_F(ProCameraTest, LockingImmediate) {

+5 −0
Original line number Diff line number Diff line
@@ -75,6 +75,11 @@ public:
                                                 camera_metadata** request)
                                                                           = 0;

    // Get static camera metadata
    virtual status_t        getCameraInfo(int cameraId,
                                          /*out*/
                                          camera_metadata** info) = 0;

};

// ----------------------------------------------------------------------------
+1 −1
Original line number Diff line number Diff line
@@ -172,7 +172,7 @@ public:
    static int getNumberOfCameras();

    // Get static camera metadata
    static camera_metadata* getCameraInfo(int cameraId);
    camera_metadata* getCameraInfo(int cameraId);

    sp<IProCameraUser>         remote();

Loading