diff options
Diffstat (limited to 'services')
| -rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.cpp | 37 | ||||
| -rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.h | 1 | 
2 files changed, 31 insertions, 7 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index 3afbd89..c91517c 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -370,7 +370,7 @@ ssize_t Camera3Device::getJpegBufferSize(uint32_t width, uint32_t height) const      // Get max jpeg size (area-wise).      Size maxJpegResolution = getMaxJpegResolution();      if (maxJpegResolution.width == 0) { -        ALOGE("%s: Camera %d: Can't find find valid available jpeg sizes in static metadata!", +        ALOGE("%s: Camera %d: Can't find valid available jpeg sizes in static metadata!",                  __FUNCTION__, mId);          return BAD_VALUE;      } @@ -397,6 +397,21 @@ ssize_t Camera3Device::getJpegBufferSize(uint32_t width, uint32_t height) const      return jpegBufferSize;  } +ssize_t Camera3Device::getPointCloudBufferSize() const { +    const int FLOATS_PER_POINT=4; +    camera_metadata_ro_entry maxPointCount = mDeviceInfo.find(ANDROID_DEPTH_MAX_DEPTH_SAMPLES); +    if (maxPointCount.count == 0) { +        ALOGE("%s: Camera %d: Can't find maximum depth point cloud size in static metadata!", +                __FUNCTION__, mId); +        return BAD_VALUE; +    } +    ssize_t maxBytesForPointCloud = sizeof(android_depth_points) + +            maxPointCount.data.i32[0] * sizeof(float) * FLOATS_PER_POINT; +    return maxBytesForPointCloud; +} + + +  status_t Camera3Device::dump(int fd, const Vector<String16> &args) {      ATRACE_CALL();      (void)args; @@ -865,14 +880,22 @@ status_t Camera3Device::createStream(sp<Surface> consumer,      sp<Camera3OutputStream> newStream;      if (format == HAL_PIXEL_FORMAT_BLOB) { -        ssize_t jpegBufferSize = getJpegBufferSize(width, height); -        if (jpegBufferSize <= 0) { -            SET_ERR_L("Invalid jpeg buffer size %zd", jpegBufferSize); -            return BAD_VALUE; +        ssize_t blobBufferSize; +        if (dataSpace != HAL_DATASPACE_DEPTH) { +            blobBufferSize = getJpegBufferSize(width, height); +            if (blobBufferSize <= 0) { +                SET_ERR_L("Invalid jpeg buffer size %zd", blobBufferSize); +                return BAD_VALUE; +            } +        } else { +            blobBufferSize = getPointCloudBufferSize(); +            if (blobBufferSize <= 0) { +                SET_ERR_L("Invalid point cloud buffer size %zd", blobBufferSize); +                return BAD_VALUE; +            }          } -          newStream = new Camera3OutputStream(mNextStreamId, consumer, -                width, height, jpegBufferSize, format, dataSpace, rotation); +                width, height, blobBufferSize, format, dataSpace, rotation);      } else {          newStream = new Camera3OutputStream(mNextStreamId, consumer,                  width, height, format, dataSpace, rotation); diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h index 140da98..eea34af 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.h +++ b/services/camera/libcameraservice/device3/Camera3Device.h @@ -146,6 +146,7 @@ class Camera3Device :      virtual uint32_t getDeviceVersion();      virtual ssize_t getJpegBufferSize(uint32_t width, uint32_t height) const; +    ssize_t getPointCloudBufferSize() const;      // Methods called by subclasses      void             notifyStatus(bool idle); // updates from StatusTracker  | 
