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