X-Git-Url: https://git.stricted.de/?a=blobdiff_plain;f=libcamera2%2FExynosCamera2.cpp;h=e06f670604f6f193b25348ccd70c2f6f155420a0;hb=51b23c00d35914f027cfca24e449d5c1d76a5047;hp=b38d619b49874f46113a9cd380ef21da641b3b87;hpb=d7e1d2f12ea68a0e4d2e24ddb647e60288ad9b0d;p=GitHub%2FLineageOS%2Fandroid_hardware_samsung_slsi_exynos5.git diff --git a/libcamera2/ExynosCamera2.cpp b/libcamera2/ExynosCamera2.cpp index b38d619..e06f670 100644 --- a/libcamera2/ExynosCamera2.cpp +++ b/libcamera2/ExynosCamera2.cpp @@ -38,6 +38,21 @@ namespace android { +int32_t SUPPORT_THUMBNAIL_REAR_SIZE[3][2] = +{ + {160, 120}, + {160, 90}, + {144, 96} +}; + +int32_t SUPPORT_THUMBNAIL_FRONT_SIZE[4][2] = +{ + {160, 120}, + {160, 160}, + {160, 90}, + {144, 96} +}; + class Sensor { public: /** @@ -90,7 +105,7 @@ const nsecs_t Sensor::kFrameDurationRange[2] = const uint8_t Sensor::kColorFilterArrangement = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB; const uint32_t kAvailableFormats[5] = { - HAL_PIXEL_FORMAT_RAW_SENSOR, + HAL_PIXEL_FORMAT_RAW16, HAL_PIXEL_FORMAT_BLOB, HAL_PIXEL_FORMAT_RGBA_8888, HAL_PIXEL_FORMAT_YV12, @@ -425,6 +440,11 @@ status_t ExynosCamera2::constructStaticInfo(camera_metadata_t **info, ANDROID_LENS_FACING_FRONT : ANDROID_LENS_FACING_BACK; ADD_OR_SIZE(ANDROID_LENS_FACING, &lensFacing, 1); + // android.request + static const int32_t maxNumOutputStreams[] = {1, 3, 1}; + ADD_OR_SIZE(ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS, maxNumOutputStreams, + sizeof(maxNumOutputStreams)/sizeof(int32_t)); + // android.sensor ADD_OR_SIZE(ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE, Sensor::kExposureTimeRange, 2); @@ -449,7 +469,9 @@ status_t ExynosCamera2::constructStaticInfo(camera_metadata_t **info, m_curCameraInfo->sensorW, m_curCameraInfo->sensorH }; ADD_OR_SIZE(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE, pixelArraySize, 2); - ADD_OR_SIZE(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE, pixelArraySize,2); + + int32_t activeArraySize[4] = { 0, 0, pixelArraySize[0], pixelArraySize[1]}; + ADD_OR_SIZE(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE, activeArraySize,4); ADD_OR_SIZE(ANDROID_SENSOR_INFO_WHITE_LEVEL, &Sensor::kMaxRawValue, 1); @@ -461,6 +483,10 @@ status_t ExynosCamera2::constructStaticInfo(camera_metadata_t **info, ADD_OR_SIZE(ANDROID_SENSOR_BLACK_LEVEL_PATTERN, blackLevelPattern, sizeof(blackLevelPattern)/sizeof(int32_t)); + static const int32_t orientation[1] = {0}; + ADD_OR_SIZE(ANDROID_SENSOR_ORIENTATION, + orientation, 1); + //TODO: sensor color calibration fields // android.flash @@ -516,13 +542,23 @@ status_t ExynosCamera2::constructStaticInfo(camera_metadata_t **info, // android.jpeg - static const int32_t jpegThumbnailSizes[] = { - 160, 120, - 160, 160, - 160, 90, - 144, 96, - 0, 0 - }; + size_t sizeOfThumbnailList = (cameraId) ? sizeof(SUPPORT_THUMBNAIL_FRONT_SIZE) / + sizeof(int32_t) : sizeof(SUPPORT_THUMBNAIL_REAR_SIZE) / sizeof(int32_t); + + // Copy sizes from front or back camera + int32_t jpegThumbnailSizes[sizeOfThumbnailList + 2]; + + if (cameraId) { + memcpy(jpegThumbnailSizes, SUPPORT_THUMBNAIL_FRONT_SIZE, + sizeof(int32_t) * sizeOfThumbnailList); + } else { + memcpy(jpegThumbnailSizes, SUPPORT_THUMBNAIL_REAR_SIZE, + sizeof(int32_t) * sizeOfThumbnailList); + } + + // Always include 0,0 size in list + jpegThumbnailSizes[sizeOfThumbnailList] = 0; + jpegThumbnailSizes[sizeOfThumbnailList + 1] = 0; ADD_OR_SIZE(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, jpegThumbnailSizes, sizeof(jpegThumbnailSizes)/sizeof(int32_t)); @@ -577,9 +613,9 @@ status_t ExynosCamera2::constructStaticInfo(camera_metadata_t **info, ADD_OR_SIZE(ANDROID_CONTROL_AVAILABLE_EFFECTS, availableEffects, sizeof(availableEffects)); - int32_t max3aRegions = 1; + static const int32_t max3aRegions[] = {/*AE*/ 1,/*AWB*/ 1,/*AF*/ 1}; ADD_OR_SIZE(ANDROID_CONTROL_MAX_REGIONS, - &max3aRegions, 1); + max3aRegions, sizeof(max3aRegions)/sizeof(max3aRegions[0])); ADD_OR_SIZE(ANDROID_CONTROL_AE_AVAILABLE_MODES, m_curCameraInfo->availableAeModes, m_curCameraInfo->numAvailableAeModes); @@ -715,6 +751,8 @@ status_t ExynosCamera2::constructDefaultRequest( /** android.sensor */ + static const int64_t defaultExposureTime = 8000000LL; // 1/125 s + ADD_OR_SIZE(ANDROID_SENSOR_EXPOSURE_TIME, &defaultExposureTime, 1); static const int64_t frameDuration = 33333333L; // 1/30 s ADD_OR_SIZE(ANDROID_SENSOR_FRAME_DURATION, &frameDuration, 1); @@ -736,7 +774,6 @@ status_t ExynosCamera2::constructDefaultRequest( uint8_t demosaicMode = 0; uint8_t noiseMode = 0; uint8_t shadingMode = 0; - uint8_t geometricMode = 0; uint8_t colorMode = 0; uint8_t tonemapMode = 0; uint8_t edgeMode = 0; @@ -753,7 +790,6 @@ status_t ExynosCamera2::constructDefaultRequest( demosaicMode = ANDROID_DEMOSAIC_MODE_HIGH_QUALITY; noiseMode = ANDROID_NOISE_REDUCTION_MODE_HIGH_QUALITY; shadingMode = ANDROID_SHADING_MODE_HIGH_QUALITY; - geometricMode = ANDROID_GEOMETRIC_MODE_HIGH_QUALITY; colorMode = ANDROID_COLOR_CORRECTION_MODE_HIGH_QUALITY; tonemapMode = ANDROID_TONEMAP_MODE_HIGH_QUALITY; edgeMode = ANDROID_EDGE_MODE_HIGH_QUALITY; @@ -768,7 +804,6 @@ status_t ExynosCamera2::constructDefaultRequest( demosaicMode = ANDROID_DEMOSAIC_MODE_FAST; noiseMode = ANDROID_NOISE_REDUCTION_MODE_FAST; shadingMode = ANDROID_SHADING_MODE_FAST; - geometricMode = ANDROID_GEOMETRIC_MODE_FAST; colorMode = ANDROID_COLOR_CORRECTION_MODE_FAST; tonemapMode = ANDROID_TONEMAP_MODE_FAST; edgeMode = ANDROID_EDGE_MODE_FAST; @@ -778,7 +813,6 @@ status_t ExynosCamera2::constructDefaultRequest( ADD_OR_SIZE(ANDROID_DEMOSAIC_MODE, &demosaicMode, 1); ADD_OR_SIZE(ANDROID_NOISE_REDUCTION_MODE, &noiseMode, 1); ADD_OR_SIZE(ANDROID_SHADING_MODE, &shadingMode, 1); - ADD_OR_SIZE(ANDROID_GEOMETRIC_MODE, &geometricMode, 1); ADD_OR_SIZE(ANDROID_COLOR_CORRECTION_MODE, &colorMode, 1); ADD_OR_SIZE(ANDROID_TONEMAP_MODE, &tonemapMode, 1); ADD_OR_SIZE(ANDROID_EDGE_MODE, &edgeMode, 1); @@ -884,7 +918,7 @@ status_t ExynosCamera2::constructDefaultRequest( static const uint8_t effectMode = ANDROID_CONTROL_EFFECT_MODE_OFF; ADD_OR_SIZE(ANDROID_CONTROL_EFFECT_MODE, &effectMode, 1); - static const uint8_t sceneMode = ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED; + static const uint8_t sceneMode = ANDROID_CONTROL_SCENE_MODE_DISABLED; ADD_OR_SIZE(ANDROID_CONTROL_SCENE_MODE, &sceneMode, 1); static const uint8_t aeMode = ANDROID_CONTROL_AE_MODE_ON;