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

Commit 2540a387 authored by Jason Macnak's avatar Jason Macnak Committed by Android (Google) Code Review
Browse files

Merge "Implement lockYCbCr stub for Mapper 4.0" into rvc-dev

parents 6d9c2001 eda6dca4
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -8,7 +8,7 @@ cc_library_static {
        "CameraParameters.cpp",
        "CameraParameters.cpp",
        "VendorTagDescriptor.cpp",
        "VendorTagDescriptor.cpp",
        "HandleImporter.cpp",
        "HandleImporter.cpp",
        "Exif.cpp"
        "Exif.cpp",
    ],
    ],
    cflags: [
    cflags: [
        "-Werror",
        "-Werror",
@@ -17,6 +17,7 @@ cc_library_static {
    ],
    ],
    shared_libs: [
    shared_libs: [
        "liblog",
        "liblog",
        "libgralloctypes",
        "libhardware",
        "libhardware",
        "libcamera_metadata",
        "libcamera_metadata",
        "android.hardware.graphics.mapper@2.0",
        "android.hardware.graphics.mapper@2.0",
@@ -25,6 +26,5 @@ cc_library_static {
        "libexif",
        "libexif",
    ],
    ],
    include_dirs: ["system/media/private/camera/include"],
    include_dirs: ["system/media/private/camera/include"],
    export_include_dirs : ["include"]
    export_include_dirs: ["include"],
}
}
+79 −7
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


#define LOG_TAG "HandleImporter"
#define LOG_TAG "HandleImporter"
#include "HandleImporter.h"
#include "HandleImporter.h"

#include <gralloctypes/Gralloc4.h>
#include <log/log.h>
#include <log/log.h>


namespace android {
namespace android {
@@ -25,6 +27,9 @@ namespace common {
namespace V1_0 {
namespace V1_0 {
namespace helper {
namespace helper {


using aidl::android::hardware::graphics::common::PlaneLayout;
using aidl::android::hardware::graphics::common::PlaneLayoutComponent;
using aidl::android::hardware::graphics::common::PlaneLayoutComponentType;
using MapperErrorV2 = android::hardware::graphics::mapper::V2_0::Error;
using MapperErrorV2 = android::hardware::graphics::mapper::V2_0::Error;
using MapperErrorV3 = android::hardware::graphics::mapper::V3_0::Error;
using MapperErrorV3 = android::hardware::graphics::mapper::V3_0::Error;
using MapperErrorV4 = android::hardware::graphics::mapper::V4_0::Error;
using MapperErrorV4 = android::hardware::graphics::mapper::V4_0::Error;
@@ -118,6 +123,79 @@ YCbCrLayout HandleImporter::lockYCbCrInternal(const sp<M> mapper, buffer_handle_
    return layout;
    return layout;
}
}


template <>
YCbCrLayout HandleImporter::lockYCbCrInternal<IMapperV4, MapperErrorV4>(
        const sp<IMapperV4> mapper, buffer_handle_t& buf, uint64_t cpuUsage,
        const IMapper::Rect& accessRegion) {
    hidl_handle acquireFenceHandle;
    auto buffer = const_cast<native_handle_t*>(buf);
    YCbCrLayout layout = {};
    void* mapped = nullptr;

    typename IMapperV4::Rect accessRegionV4 = {accessRegion.left, accessRegion.top,
                                               accessRegion.width, accessRegion.height};
    mapper->lock(buffer, cpuUsage, accessRegionV4, acquireFenceHandle,
                 [&](const auto& tmpError, const auto& tmpPtr) {
                     if (tmpError == MapperErrorV4::NONE) {
                         mapped = tmpPtr;
                     } else {
                         ALOGE("%s: failed to lock error %d!", __FUNCTION__, tmpError);
                     }
                 });

    if (mapped == nullptr) {
        return layout;
    }

    hidl_vec<uint8_t> encodedPlaneLayouts;
    mapper->get(buffer, gralloc4::MetadataType_PlaneLayouts,
                [&](const auto& tmpError, const auto& tmpEncodedPlaneLayouts) {
                    if (tmpError == MapperErrorV4::NONE) {
                        encodedPlaneLayouts = tmpEncodedPlaneLayouts;
                    } else {
                        ALOGE("%s: failed to get plane layouts %d!", __FUNCTION__, tmpError);
                    }
                });

    std::vector<PlaneLayout> planeLayouts;
    gralloc4::decodePlaneLayouts(encodedPlaneLayouts, &planeLayouts);

    for (const auto& planeLayout : planeLayouts) {
        for (const auto& planeLayoutComponent : planeLayout.components) {
            const auto& type = planeLayoutComponent.type;

            if (!gralloc4::isStandardPlaneLayoutComponentType(type)) {
                continue;
            }

            uint8_t* data = reinterpret_cast<uint8_t*>(mapped);
            data += planeLayout.offsetInBytes;
            data += planeLayoutComponent.offsetInBits / 8;

            switch (static_cast<PlaneLayoutComponentType>(type.value)) {
                case PlaneLayoutComponentType::Y:
                    layout.y = data;
                    layout.yStride = planeLayout.strideInBytes;
                    break;
                case PlaneLayoutComponentType::CB:
                    layout.cb = data;
                    layout.cStride = planeLayout.strideInBytes;
                    layout.chromaStep = planeLayout.sampleIncrementInBits / 8;
                    break;
                case PlaneLayoutComponentType::CR:
                    layout.cr = data;
                    layout.cStride = planeLayout.strideInBytes;
                    layout.chromaStep = planeLayout.sampleIncrementInBits / 8;
                    break;
                default:
                    break;
            }
        }
    }

    return layout;
}

template<class M, class E>
template<class M, class E>
int HandleImporter::unlockInternal(const sp<M> mapper, buffer_handle_t& buf) {
int HandleImporter::unlockInternal(const sp<M> mapper, buffer_handle_t& buf) {
    int releaseFence = -1;
    int releaseFence = -1;
@@ -306,13 +384,7 @@ YCbCrLayout HandleImporter::lockYCbCr(
    }
    }


    if (mMapperV4 != nullptr) {
    if (mMapperV4 != nullptr) {
        // No device currently supports IMapper 4.0 so it is safe to just return an error code here.
        return lockYCbCrInternal<IMapperV4, MapperErrorV4>(mMapperV4, buf, cpuUsage, accessRegion);
        //
        // This will be supported by a combination of lock and BufferMetadata getters. We are going
        // to refactor all the IAllocator/IMapper versioning code into a shared library. We will
        // then add the IMapper 4.0 lockYCbCr support then.
        ALOGE("%s: MapperV4 doesn't support lockYCbCr directly!", __FUNCTION__);
        return {};
    }
    }


    if (mMapperV3 != nullptr) {
    if (mMapperV3 != nullptr) {
+3 −3
Original line number Original line Diff line number Diff line
@@ -20,15 +20,15 @@ cc_library_shared {
        "android.hidl.memory@1.0",
        "android.hidl.memory@1.0",
        "libcutils",
        "libcutils",
        "liblog",
        "liblog",
        "libgralloctypes",
        "libhardware",
        "libhardware",
        "libcamera_metadata",
        "libcamera_metadata",
    ],
    ],
    static_libs: [
    static_libs: [
        "android.hardware.camera.common@1.0-helper"
        "android.hardware.camera.common@1.0-helper",
    ],
    ],
    header_libs: [
    header_libs: [
        "media_plugin_headers",
        "media_plugin_headers",
    ],
    ],
    export_include_dirs: ["."]
    export_include_dirs: ["."],
}
}
+9 −6
Original line number Original line Diff line number Diff line
@@ -2,9 +2,11 @@ cc_library_shared {
    name: "camera.device@3.2-impl",
    name: "camera.device@3.2-impl",
    defaults: ["hidl_defaults"],
    defaults: ["hidl_defaults"],
    proprietary: true,
    proprietary: true,
    srcs: ["CameraDevice.cpp",
    srcs: [
        "CameraDevice.cpp",
        "CameraDeviceSession.cpp",
        "CameraDeviceSession.cpp",
           "convert.cpp"],
        "convert.cpp",
    ],
    shared_libs: [
    shared_libs: [
        "libhidlbase",
        "libhidlbase",
        "libutils",
        "libutils",
@@ -15,15 +17,16 @@ cc_library_shared {
        "android.hardware.graphics.mapper@3.0",
        "android.hardware.graphics.mapper@3.0",
        "android.hardware.graphics.mapper@4.0",
        "android.hardware.graphics.mapper@4.0",
        "liblog",
        "liblog",
        "libgralloctypes",
        "libhardware",
        "libhardware",
        "libcamera_metadata",
        "libcamera_metadata",
        "libfmq"
        "libfmq",
    ],
    ],
    static_libs: [
    static_libs: [
        "android.hardware.camera.common@1.0-helper"
        "android.hardware.camera.common@1.0-helper",
    ],
    ],
    export_include_dirs: ["."],
    export_include_dirs: ["."],
    export_shared_lib_headers: [
    export_shared_lib_headers: [
        "libfmq",
        "libfmq",
    ]
    ],
}
}
+9 −6
Original line number Original line Diff line number Diff line
@@ -2,9 +2,11 @@ cc_library_shared {
    name: "camera.device@3.3-impl",
    name: "camera.device@3.3-impl",
    defaults: ["hidl_defaults"],
    defaults: ["hidl_defaults"],
    proprietary: true,
    proprietary: true,
    srcs: ["CameraDevice.cpp",
    srcs: [
        "CameraDevice.cpp",
        "CameraDeviceSession.cpp",
        "CameraDeviceSession.cpp",
           "convert.cpp"],
        "convert.cpp",
    ],
    shared_libs: [
    shared_libs: [
        "libhidlbase",
        "libhidlbase",
        "libutils",
        "libutils",
@@ -17,15 +19,16 @@ cc_library_shared {
        "android.hardware.graphics.mapper@3.0",
        "android.hardware.graphics.mapper@3.0",
        "android.hardware.graphics.mapper@4.0",
        "android.hardware.graphics.mapper@4.0",
        "liblog",
        "liblog",
        "libgralloctypes",
        "libhardware",
        "libhardware",
        "libcamera_metadata",
        "libcamera_metadata",
        "libfmq"
        "libfmq",
    ],
    ],
    static_libs: [
    static_libs: [
        "android.hardware.camera.common@1.0-helper"
        "android.hardware.camera.common@1.0-helper",
    ],
    ],
    export_include_dirs: ["."],
    export_include_dirs: ["."],
    export_shared_lib_headers: [
    export_shared_lib_headers: [
        "libfmq",
        "libfmq",
    ]
    ],
}
}
Loading