diff options
-rw-r--r-- | camera/ANativeWindowDisplayAdapter.cpp | 78 | ||||
-rw-r--r-- | camera/AppCallbackNotifier.cpp | 55 | ||||
-rw-r--r-- | camera/BufferSourceAdapter.cpp | 4 | ||||
-rw-r--r-- | camera/CameraHalCommon.cpp | 61 | ||||
-rw-r--r-- | camera/inc/CameraHal.h | 6 |
5 files changed, 74 insertions, 130 deletions
diff --git a/camera/ANativeWindowDisplayAdapter.cpp b/camera/ANativeWindowDisplayAdapter.cpp index e3c7ebe..50ad545 100644 --- a/camera/ANativeWindowDisplayAdapter.cpp +++ b/camera/ANativeWindowDisplayAdapter.cpp @@ -66,80 +66,6 @@ OMX_COLOR_FORMATTYPE toOMXPixFormat(const char* parameters_format) return pixFormat; } -const char* DisplayAdapter::getPixFormatConstant(const char* parameters_format) const -{ - const char* pixFormat; - - if ( parameters_format != NULL ) - { - if (strcmp(parameters_format, android::CameraParameters::PIXEL_FORMAT_YUV422I) == 0) - { - CAMHAL_LOGVA("CbYCrY format selected"); - pixFormat = android::CameraParameters::PIXEL_FORMAT_YUV422I; - } - else if(strcmp(parameters_format, android::CameraParameters::PIXEL_FORMAT_YUV420SP) == 0 || - strcmp(parameters_format, android::CameraParameters::PIXEL_FORMAT_YUV420P) == 0) - { - // TODO(XXX): We are treating YV12 the same as YUV420SP - CAMHAL_LOGVA("YUV420SP format selected"); - pixFormat = android::CameraParameters::PIXEL_FORMAT_YUV420SP; - } - else if(strcmp(parameters_format, android::CameraParameters::PIXEL_FORMAT_RGB565) == 0) - { - CAMHAL_LOGVA("RGB565 format selected"); - pixFormat = android::CameraParameters::PIXEL_FORMAT_RGB565; - } - else if(strcmp(parameters_format, android::CameraParameters::PIXEL_FORMAT_BAYER_RGGB) == 0) - { - CAMHAL_LOGVA("BAYER format selected"); - pixFormat = android::CameraParameters::PIXEL_FORMAT_BAYER_RGGB; - } - else - { - CAMHAL_LOGEA("Invalid format, NV12 format selected as default"); - pixFormat = android::CameraParameters::PIXEL_FORMAT_YUV420SP; - } - } - else - { - CAMHAL_LOGEA("Preview format is NULL, defaulting to NV12"); - pixFormat = android::CameraParameters::PIXEL_FORMAT_YUV420SP; - } - - return pixFormat; -} - -size_t DisplayAdapter::getBufSize(const char* parameters_format, int width, int height) const -{ - int buf_size; - - if ( parameters_format != NULL ) { - if (strcmp(parameters_format, - android::CameraParameters::PIXEL_FORMAT_YUV422I) == 0) { - buf_size = width * height * 2; - } - else if((strcmp(parameters_format, android::CameraParameters::PIXEL_FORMAT_YUV420SP) == 0) || - (strcmp(parameters_format, android::CameraParameters::PIXEL_FORMAT_YUV420P) == 0)) { - buf_size = width * height * 3 / 2; - } - else if(strcmp(parameters_format, - android::CameraParameters::PIXEL_FORMAT_RGB565) == 0) { - buf_size = width * height * 2; - } - else if (strcmp(parameters_format, - android::CameraParameters::PIXEL_FORMAT_BAYER_RGGB) == 0) { - buf_size = width * height * 2; - } else { - CAMHAL_LOGEA("Invalid format"); - buf_size = 0; - } - } else { - CAMHAL_LOGEA("Preview format is NULL"); - buf_size = 0; - } - - return buf_size; -} /*--------------------ANativeWindowDisplayAdapter Class STARTS here-----------------------------*/ @@ -631,7 +557,7 @@ CameraBuffer* ANativeWindowDisplayAdapter::allocateBufferList(int width, int hei CameraFrame::PREVIEW_FRAME_SYNC); } - bytes = getBufSize(format, width, height); + bytes = CameraHal::calculateBufferSize(format, width, height); } @@ -678,7 +604,7 @@ CameraBuffer* ANativeWindowDisplayAdapter::allocateBufferList(int width, int hei } mFirstInit = true; - mPixelFormat = getPixFormatConstant(format); + mPixelFormat = CameraHal::getPixelFormatConstant(format); mFrameWidth = width; mFrameHeight = height; diff --git a/camera/AppCallbackNotifier.cpp b/camera/AppCallbackNotifier.cpp index a40c0eb..2623fcb 100644 --- a/camera/AppCallbackNotifier.cpp +++ b/camera/AppCallbackNotifier.cpp @@ -755,7 +755,7 @@ void AppCallbackNotifier::copyAndSendPictureFrame(CameraFrame* frame, int32_t ms (frame->mAlignment != frame->mWidth)) { size_t size; - size = calculateBufferSize(frame->mWidth, frame->mHeight, frame->mBuffer->format); + size = CameraHal::calculateBufferSize(frame->mBuffer->format, frame->mWidth, frame->mHeight); picture = mRequestMemory(-1, size, 1, NULL); if (picture && picture->data) { copyCroppedNV12(frame, (unsigned char*) picture->data); @@ -1039,9 +1039,9 @@ void AppCallbackNotifier::notifyFrame() current_snapshot = (mPreviewBufCount + MAX_BUFFERS - 1) % MAX_BUFFERS; tn_jpeg->src = (uint8_t *)mPreviewBuffers[current_snapshot].mapped; tn_jpeg->src_size = mPreviewMemory->size / MAX_BUFFERS; - tn_jpeg->dst_size = calculateBufferSize(tn_width, - tn_height, - previewFormat); + tn_jpeg->dst_size = CameraHal::calculateBufferSize(previewFormat, + tn_width, + tn_height); tn_jpeg->dst = (uint8_t*) malloc(tn_jpeg->dst_size); tn_jpeg->quality = tn_quality; tn_jpeg->in_width = width; @@ -1509,49 +1509,6 @@ void AppCallbackNotifier::setFrameProvider(FrameNotifier *frameNotifier) LOG_FUNCTION_NAME_EXIT; } -size_t AppCallbackNotifier::calculateBufferSize(size_t width, size_t height, const char *pixelFormat) -{ - size_t res = 0; - - LOG_FUNCTION_NAME - - if(strcmp(pixelFormat, android::CameraParameters::PIXEL_FORMAT_YUV422I) == 0) { - res = width*height*2; - } else if(strcmp(pixelFormat, android::CameraParameters::PIXEL_FORMAT_YUV420SP) == 0) { - res = (width*height*3)/2; - } else if(strcmp(pixelFormat, android::CameraParameters::PIXEL_FORMAT_RGB565) == 0) { - res = width*height*2; - } else if (strcmp(pixelFormat, android::CameraParameters::PIXEL_FORMAT_YUV420P) == 0) { - size_t yStride, uvStride, ySize, uvSize; - alignYV12(width, height, yStride, uvStride, ySize, uvSize, res); - mPreviewPixelFormat = android::CameraParameters::PIXEL_FORMAT_YUV420P; - } - - LOG_FUNCTION_NAME_EXIT; - - return res; -} - -const char* AppCallbackNotifier::getContstantForPixelFormat(const char *pixelFormat) { - if (!pixelFormat) { - // returning NV12 as default - return android::CameraParameters::PIXEL_FORMAT_YUV420SP; - } - - if(strcmp(pixelFormat, android::CameraParameters::PIXEL_FORMAT_YUV422I) == 0) { - return android::CameraParameters::PIXEL_FORMAT_YUV422I; - } else if(strcmp(pixelFormat, android::CameraParameters::PIXEL_FORMAT_YUV420SP) == 0 ) { - return android::CameraParameters::PIXEL_FORMAT_YUV420SP; - } else if(strcmp(pixelFormat, android::CameraParameters::PIXEL_FORMAT_RGB565) == 0) { - return android::CameraParameters::PIXEL_FORMAT_RGB565; - } else if(strcmp(pixelFormat, android::CameraParameters::PIXEL_FORMAT_YUV420P) == 0) { - return android::CameraParameters::PIXEL_FORMAT_YUV420P; - } else { - // returning NV12 as default - return android::CameraParameters::PIXEL_FORMAT_YUV420SP; - } -} - status_t AppCallbackNotifier::startPreviewCallbacks(android::CameraParameters ¶ms, CameraBuffer *buffers, uint32_t *offsets, int fd, size_t length, size_t count) { unsigned int *bufArr; @@ -1581,8 +1538,8 @@ status_t AppCallbackNotifier::startPreviewCallbacks(android::CameraParameters &p mPreviewWidth = w; mPreviewHeight = h; mPreviewStride = 4096; - mPreviewPixelFormat = getContstantForPixelFormat(params.getPreviewFormat()); - size = calculateBufferSize(w, h, mPreviewPixelFormat); + mPreviewPixelFormat = CameraHal::getPixelFormatConstant(params.getPreviewFormat()); + size = CameraHal::calculateBufferSize(mPreviewPixelFormat, w, h); mPreviewMemory = mRequestMemory(-1, size, AppCallbackNotifier::MAX_BUFFERS, NULL); if (!mPreviewMemory) { diff --git a/camera/BufferSourceAdapter.cpp b/camera/BufferSourceAdapter.cpp index e00cec7..acb4653 100644 --- a/camera/BufferSourceAdapter.cpp +++ b/camera/BufferSourceAdapter.cpp @@ -387,7 +387,7 @@ CameraBuffer* BufferSourceAdapter::allocateBufferList(int width, int height, con mBuffers[i].type = CAMERA_BUFFER_ANW; mFramesWithCameraAdapterMap.add(handle, i); - bytes = getBufSize(format, width, height); + bytes = CameraHal::calculateBufferSize(format, width, height); } for( i = 0; i < mBufferCount-undequeued; i++ ) { @@ -422,7 +422,7 @@ CameraBuffer* BufferSourceAdapter::allocateBufferList(int width, int height, con mFramesWithCameraAdapterMap.removeItem((buffer_handle_t *) mBuffers[i].opaque); } - mPixelFormat = getPixFormatConstant(format); + mPixelFormat = CameraHal::getPixelFormatConstant(format); mFrameWidth = width; mFrameHeight = height; mBufferSourceDirection = BUFFER_SOURCE_TAP_OUT; diff --git a/camera/CameraHalCommon.cpp b/camera/CameraHalCommon.cpp index 051a785..7b15d4c 100644 --- a/camera/CameraHalCommon.cpp +++ b/camera/CameraHalCommon.cpp @@ -117,5 +117,66 @@ void CameraHal::PPM(const char* str, struct timeval* ppm_first, ...){ #endif + +/** Common utility function definitions used all over the HAL */ + +const char* CameraHal::getPixelFormatConstant(const char* parametersFormat) +{ + const char *pixelFormat = NULL; + + if ( NULL != parametersFormat ) { + if ( 0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_YUV422I) ) { + CAMHAL_LOGVA("CbYCrY format selected"); + pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_YUV422I; + } else if ( (0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_YUV420SP)) || + (0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_YUV420P)) ) { + // TODO(XXX): We are treating YV12 the same as YUV420SP + CAMHAL_LOGVA("YUV420SP format selected"); + pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_YUV420SP; + } else if ( 0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_RGB565) ) { + CAMHAL_LOGVA("RGB565 format selected"); + pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_RGB565; + } else if ( 0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_BAYER_RGGB) ) { + CAMHAL_LOGVA("BAYER format selected"); + pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_BAYER_RGGB; + } else { + CAMHAL_LOGEA("Invalid format, NV12 format selected as default"); + pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_YUV420SP; + } + } else { + CAMHAL_LOGEA("Preview format is NULL, defaulting to NV12"); + pixelFormat = (const char *) android::CameraParameters::PIXEL_FORMAT_YUV420SP; + } + + return pixelFormat; +} + +size_t CameraHal::calculateBufferSize(const char* parametersFormat, int width, int height) +{ + int bufferSize = -1; + + if ( NULL != parametersFormat ) { + if ( 0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_YUV422I) ) { + bufferSize = width * height * 2; + } else if ( (0 == strcmp(parametersFormat, android::CameraParameters::PIXEL_FORMAT_YUV420SP)) || + (0 == strcmp(parametersFormat, android::CameraParameters::PIXEL_FORMAT_YUV420P)) ) { + bufferSize = width * height * 3 / 2; + } else if ( 0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_RGB565) ) { + bufferSize = width * height * 2; + } else if ( 0 == strcmp(parametersFormat, (const char *) android::CameraParameters::PIXEL_FORMAT_BAYER_RGGB) ) { + bufferSize = width * height * 2; + } else { + CAMHAL_LOGEA("Invalid format"); + bufferSize = 0; + } + } else { + CAMHAL_LOGEA("Preview format is NULL"); + bufferSize = 0; + } + + return bufferSize; +} + + } // namespace Camera } // namespace Ti diff --git a/camera/inc/CameraHal.h b/camera/inc/CameraHal.h index 8115516..e9880af 100644 --- a/camera/inc/CameraHal.h +++ b/camera/inc/CameraHal.h @@ -1003,9 +1003,6 @@ public: // Get min buffers display needs at any given time virtual status_t minUndequeueableBuffers(int& unqueueable) = 0; -protected: - virtual const char* getPixFormatConstant(const char* parameters_format) const; - virtual size_t getBufSize(const char* parameters_format, int width, int height) const; private: #ifdef OMAP_ENHANCEMENT @@ -1237,6 +1234,9 @@ public: void eventCallback(CameraHalEvent* event); void setEventProvider(int32_t eventMask, MessageNotifier * eventProvider); + static const char* getPixelFormatConstant(const char* parameters_format); + static size_t calculateBufferSize(const char* parametersFormat, int width, int height); + /*--------------------Internal Member functions - Private---------------------------------*/ private: |