diff options
author | Yin-Chia Yeh <yinchiayeh@google.com> | 2017-09-20 23:35:31 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-09-20 23:35:31 +0000 |
commit | 64af5e9b1a78d981de454f8f9ef538cf0b20b347 (patch) | |
tree | ddcc5c32881ad44f43dfd43b10086d2cc6a668d5 | |
parent | 888f6a069c001b9cfe10d3625e6b7c45120f5f18 (diff) | |
parent | c7b986758b2dfc426c0a5babf9bfadf49ac41c93 (diff) | |
download | angler-64af5e9b1a78d981de454f8f9ef538cf0b20b347.tar.gz |
Merge "Camera: fix LSB 2 bits fetching bug" into oc-mr1-dev
am: c7b986758b
Change-Id: I355965fe2749c6c8066aa471a1bef48d6bda1cbc
-rw-r--r-- | camera/QCamera2/HAL3/QCamera3Channel.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/camera/QCamera2/HAL3/QCamera3Channel.cpp b/camera/QCamera2/HAL3/QCamera3Channel.cpp index cb31953..bfeb46a 100644 --- a/camera/QCamera2/HAL3/QCamera3Channel.cpp +++ b/camera/QCamera2/HAL3/QCamera3Channel.cpp @@ -1974,6 +1974,8 @@ void QCamera3RawChannel::convertMipiToRaw16(mm_camera_buf_def_t *frame) uint32_t raw16_stride = ((uint32_t)dim.width + 15U) & ~15U; uint16_t* raw16_buffer = (uint16_t *)frame->buffer; + uint8_t first_quintuple[5]; + memcpy(first_quintuple, raw16_buffer, sizeof(first_quintuple)); // Some raw processing may be needed prior to conversion. static bool raw_proc_lib_load_attempted = false; @@ -2007,13 +2009,19 @@ void QCamera3RawChannel::convertMipiToRaw16(mm_camera_buf_def_t *frame) for (int32_t xs = dim.width - 1; xs >= 0; xs--) { uint32_t x = (uint32_t)xs; uint8_t upper_8bit = row_start[5*(x/4)+x%4]; - uint8_t lower_2bit = ((row_start[5*(x/4)+4] >> (x%4)) & 0x3); + uint8_t lower_2bit = ((row_start[5*(x/4)+4] >> ((x%4) << 1)) & 0x3); uint16_t raw16_pixel = (uint16_t)(((uint16_t)upper_8bit)<<2 | (uint16_t)lower_2bit); raw16_buffer[y*raw16_stride+x] = raw16_pixel; } } + + // Re-convert the first 2 pixels of the buffer because the loop above messes + // them up by reading the first quintuple while modifying it. + raw16_buffer[0] = ((uint16_t)first_quintuple[0]<<2) | (first_quintuple[4] & 0x3); + raw16_buffer[1] = ((uint16_t)first_quintuple[1]<<2) | ((first_quintuple[4] >> 2) & 0x3); + } else { ALOGE("%s: Could not find stream", __func__); } |