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

Commit c15a1cab authored by Yin-Chia Yeh's avatar Yin-Chia Yeh
Browse files

Camera: more external camera CTS fix

Also update default external camera config to prevent
over promising peformance on lower end devices.

Test: API2 CTS tests except RecordingTest
Bug: 72261744
Change-Id: I20310606520099abf0f5173690f4aaf56a3e52a9
parent 8b699aaf
Loading
Loading
Loading
Loading
+2 −14
Original line number Diff line number Diff line
@@ -284,13 +284,6 @@ status_t ExternalCameraDevice::initDefaultCharsKeys(
    const int32_t jpegMaxSize = mCfg.maxJpegBufSize;
    UPDATE(ANDROID_JPEG_MAX_SIZE, &jpegMaxSize, 1);

    const uint8_t jpegQuality = 90;
    UPDATE(ANDROID_JPEG_QUALITY, &jpegQuality, 1);
    UPDATE(ANDROID_JPEG_THUMBNAIL_QUALITY, &jpegQuality, 1);

    const int32_t jpegOrientation = 0;
    UPDATE(ANDROID_JPEG_ORIENTATION, &jpegOrientation, 1);

    // android.lens
    const uint8_t focusDistanceCalibration =
            ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED;
@@ -322,7 +315,6 @@ status_t ExternalCameraDevice::initDefaultCharsKeys(
    // This means pipeline latency of X frame intervals. The maximum number is 4.
    const uint8_t requestPipelineMaxDepth = 4;
    UPDATE(ANDROID_REQUEST_PIPELINE_MAX_DEPTH, &requestPipelineMaxDepth, 1);
    UPDATE(ANDROID_REQUEST_PIPELINE_DEPTH, &requestPipelineMaxDepth, 1);

    // Three numbers represent the maximum numbers of different types of output
    // streams simultaneously. The types are raw sensor, processed (but not
@@ -355,7 +347,6 @@ status_t ExternalCameraDevice::initDefaultCharsKeys(
        ANDROID_SENSOR_TEST_PATTERN_MODE_OFF};
    UPDATE(ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES, testPatternModes,
           ARRAY_SIZE(testPatternModes));
    UPDATE(ANDROID_SENSOR_TEST_PATTERN_MODE, &testPatternModes[0], 1);

    const uint8_t timestampSource = ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN;
    UPDATE(ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE, &timestampSource, 1);
@@ -576,7 +567,6 @@ status_t ExternalCameraDevice::initOutputCharsKeys(int fd,
    std::vector<int32_t> streamConfigurations;
    std::vector<int64_t> minFrameDurations;
    std::vector<int64_t> stallDurations;
    int64_t maxFrameDuration = 0;
    int32_t maxFps = std::numeric_limits<int32_t>::min();
    int32_t minFps = std::numeric_limits<int32_t>::max();
    std::set<int32_t> framerates;
@@ -604,9 +594,6 @@ status_t ExternalCameraDevice::initOutputCharsKeys(int fd,
            if (frameDuration < minFrameDuration) {
                minFrameDuration = frameDuration;
            }
            if (frameDuration > maxFrameDuration) {
                maxFrameDuration = frameDuration;
            }
            int32_t frameRateInt = static_cast<int32_t>(fr.getDouble());
            if (minFps > frameRateInt) {
                minFps = frameRateInt;
@@ -645,7 +632,8 @@ status_t ExternalCameraDevice::initOutputCharsKeys(int fd,
        fpsRanges.push_back(framerate / 2);
        fpsRanges.push_back(framerate);
    }
    maxFrameDuration *= 2;
    minFps /= 2;
    int64_t maxFrameDuration = 1000000000LL / minFps;

    UPDATE(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, fpsRanges.data(),
           fpsRanges.size());
+9 −1
Original line number Diff line number Diff line
@@ -2422,6 +2422,7 @@ Status ExternalCameraDeviceSession::configureStreams(
    uint32_t maxDim = 0;
    for (const auto& stream : config.streams) {
        float aspectRatio = ASPECT_RATIO(stream);
        ALOGI("%s: request stream %dx%d", __FUNCTION__, stream.width, stream.height);
        if ((mCroppingType == VERTICAL && aspectRatio < desiredAr) ||
                (mCroppingType == HORIZONTAL && aspectRatio > desiredAr)) {
            desiredAr = aspectRatio;
@@ -2606,6 +2607,9 @@ status_t ExternalCameraDeviceSession::initDefaultRequests() {
    const uint8_t nrMode = ANDROID_NOISE_REDUCTION_MODE_OFF;
    UPDATE(md, ANDROID_NOISE_REDUCTION_MODE, &nrMode, 1);

    const int32_t testPatternModes = ANDROID_SENSOR_TEST_PATTERN_MODE_OFF;
    UPDATE(md, ANDROID_SENSOR_TEST_PATTERN_MODE, &testPatternModes, 1);

    const uint8_t fdMode = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;
    UPDATE(md, ANDROID_STATISTICS_FACE_DETECT_MODE, &fdMode, 1);

@@ -2630,7 +2634,7 @@ status_t ExternalCameraDeviceSession::initDefaultRequests() {
        }
    }
    int32_t defaultFramerate = support30Fps ? 30 : maxFps;
    int32_t defaultFpsRange[] = {defaultFramerate, defaultFramerate};
    int32_t defaultFpsRange[] = {defaultFramerate / 2, defaultFramerate};
    UPDATE(md, ANDROID_CONTROL_AE_TARGET_FPS_RANGE, defaultFpsRange, ARRAY_SIZE(defaultFpsRange));

    uint8_t antibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO;
@@ -2725,6 +2729,10 @@ status_t ExternalCameraDeviceSession::fillCaptureResult(
    const uint8_t flashState = ANDROID_FLASH_STATE_UNAVAILABLE;
    UPDATE(md, ANDROID_FLASH_STATE, &flashState, 1);

    // This means pipeline latency of X frame intervals. The maximum number is 4.
    const uint8_t requestPipelineMaxDepth = 4;
    UPDATE(md, ANDROID_REQUEST_PIPELINE_DEPTH, &requestPipelineMaxDepth, 1);

    // android.scaler
    const int32_t crop_region[] = {
          active_array_size.data.i32[0], active_array_size.data.i32[1],
+2 −3
Original line number Diff line number Diff line
@@ -283,9 +283,8 @@ ExternalCameraConfig::ExternalCameraConfig() :
        numVideoBuffers(kDefaultNumVideoBuffer),
        numStillBuffers(kDefaultNumStillBuffer) {
    fpsLimits.push_back({/*Size*/{ 640,  480}, /*FPS upper bound*/30.0});
    fpsLimits.push_back({/*Size*/{1280,  720}, /*FPS upper bound*/15.0});
    fpsLimits.push_back({/*Size*/{1920, 1080}, /*FPS upper bound*/10.0});
    fpsLimits.push_back({/*Size*/{4096, 3072}, /*FPS upper bound*/5.0});
    fpsLimits.push_back({/*Size*/{1280,  720}, /*FPS upper bound*/7.5});
    fpsLimits.push_back({/*Size*/{1920, 1080}, /*FPS upper bound*/5.0});
}