13306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* ------------------------------------------------------------------
23306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Copyright (C) 1998-2009 PacketVideo
33306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *
43306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Licensed under the Apache License, Version 2.0 (the "License");
53306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * you may not use this file except in compliance with the License.
63306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * You may obtain a copy of the License at
73306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *
83306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *      http://www.apache.org/licenses/LICENSE-2.0
93306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *
103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Unless required by applicable law or agreed to in writing, software
113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * distributed under the License is distributed on an "AS IS" BASIS,
123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * express or implied.
143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * See the License for the specific language governing permissions
153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * and limitations under the License.
163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * -------------------------------------------------------------------
173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong */
183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*
193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong INPUT AND OUTPUT DEFINITIONS
213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Inputs:
233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    xpred = x-axis coordinate of the block used for prediction (int)
243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ypred = y-axis coordinate of the block used for prediction (int)
253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    pp_dec_u = pointer to the post processing semaphore for chrominance
263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong               (uint8)
273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    pstprcTypPrv = pointer the previous frame's post processing type
283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                   (uint8)
293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    dx = horizontal component of the motion vector (int)
303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    dy = vertical component of the motion vector (int)
313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mvwidth = number of blocks per row in the luminance VOP (int)
323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    height = luminance VOP height in pixels (int)
333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    size = total number of pixel in the current luminance VOP (int)
343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mv_loc = flag indicating location of the motion compensated
353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong         (x,y) position with respect to the luminance MB (int);
363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong         0 -> inside MB, 1 -> outside MB
373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    msk_deblock = flag indicating whether to perform deblocking
383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong              (msk_deblock = 0) or not (msk_deblock = 1) (uint8)
393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Local Stores/Buffers/Pointers Needed:
413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    None
423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Global Stores/Buffers/Pointers Needed:
443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    None
453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Outputs:
473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    None
483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Pointers and Buffers Modified:
503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    pp_dec_u contents are the updated semaphore propagation data
513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Local Stores Modified:
533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    None
543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Global Stores Modified:
563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    None
573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong FUNCTION DESCRIPTION
603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong This functions performs post processing semaphore propagation processing
623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong after chrominance prediction in interframe processing mode.
633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong*/
653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; INCLUDES
693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include    "mp4dec_api.h"
713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include    "mp4def.h"
723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; MACROS
753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Define module specific macros here
763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; DEFINES
803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Include all pre-processor statements here. Include conditional
813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; compile variables also.
823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; LOCAL FUNCTION DEFINITIONS
863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Function Prototype declaration
873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; LOCAL STORE/BUFFER/POINTER DEFINITIONS
913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Variable declaration - defined here and used outside this module
923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; EXTERNAL FUNCTION REFERENCES
963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Declare functions defined elsewhere and referenced in this module
973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
1013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Declare variables used in this module but defined elsewhere
1023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef PV_POSTPROC_ON
1043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef __cplusplus
1053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongextern "C"
1063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{
1073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
1083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
1093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; FUNCTION CODE
1103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
1113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void pp_semaphore_chroma_inter(
1123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        int xpred,      /* i */
1133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        int ypred,      /* i */
1143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        uint8   *pp_dec_u,  /* i/o */
1153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        uint8   *pstprcTypPrv,  /* i */
1163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        int dx,     /* i */
1173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        int dy,     /* i */
1183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        int mvwidth,    /* i */
1193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        int height,     /* i */
1203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        int32   size,       /* i */
1213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        int mv_loc,     /* i */
1223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        uint8   msk_deblock /* i */
1233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    )
1243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    {
1253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /*----------------------------------------------------------------------------
1263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        ; Define all local variables
1273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        ----------------------------------------------------------------------------*/
1283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        int mmvy, mmvx, nmvy, nmvx;
1293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        uint8 *pp_prev1, *pp_prev2, *pp_prev3, *pp_prev4;
1303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /*----------------------------------------------------------------------------
1323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        ; Function body here
1333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        ----------------------------------------------------------------------------*/
1343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* 09/28/2000, modify semaphore propagation to */
1363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* accommodate smart indexing */
1373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        mmvx = xpred >> 4;  /* block x coor */
1383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        nmvx = mmvx;
1393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        mmvy = ypred >> 4;  /* block y coor */
1413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        nmvy = mmvy;
1423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* Check if MV is outside the frame */
1443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        if (mv_loc == 1)
1453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {
1463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* Perform boundary check */
1473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            if (nmvx < 0)
1483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
1493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                nmvx = 0;
1503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
1513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            else if (nmvx > mvwidth - 1)
1523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
1533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                nmvx = mvwidth - 1;
1543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
1553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            if (nmvy < 0)
1573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
1583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                nmvy = 0;
1593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
1603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            else if (nmvy > (height >> 4) - 1)
1613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
1623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                nmvy = (height >> 4) - 1;
1633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
1643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
1653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* Calculate pointer to first chrominance b semaphores in       */
1673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* pstprcTypPrv, i.e., first chrominance b semaphore is in      */
1683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* (pstprcTypPrv + (size>>6)).                  */
1693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* Since total number of chrominance blocks per row in a VOP    */
1703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* is half of the total number of luminance blocks per row in a */
1713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* VOP, we use (mvwidth >> 1) when calculating the row offset.  */
1723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        pp_prev1 = pstprcTypPrv + (size >> 6) + nmvx + nmvy * (mvwidth >> 1) ;
1733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* Check if MV is a multiple of 16 */
1753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /*  1/5/01, make sure it doesn't go out of bound */
1763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        if (((dy&0xF) != 0) && (mmvy + 1 < (height >> 4) - 1))
1773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {   /* dy is not a multiple of 16 */
1783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* pp_prev3 is the block below pp_prev1 block */
1803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_prev3 = pp_prev1 + (mvwidth >> 1);
1813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
1823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        else
1833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {   /* dy is a multiple of 16 */
1843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_prev3 = pp_prev1;
1853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
1863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /*  1/5/01, make sure it doesn't go out of bound */
1883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        if (((dx&0xF) != 0) && (mmvx + 1 < (mvwidth >> 1) - 1))
1893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {   /* dx is not a multiple of 16 */
1903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* pp_prev2 is the block to the right of pp_prev1 block */
1923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_prev2 = pp_prev1 + 1;
1933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* pp_prev4 is the block to the right of the block */
1953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* below pp_prev1 block                */
1963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_prev4 = pp_prev3 + 1;
1973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
1983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        else
1993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {   /* dx is a multiple of 16 */
2003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_prev2 = pp_prev1;
2023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_prev4 = pp_prev3;
2033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
2043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* Advance offset to location of first Chrominance R semaphore in */
2063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* pstprcTypPrv. Since the number of pixels in a Chrominance VOP  */
2073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* is (number of pixels in Luminance VOP/4), and there are 64     */
2083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* pixels in an 8x8 Chrominance block, the offset can be      */
2093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* calculated as:                         */
2103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /*  mv_loc = (number of pixels in Luminance VOP/(4*64))   */
2113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /*         = size/256 = size>>8               */
2123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        mv_loc = (size >> 8);
2133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /*  11/3/00, change the propagation for deblocking */
2153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        if (msk_deblock == 0)
2163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {
2173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* Deblocking semaphore propagation for Chrominance */
2193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* b semaphores                     */
2203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            *(pp_dec_u) = 0;
2213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* Advance offset to point to Chrominance r semaphores */
2233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_dec_u += mv_loc;
2243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* Deblocking semaphore propagation for Chrominance */
2263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* r semaphores                     */
2273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            *(pp_dec_u) = 0;
2283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
2293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        else
2303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {
2313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* Deringing semaphore propagation for Chrominance B block */
2323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            if ((*(pp_dec_u)&4) == 0)
2333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
2343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                *(pp_dec_u) |= ((*(pp_prev1) | *(pp_prev2) |
2353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                                 *(pp_prev3) | *(pp_prev4)) & 0x4);
2363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
2373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* Advance offset to point to Chrominance r semaphores */
2393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_dec_u += mv_loc;
2403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_prev1 += mv_loc;
2413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_prev2 += mv_loc;
2423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_prev3 += mv_loc;
2433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            pp_prev4 += mv_loc;
2443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* Deringing semaphore propagation for Chrominance R */
2463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            if ((*(pp_dec_u)&4) == 0)
2473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
2483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                *(pp_dec_u) |= ((*(pp_prev1) | *(pp_prev2) |
2493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                                 *(pp_prev3) | *(pp_prev4)) & 0x4);
2503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
2513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
2523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /*----------------------------------------------------------------------------
2543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        ; Return nothing or data or data pointer
2553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        ----------------------------------------------------------------------------*/
2563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        return;
2573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    }
2583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef __cplusplus
2593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong}
2603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
2613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
263