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

Commit 7ad1b46d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: Add support for HEIC(/R) HAL advertising" into main

parents 5e48da49 f89a1d52
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -1184,7 +1184,8 @@ binder::Status CameraDeviceClient::createStream(
        bool isDepthCompositeStream =
                camera3::DepthCompositeStream::isDepthCompositeStream(surfaceHolders[0].mSurface);
        bool isHeicCompositeStream = camera3::HeicCompositeStream::isHeicCompositeStream(
                surfaceHolders[0].mSurface);
                surfaceHolders[0].mSurface, mDevice->isCompositeHeicDisabled(),
                mDevice->isCompositeHeicUltraHDRDisabled());
        bool isJpegRCompositeStream =
            camera3::JpegRCompositeStream::isJpegRCompositeStream(surfaceHolders[0].mSurface) &&
            !mDevice->isCompositeJpegRDisabled();
@@ -2173,7 +2174,9 @@ binder::Status CameraDeviceClient::switchToOffline(
            sp<Surface> s = new Surface(surface, false /*controlledByApp*/);
#endif
            isCompositeStream = camera3::DepthCompositeStream::isDepthCompositeStream(s) ||
                                camera3::HeicCompositeStream::isHeicCompositeStream(s) ||
                                camera3::HeicCompositeStream::isHeicCompositeStream(
                                        s, mDevice->isCompositeHeicDisabled(),
                                        mDevice->isCompositeHeicUltraHDRDisabled()) ||
                                (camera3::JpegRCompositeStream::isJpegRCompositeStream(s) &&
                                 !mDevice->isCompositeJpegRDisabled());
            if (isCompositeStream) {
+15 −7
Original line number Diff line number Diff line
@@ -122,13 +122,19 @@ HeicCompositeStream::~HeicCompositeStream() {
    mMainImageSurface.clear();
}

bool HeicCompositeStream::isHeicCompositeStreamInfo(const OutputStreamInfo& streamInfo) {
    return ((streamInfo.dataSpace == static_cast<android_dataspace_t>(HAL_DATASPACE_HEIF) ||
                (streamInfo.dataSpace == static_cast<android_dataspace_t>(kUltraHDRDataSpace))) &&
bool HeicCompositeStream::isHeicCompositeStreamInfo(const OutputStreamInfo& streamInfo,
                                                    bool isCompositeHeicDisabled,
                                                    bool isCompositeHeicUltraHDRDisabled) {
    return (((streamInfo.dataSpace == static_cast<android_dataspace_t>(HAL_DATASPACE_HEIF) &&
              !isCompositeHeicDisabled) ||
             (streamInfo.dataSpace == static_cast<android_dataspace_t>(kUltraHDRDataSpace) &&
              !isCompositeHeicUltraHDRDisabled)) &&
            (streamInfo.format == HAL_PIXEL_FORMAT_BLOB));
}

bool HeicCompositeStream::isHeicCompositeStream(const sp<Surface> &surface) {
bool HeicCompositeStream::isHeicCompositeStream(const sp<Surface>& surface,
                                                bool isCompositeHeicDisabled,
                                                bool isCompositeHeicUltraHDRDisabled) {
    ANativeWindow* anw = surface.get();
    status_t err;
    int format;
@@ -147,8 +153,10 @@ bool HeicCompositeStream::isHeicCompositeStream(const sp<Surface> &surface) {
        return false;
    }

    return ((format == HAL_PIXEL_FORMAT_BLOB) && ((dataspace == HAL_DATASPACE_HEIF) ||
                (dataspace == static_cast<int>(kUltraHDRDataSpace))));
    return ((format == HAL_PIXEL_FORMAT_BLOB) &&
            ((dataspace == HAL_DATASPACE_HEIF && !isCompositeHeicDisabled) ||
             (dataspace == static_cast<int>(kUltraHDRDataSpace) &&
              !isCompositeHeicUltraHDRDisabled)));
}

status_t HeicCompositeStream::createInternalStreams(const std::vector<SurfaceHolder>& consumers,
+5 −2
Original line number Diff line number Diff line
@@ -45,8 +45,11 @@ public:
            wp<hardware::camera2::ICameraDeviceCallbacks> cb);
    ~HeicCompositeStream() override;

    static bool isHeicCompositeStream(const sp<Surface> &surface);
    static bool isHeicCompositeStreamInfo(const OutputStreamInfo& streamInfo);
    static bool isHeicCompositeStream(const sp<Surface>& surface, bool isCompositeHeicDisabled,
                                      bool isCompositeHeicUltraHDRDisabled);
    static bool isHeicCompositeStreamInfo(const OutputStreamInfo& streamInfo,
                                          bool isCompositeHeicDisabled,
                                          bool isCompositeHeicUltraHDRDisabled);

    status_t createInternalStreams(const std::vector<SurfaceHolder>& consumers,
            bool hasDeferredConsumer, uint32_t width, uint32_t height, int format,
+2 −0
Original line number Diff line number Diff line
@@ -110,6 +110,8 @@ class CameraDeviceBase : public virtual FrameProducer {
    virtual const CameraMetadata& infoPhysical(const std::string& physicalId) const = 0;

    virtual bool isCompositeJpegRDisabled() const { return false; };
    virtual bool isCompositeHeicDisabled() const { return false; }
    virtual bool isCompositeHeicUltraHDRDisabled() const { return false; }

    struct PhysicalCameraSettings {
        std::string cameraId;
+28 −0
Original line number Diff line number Diff line
@@ -399,6 +399,30 @@ bool CameraProviderManager::isCompositeJpegRDisabledLocked(const std::string &id
    return deviceInfo->isCompositeJpegRDisabled();
}

bool CameraProviderManager::isCompositeHeicDisabled(const std::string &id) const {
    std::lock_guard<std::mutex> lock(mInterfaceMutex);
    return isCompositeHeicDisabledLocked(id);
}

bool CameraProviderManager::isCompositeHeicDisabledLocked(const std::string &id) const {
    auto deviceInfo = findDeviceInfoLocked(id);
    if (deviceInfo == nullptr) return false;

    return deviceInfo->isCompositeHeicDisabled();
}

bool CameraProviderManager::isCompositeHeicUltraHDRDisabled(const std::string &id) const {
    std::lock_guard<std::mutex> lock(mInterfaceMutex);
    return isCompositeHeicUltraHDRDisabledLocked(id);
}

bool CameraProviderManager::isCompositeHeicUltraHDRDisabledLocked(const std::string &id) const {
    auto deviceInfo = findDeviceInfoLocked(id);
    if (deviceInfo == nullptr) return false;

    return deviceInfo->isCompositeHeicUltraHDRDisabled();
}

status_t CameraProviderManager::getResourceCost(const std::string &id,
        CameraResourceCost* cost) const {
    std::lock_guard<std::mutex> lock(mInterfaceMutex);
@@ -2256,6 +2280,10 @@ status_t CameraProviderManager::ProviderInfo::DeviceInfo3::fillHeicStreamCombina
}

status_t CameraProviderManager::ProviderInfo::DeviceInfo3::deriveHeicTags(bool maxResolution) {
    if (mCompositeHeicDisabled) {
        return OK;
    }

    int32_t scalerStreamSizesTag =
            SessionConfigurationUtils::getAppropriateModeTag(
                    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, maxResolution);
Loading