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

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

Merge "Camera2: Use CameraMetadata wrapper class." into jb-mr1-dev

parents db7e3856 cab96a4a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -10,7 +10,8 @@ LOCAL_SRC_FILES:= \
    CameraService.cpp \
    CameraClient.cpp \
    Camera2Client.cpp \
    Camera2Device.cpp
    Camera2Device.cpp \
    CameraMetadata.cpp

LOCAL_SHARED_LIBRARIES:= \
    libui \
+171 −253

File changed.

Preview size limit exceeded, changes collapsed.

+12 −21
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ public:
    virtual void notifyAutoWhitebalance(uint8_t newState, int triggerId);

    virtual void onNewFrameAvailable();

private:
    enum State {
        DISCONNECTED,
@@ -153,10 +154,10 @@ private:
        int64_t gpsTimestamp;
        String8 gpsProcessingMethod;

        int wbMode;
        int effectMode;
        int antibandingMode;
        int sceneMode;
        uint8_t wbMode;
        uint8_t effectMode;
        uint8_t antibandingMode;
        uint8_t sceneMode;

        enum flashMode_t {
            FLASH_MODE_OFF = 0,
@@ -300,12 +301,12 @@ private:

    /* Output frame metadata processing methods */

    status_t processFrameFaceDetect(camera_metadata_t *frame);
    status_t processFrameFaceDetect(const CameraMetadata &frame);

    /* Preview related members */

    int mPreviewStreamId;
    camera_metadata_t *mPreviewRequest;
    CameraMetadata mPreviewRequest;
    sp<IBinder> mPreviewSurface;
    sp<ANativeWindow> mPreviewWindow;

@@ -351,7 +352,7 @@ private:
        Camera2Client *mParent;
    };
    sp<CaptureWaiter>  mCaptureWaiter;
    camera_metadata_t *mCaptureRequest;
    CameraMetadata mCaptureRequest;
    sp<Camera2Heap>    mCaptureHeap;
    // Handle captured image buffers
    void onCaptureAvailable();
@@ -375,7 +376,7 @@ private:
        Camera2Client *mParent;
    };
    sp<RecordingWaiter>  mRecordingWaiter;
    camera_metadata_t *mRecordingRequest;
    CameraMetadata mRecordingRequest;
    sp<Camera2Heap> mRecordingHeap;

    static const size_t kDefaultRecordingHeapCount = 8;
@@ -431,8 +432,8 @@ private:
    // checking the number of values in the entry. 0 for max/minCount means to
    // do no bounds check in that direction. In case of error, the entry data
    // pointer is null and the count is 0.
    camera_metadata_entry_t staticInfo(uint32_t tag,
            size_t minCount=0, size_t maxCount=0);
    camera_metadata_ro_entry_t staticInfo(uint32_t tag,
            size_t minCount=0, size_t maxCount=0) const;

    // Extract frequently-used camera static information into mDeviceInfo
    status_t buildDeviceInfo();
@@ -441,7 +442,7 @@ private:
    status_t buildDefaultParameters();

    // Update parameters all requests use, based on mParameters
    status_t updateRequestCommon(camera_metadata_t *request, const Parameters &params);
    status_t updateRequestCommon(CameraMetadata *request, const Parameters &params);

    // Map from sensor active array pixel coordinates to normalized camera
    // parameter coordinates. The former are (0,0)-(array width - 1, array height
@@ -449,16 +450,6 @@ private:
    int arrayXToNormalized(int width) const;
    int arrayYToNormalized(int height) const;

    // Update specific metadata entry with new values. Adds entry if it does not
    // exist, which will invalidate sorting
    static status_t updateEntry(camera_metadata_t *buffer,
            uint32_t tag, const void *data, size_t data_count);

    // Remove metadata entry. Will invalidate sorting. If entry does not exist,
    // does nothing.
    static status_t deleteEntry(camera_metadata_t *buffer,
            uint32_t tag);

    // Convert camera1 preview format string to camera2 enum
    static int formatStringToEnum(const char *format);
    static const char *formatEnumToString(int format);
+26 −11
Original line number Diff line number Diff line
@@ -155,25 +155,28 @@ status_t Camera2Device::dump(int fd, const Vector<String16>& args) {
    return res;
}

camera_metadata_t *Camera2Device::info() {
const CameraMetadata& Camera2Device::info() const {
    ALOGVV("%s: E", __FUNCTION__);

    return mDeviceInfo;
}

status_t Camera2Device::capture(camera_metadata_t* request) {
status_t Camera2Device::capture(CameraMetadata &request) {
    ALOGV("%s: E", __FUNCTION__);

    mRequestQueue.enqueue(request);
    mRequestQueue.enqueue(request.release());
    return OK;
}


status_t Camera2Device::setStreamingRequest(camera_metadata_t* request) {
status_t Camera2Device::setStreamingRequest(const CameraMetadata &request) {
    ALOGV("%s: E", __FUNCTION__);
    CameraMetadata streamRequest(request);
    return mRequestQueue.setStreamSlot(streamRequest.release());
}

    mRequestQueue.setStreamSlot(request);
    return OK;
status_t Camera2Device::clearStreamingRequest() {
    return mRequestQueue.setStreamSlot(NULL);
}

status_t Camera2Device::createStream(sp<ANativeWindow> consumer,
@@ -269,10 +272,14 @@ status_t Camera2Device::deleteStream(int id) {
}

status_t Camera2Device::createDefaultRequest(int templateId,
        camera_metadata_t **request) {
        CameraMetadata *request) {
    status_t err;
    ALOGV("%s: E", __FUNCTION__);
    return mDevice->ops->construct_default_request(
        mDevice, templateId, request);
    camera_metadata_t *rawRequest;
    err = mDevice->ops->construct_default_request(
        mDevice, templateId, &rawRequest);
    request->acquire(rawRequest);
    return err;
}

status_t Camera2Device::waitUntilDrained() {
@@ -344,8 +351,16 @@ status_t Camera2Device::setFrameListener(FrameListener *listener) {
    return mFrameQueue.setListener(listener);
}

status_t Camera2Device::getNextFrame(camera_metadata_t **frame) {
    return mFrameQueue.dequeue(frame);
status_t Camera2Device::getNextFrame(CameraMetadata *frame) {
    status_t res;
    camera_metadata_t *rawFrame;
    res = mFrameQueue.dequeue(&rawFrame);
    if (rawFrame  == NULL) {
        return NOT_ENOUGH_DATA;
    } else if (res == OK) {
        frame->acquire(rawFrame);
    }
    return res;
}

status_t Camera2Device::triggerAutofocus(uint32_t id) {
+13 −8
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <utils/Vector.h>

#include "hardware/camera2.h"
#include "CameraMetadata.h"

namespace android {

@@ -41,21 +42,26 @@ class Camera2Device : public virtual RefBase {
    status_t dump(int fd, const Vector<String16>& args);

    /**
     * Get a pointer to the device's static characteristics metadata buffer
     * The device's static characteristics metadata buffer
     */
    camera_metadata_t* info();
    const CameraMetadata& info() const;

    /**
     * Submit request for capture. The Camera2Device takes ownership of the
     * passed-in buffer.
     */
    status_t capture(camera_metadata_t *request);
    status_t capture(CameraMetadata &request);

    /**
     * Submit request for streaming. The Camera2Device makes a copy of the
     * passed-in buffer and the caller retains ownership.
     */
    status_t setStreamingRequest(camera_metadata_t *request);
    status_t setStreamingRequest(const CameraMetadata &request);

    /**
     * Clear the streaming request slot.
     */
    status_t clearStreamingRequest();

    /**
     * Create an output stream of the requested size and format.
@@ -92,8 +98,7 @@ class Camera2Device : public virtual RefBase {
     * Create a metadata buffer with fields that the HAL device believes are
     * best for the given use case
     */
    status_t createDefaultRequest(int templateId,
            camera_metadata_t **request);
    status_t createDefaultRequest(int templateId, CameraMetadata *request);

    /**
     * Wait until all requests have been processed. Returns INVALID_OPERATION if
@@ -142,7 +147,7 @@ class Camera2Device : public virtual RefBase {
     * Get next metadata frame from the frame queue. Returns NULL if the queue
     * is empty; caller takes ownership of the metadata buffer.
     */
    status_t getNextFrame(camera_metadata_t **frame);
    status_t getNextFrame(CameraMetadata *frame);

    /**
     * Trigger auto-focus. The latest ID used in a trigger autofocus or cancel
@@ -170,7 +175,7 @@ class Camera2Device : public virtual RefBase {
    const int mId;
    camera2_device_t *mDevice;

    camera_metadata_t *mDeviceInfo;
    CameraMetadata mDeviceInfo;
    vendor_tag_query_ops_t *mVendorTagOps;

    /**
Loading