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