diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2013-05-15 13:34:53 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-05-15 13:34:53 -0700 |
commit | eef0aa7a674fc250a8b3e29cdb4cf605e5e30078 (patch) | |
tree | f199d364c3acd14773ef885cd7d8caed8d4ddbc7 /services | |
parent | 03b7bddfe1326d1e3148c240ff4a14fa84270a99 (diff) | |
parent | 0d0d868f5fbd549728e9ca4dea738f4663e076c4 (diff) | |
download | frameworks_av-eef0aa7a674fc250a8b3e29cdb4cf605e5e30078.zip frameworks_av-eef0aa7a674fc250a8b3e29cdb4cf605e5e30078.tar.gz frameworks_av-eef0aa7a674fc250a8b3e29cdb4cf605e5e30078.tar.bz2 |
am 7dd801bd: Merge "Camera3: Fix fast flexible YUV->NV21 path." into jb-mr2-dev
* commit '7dd801bd108bff3e897e9e86c5f79f1ab05709d0':
Camera3: Fix fast flexible YUV->NV21 path.
Diffstat (limited to 'services')
-rw-r--r-- | services/camera/libcameraservice/camera2/CallbackProcessor.cpp | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/services/camera/libcameraservice/camera2/CallbackProcessor.cpp b/services/camera/libcameraservice/camera2/CallbackProcessor.cpp index 5e88102..5fa84e0 100644 --- a/services/camera/libcameraservice/camera2/CallbackProcessor.cpp +++ b/services/camera/libcameraservice/camera2/CallbackProcessor.cpp @@ -402,8 +402,8 @@ status_t CallbackProcessor::convertFromFlexibleYuv(int32_t previewFormat, } // Copy/swizzle chroma planes, 4:2:0 subsampling - const uint8_t *uSrc = src.dataCb; - const uint8_t *vSrc = src.dataCr; + const uint8_t *cbSrc = src.dataCb; + const uint8_t *crSrc = src.dataCr; size_t chromaHeight = src.height / 2; size_t chromaWidth = src.width / 2; ssize_t chromaGap = src.chromaStride - @@ -412,59 +412,63 @@ status_t CallbackProcessor::convertFromFlexibleYuv(int32_t previewFormat, if (previewFormat == HAL_PIXEL_FORMAT_YCrCb_420_SP) { // Flexible YUV chroma to NV21 chroma - uint8_t *vuDst = yDst; + uint8_t *crcbDst = yDst; // Check for shortcuts - if (uSrc == vSrc + 1 && src.chromaStep == 2) { + if (cbSrc == crSrc + 1 && src.chromaStep == 2) { + ALOGV("%s: Fast NV21->NV21", __FUNCTION__); // Source has semiplanar CrCb chroma layout, can copy by rows for (size_t row = 0; row < chromaHeight; row++) { - memcpy(vuDst, uSrc, src.width); - vuDst += src.width; - uSrc += src.chromaStride; + memcpy(crcbDst, crSrc, src.width); + crcbDst += src.width; + crSrc += src.chromaStride; } } else { + ALOGV("%s: Generic->NV21", __FUNCTION__); // Generic copy, always works but not very efficient for (size_t row = 0; row < chromaHeight; row++) { for (size_t col = 0; col < chromaWidth; col++) { - *(vuDst++) = *vSrc; - *(vuDst++) = *uSrc; - vSrc += src.chromaStep; - uSrc += src.chromaStep; + *(crcbDst++) = *crSrc; + *(crcbDst++) = *cbSrc; + crSrc += src.chromaStep; + cbSrc += src.chromaStep; } - vSrc += chromaGap; - uSrc += chromaGap; + crSrc += chromaGap; + cbSrc += chromaGap; } } } else { // flexible YUV chroma to YV12 chroma ALOG_ASSERT(previewFormat == HAL_PIXEL_FORMAT_YV12, "Unexpected preview format 0x%x", previewFormat); - uint8_t *vDst = yDst; - uint8_t *uDst = yDst + chromaHeight * dstCStride; + uint8_t *crDst = yDst; + uint8_t *cbDst = yDst + chromaHeight * dstCStride; if (src.chromaStep == 1) { + ALOGV("%s: Fast YV12->YV12", __FUNCTION__); // Source has planar chroma layout, can copy by row for (size_t row = 0; row < chromaHeight; row++) { - memcpy(vDst, vSrc, chromaWidth); - vDst += dstCStride; - vSrc += src.chromaStride; + memcpy(crDst, crSrc, chromaWidth); + crDst += dstCStride; + crSrc += src.chromaStride; } for (size_t row = 0; row < chromaHeight; row++) { - memcpy(uDst, uSrc, chromaWidth); - uDst += dstCStride; - uSrc += src.chromaStride; + memcpy(cbDst, cbSrc, chromaWidth); + cbDst += dstCStride; + cbSrc += src.chromaStride; } } else { + ALOGV("%s: Generic->YV12", __FUNCTION__); // Generic copy, always works but not very efficient for (size_t row = 0; row < chromaHeight; row++) { for (size_t col = 0; col < chromaWidth; col++) { - *(vDst++) = *vSrc; - *(uDst++) = *uSrc; - vSrc += src.chromaStep; - uSrc += src.chromaStep; + *(crDst++) = *crSrc; + *(cbDst++) = *cbSrc; + crSrc += src.chromaStep; + cbSrc += src.chromaStep; } - vSrc += chromaGap; - uSrc += chromaGap; - vDst += dstChromaGap; - uDst += dstChromaGap; + crSrc += chromaGap; + cbSrc += chromaGap; + crDst += dstChromaGap; + cbDst += dstChromaGap; } } } |