1f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons/* 2f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * Copyright (C) Texas Instruments - http://www.ti.com/ 3f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * 4f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * Licensed under the Apache License, Version 2.0 (the "License"); 5f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * you may not use this file except in compliance with the License. 6f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * You may obtain a copy of the License at 7f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * 8f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * http://www.apache.org/licenses/LICENSE-2.0 9f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * 10f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * Unless required by applicable law or agreed to in writing, software 11f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * distributed under the License is distributed on an "AS IS" BASIS, 12f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * See the License for the specific language governing permissions and 14f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons * limitations under the License. 15f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons */ 1672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 17f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#include "NV12_resize.h" 1872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 19f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#ifdef LOG_TAG 20f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#undef LOG_TAG 21f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons#endif 2272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng#define LOG_TAG "NV12_resize" 23f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 2472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng#define STRIDE 4096 2572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 2672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng/*========================================================================== 2772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* Function Name : VT_resizeFrame_Video_opt2_lp 2872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* 2972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* Description : Resize a yuv frame. 3072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* 3172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* Input(s) : input_img_ptr -> Input Image Structure 3272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* : output_img_ptr -> Output Image Structure 3372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* : cropout -> crop structure 3472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* 3572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* Value Returned : mmBool -> FALSE on error TRUE on success 3672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* NOTE: 3772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* Not tested for crop funtionallity. 3872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng* faster version. 3972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng============================================================================*/ 4072b0d2814165e633385bd87a838fc9c3a8250113Akwasi BoatengmmBool 41f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason SimmonsVT_resizeFrame_Video_opt2_lp( 42f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons structConvImage* i_img_ptr, /* Points to the input image */ 43f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons structConvImage* o_img_ptr, /* Points to the output image */ 44f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons IC_rect_type* cropout, /* how much to resize to in final image */ 45f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUint16 dummy /* Transparent pixel value */ 46f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons ) { 47f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons LOG_FUNCTION_NAME; 48f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 49f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUint16 row,col; 50f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUint32 resizeFactorX; 51f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUint32 resizeFactorY; 52f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 53f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUint16 x, y; 54f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 55f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUchar* ptr8; 56f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUchar *ptr8Cb, *ptr8Cr; 57f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 58f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUint16 xf, yf; 59f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUchar* inImgPtrY; 60f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUchar* inImgPtrU; 61f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUchar* inImgPtrV; 62f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUint32 cox, coy, codx, cody; 63f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons mmUint16 idx,idy, idxC; 64f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 65f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( i_img_ptr->uWidth == o_img_ptr->uWidth ) { 66f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( i_img_ptr->uHeight == o_img_ptr->uHeight ) { 67f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMHAL_LOGV("************************f(i_img_ptr->uHeight == o_img_ptr->uHeight) are same *********************\n"); 68f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMHAL_LOGV("************************(i_img_ptr->width == %d" , i_img_ptr->uWidth ); 69f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMHAL_LOGV("************************(i_img_ptr->uHeight == %d" , i_img_ptr->uHeight ); 70f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMHAL_LOGV("************************(o_img_ptr->width == %d" ,o_img_ptr->uWidth ); 71f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMHAL_LOGV("************************(o_img_ptr->uHeight == %d" , o_img_ptr->uHeight ); 72f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 73f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 74f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 75f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( !i_img_ptr || !i_img_ptr->imgPtr || !o_img_ptr || !o_img_ptr->imgPtr ) { 76f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMHAL_LOGE("Image Point NULL"); 77f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return false; 78f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 79f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 80f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons inImgPtrY = (mmUchar *) i_img_ptr->imgPtr + i_img_ptr->uOffset; 81f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons inImgPtrU = (mmUchar *) i_img_ptr->clrPtr + i_img_ptr->uOffset/2; 82f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons inImgPtrV = (mmUchar*)inImgPtrU + 1; 83f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 84f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( !cropout ) { 85f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons cox = 0; 86f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons coy = 0; 87f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons codx = o_img_ptr->uWidth; 88f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons cody = o_img_ptr->uHeight; 89f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } else { 90f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons cox = cropout->x; 91f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons coy = cropout->y; 92f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons codx = cropout->uWidth; 93f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons cody = cropout->uHeight; 94f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 95f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons idx = i_img_ptr->uWidth; 96f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons idy = i_img_ptr->uHeight; 97f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 98f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons /* make sure valid input size */ 99f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if ( idx < 1 || idy < 1 || i_img_ptr->uStride < 1 ) { 100f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMHAL_LOGE("idx or idy less then 1 idx = %d idy = %d stride = %d", idx, idy, i_img_ptr->uStride); 101f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return false; 102f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 103f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 104f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons resizeFactorX = ((idx-1)<<9) / codx; 105f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons resizeFactorY = ((idy-1)<<9) / cody; 10672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 107f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons if( i_img_ptr->eFormat != IC_FORMAT_YCbCr420_lp || 108f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons o_img_ptr->eFormat != IC_FORMAT_YCbCr420_lp ) { 109f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMHAL_LOGE("eFormat not supported"); 110f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return false; 111f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons } 112f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 113f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons ptr8 = (mmUchar*)o_img_ptr->imgPtr + cox + coy*o_img_ptr->uWidth; 11472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 11572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ////////////////////////////for Y////////////////////////// 116f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons for ( row = 0; row < cody; row++ ) { 11772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8Yrow1 = NULL; 11872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8Yrow2 = NULL; 11972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng y = (mmUint16) ((mmUint32) (row*resizeFactorY) >> 9); 12072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng yf = (mmUchar) ((mmUint32)((row*resizeFactorY) >> 6) & 0x7); 121c160a1f85c70e49a7613d774e2d99035f3cb4851Tyler Luu pu8Yrow1 = inImgPtrY + (y) * i_img_ptr->uStride; 122c160a1f85c70e49a7613d774e2d99035f3cb4851Tyler Luu pu8Yrow2 = pu8Yrow1 + i_img_ptr->uStride; 12372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 124f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons for ( col = 0; col < codx; col++ ) { 12572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar in11, in12, in21, in22; 12672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8ptr1 = NULL; 12772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8ptr2 = NULL; 12872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar w; 12972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUint16 accum_1; 13072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //mmUint32 accum_W; 13172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 13272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng x = (mmUint16) ((mmUint32) (col*resizeFactorX) >> 9); 13372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng xf = (mmUchar) ((mmUint32) ((col*resizeFactorX) >> 6) & 0x7); 13472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 13572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_W = 0; 13672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1 = 0; 13772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 13872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng pu8ptr1 = pu8Yrow1 + (x); 13972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng pu8ptr2 = pu8Yrow2 + (x); 14072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 14172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng /* A pixel */ 14272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //in = *(inImgPtrY + (y)*idx + (x)); 14372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng in11 = *(pu8ptr1); 14472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 14572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng w = bWeights[xf][yf][0]; 14672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1 = (w * in11); 14772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_W += (w); 14872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 14972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng /* B pixel */ 15072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //in = *(inImgPtrY + (y)*idx + (x+1)); 15172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng in12 = *(pu8ptr1+1); 15272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng w = bWeights[xf][yf][1]; 15372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1 += (w * in12); 15472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_W += (w); 15572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 15672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng /* C pixel */ 15772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //in = *(inImgPtrY + (y+1)*idx + (x)); 15872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng in21 = *(pu8ptr2); 15972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng w = bWeights[xf][yf][3]; 16072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1 += (w * in21); 16172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_W += (w); 16272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 16372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng /* D pixel */ 16472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //in = *(inImgPtrY + (y+1)*idx + (x+1)); 16572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng in22 = *(pu8ptr2+1); 16672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng w = bWeights[xf][yf][2]; 16772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1 += (w * in22); 16872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_W += (w); 16972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 17072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng /* divide by sum of the weights */ 17172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_1 /= (accum_W); 17272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_1 = (accum_1/64); 17372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1 = (accum_1>>6); 17472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng *ptr8 = (mmUchar)accum_1 ; 17572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 17672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ptr8++; 17772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng } 178c160a1f85c70e49a7613d774e2d99035f3cb4851Tyler Luu ptr8 = ptr8 + (o_img_ptr->uStride - codx); 17972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng } 18072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ////////////////////////////for Y////////////////////////// 18172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 18272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ///////////////////////////////for Cb-Cr////////////////////// 18372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 18472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ptr8Cb = (mmUchar*)o_img_ptr->clrPtr + cox + coy*o_img_ptr->uWidth; 18572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 18672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ptr8Cr = (mmUchar*)(ptr8Cb+1); 18772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 18872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng idxC = (idx>>1); 189f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons for ( row = 0; row < (((cody)>>1)); row++ ) { 19072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8Cbr1 = NULL; 19172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8Cbr2 = NULL; 19272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8Crr1 = NULL; 19372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8Crr2 = NULL; 19472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 19572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng y = (mmUint16) ((mmUint32) (row*resizeFactorY) >> 9); 19672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng yf = (mmUchar) ((mmUint32)((row*resizeFactorY) >> 6) & 0x7); 19772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 198c160a1f85c70e49a7613d774e2d99035f3cb4851Tyler Luu pu8Cbr1 = inImgPtrU + (y) * i_img_ptr->uStride; 199c160a1f85c70e49a7613d774e2d99035f3cb4851Tyler Luu pu8Cbr2 = pu8Cbr1 + i_img_ptr->uStride; 200c160a1f85c70e49a7613d774e2d99035f3cb4851Tyler Luu pu8Crr1 = inImgPtrV + (y) * i_img_ptr->uStride; 201c160a1f85c70e49a7613d774e2d99035f3cb4851Tyler Luu pu8Crr2 = pu8Crr1 + i_img_ptr->uStride; 20272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 203f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons for ( col = 0; col < (((codx)>>1)); col++ ) { 20472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar in11, in12, in21, in22; 20572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8Cbc1 = NULL; 20672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8Cbc2 = NULL; 20772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8Crc1 = NULL; 20872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar *pu8Crc2 = NULL; 20972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 21072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUchar w; 21172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng mmUint16 accum_1Cb, accum_1Cr; 21272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //mmUint32 accum_WCb, accum_WCr; 21372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 21472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng x = (mmUint16) ((mmUint32) (col*resizeFactorX) >> 9); 21572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng xf = (mmUchar) ((mmUint32) ((col*resizeFactorX) >> 6) & 0x7); 21672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 21772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_WCb = accum_WCr = 0; 21872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cb = accum_1Cr = 0; 21972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 22072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng pu8Cbc1 = pu8Cbr1 + (x*2); 22172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng pu8Cbc2 = pu8Cbr2 + (x*2); 222f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons pu8Crc1 = pu8Crr1 + (x*2); 22372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng pu8Crc2 = pu8Crr2 + (x*2); 22472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 22572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng /* A pixel */ 22672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng w = bWeights[xf][yf][0]; 22772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 22872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng in11 = *(pu8Cbc1); 22972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cb = (w * in11); 23072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng // accum_WCb += (w); 23172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 232f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons in11 = *(pu8Crc1); 23372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cr = (w * in11); 23472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_WCr += (w); 23572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 23672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng /* B pixel */ 23772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng w = bWeights[xf][yf][1]; 23872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 23972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng in12 = *(pu8Cbc1+2); 24072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cb += (w * in12); 24172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_WCb += (w); 24272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 24372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng in12 = *(pu8Crc1+2); 24472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cr += (w * in12); 24572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_WCr += (w); 24672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 24772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng /* C pixel */ 24872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng w = bWeights[xf][yf][3]; 24972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 25072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng in21 = *(pu8Cbc2); 25172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cb += (w * in21); 25272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_WCb += (w); 25372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 254f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons in21 = *(pu8Crc2); 25572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cr += (w * in21); 25672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_WCr += (w); 25772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 25872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng /* D pixel */ 25972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng w = bWeights[xf][yf][2]; 26072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 26172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng in22 = *(pu8Cbc2+2); 26272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cb += (w * in22); 26372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_WCb += (w); 26472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 26572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng in22 = *(pu8Crc2+2); 26672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cr += (w * in22); 26772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_WCr += (w); 26872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 26972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng /* divide by sum of the weights */ 27072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng //accum_1Cb /= (accum_WCb); 27172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cb = (accum_1Cb>>6); 27272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng *ptr8Cb = (mmUchar)accum_1Cb ; 27372b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 27472b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng accum_1Cr = (accum_1Cr >> 6); 27572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng *ptr8Cr = (mmUchar)accum_1Cr ; 27672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 27772b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ptr8Cb++; 27872b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ptr8Cr++; 27972b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng 28072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ptr8Cb++; 28172b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ptr8Cr++; 28272b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng } 283c160a1f85c70e49a7613d774e2d99035f3cb4851Tyler Luu ptr8Cb = ptr8Cb + (o_img_ptr->uStride-codx); 284c160a1f85c70e49a7613d774e2d99035f3cb4851Tyler Luu ptr8Cr = ptr8Cr + (o_img_ptr->uStride-codx); 28572b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng } 28672b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng ///////////////////For Cb- Cr//////////////////////////////////////// 287f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons 288f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons CAMHAL_LOGV("success"); 289f7a4d11e9f710e2cd0592310ac1baecccb85f1d1Jason Simmons return true; 29072b0d2814165e633385bd87a838fc9c3a8250113Akwasi Boateng} 291