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

Commit 5f768c05 authored by Emilian Peev's avatar Emilian Peev
Browse files

Camera: Filter out unaligned HEIF gainmap resolutions

HEIF/HEIC encoding can utilize CPU specific copy optimizations
that have specific row alignment requirements.
Filter out any gainmap sizes that can potentially trigger
unaligned or invalid memory access.

Flag: EXEMPT bugfix
Bug: 376155468
Test: atest -c -d cts/tests/camera/src/android/hardware/camera2/cts/ImageReaderTest.java#testHeicUltraHdr

Change-Id: Ic7d132fb81797d66af8ff429ea2176e4fa5a6548
parent 7a299085
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -1311,8 +1311,12 @@ status_t CameraProviderManager::ProviderInfo::DeviceInfo3::deriveHeicUltraHDRTag
        int32_t height = std::get<1>(it);
        int32_t gainmapWidth = std::get<0>(it) / HeicCompositeStream::kGainmapScale;
        int32_t gainmapHeight = std::get<1>(it) / HeicCompositeStream::kGainmapScale;
        if (camera3::HeicCompositeStream::isSizeSupportedByHeifEncoder(width, height,
                &useHeic, &useGrid, &stall, nullptr /*hevcName*/, kFrameworkHeicAllowSWCodecs) &&
        // Support gainmap sizes that are sufficiently aligned so CPU specific copy
        // optimizations can be utilized without side effects.
        if (((gainmapWidth % 64) == 0) && ((gainmapHeight % 2) == 0) &&
                camera3::HeicCompositeStream::isSizeSupportedByHeifEncoder(width, height,
                    &useHeic, &useGrid, &stall, nullptr /*hevcName*/,
                    kFrameworkHeicAllowSWCodecs) &&
                camera3::HeicCompositeStream::isSizeSupportedByHeifEncoder(gainmapWidth,
                    gainmapHeight, &useHeic, &useGrid, &stall, nullptr /*hevcName*/,
                    kFrameworkHeicAllowSWCodecs)) {