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#include    "mp4dec_lib.h"
193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include    "post_proc.h"
203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef PV_POSTPROC_ON
223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongvoid Deringing_Luma(
243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    uint8 *Rec_Y,
253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int width,
263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int height,
273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int16 *QP_store,
283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int,
293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    uint8 *pp_mod)
303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{
313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; Define all local variables
333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int thres[4], range[4], max_range_blk, max_thres_blk;
353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int MB_V, MB_H, BLK_V, BLK_H;
363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int v_blk, h_blk;
373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int max_diff;
383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int max_blk, min_blk;
393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int v0, h0;
403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    uint8 *ptr;
413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int thr, blks, incr;
423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int mb_indx, blk_indx;
433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; Function body here
463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    incr = width - BLKSIZE;
483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /* Dering the first line of macro blocks */
503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    for (MB_H = 0; MB_H < width; MB_H += MBSIZE)
513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    {
523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        max_diff = (QP_store[(MB_H)>>4] >> 2) + 4;
533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* threshold determination */
553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        max_range_blk = max_thres_blk = 0;
563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        blks = 0;
573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        for (BLK_V = 0; BLK_V < MBSIZE; BLK_V += BLKSIZE)
593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {
603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            for (BLK_H = 0; BLK_H < MBSIZE; BLK_H += BLKSIZE)
613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                ptr = &Rec_Y[(int32)(BLK_V) * width + MB_H + BLK_H];
633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                FindMaxMin(ptr, &min_blk, &max_blk, incr);
643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                thres[blks] = (max_blk + min_blk + 1) >> 1;
663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                range[blks] = max_blk - min_blk;
673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                if (range[blks] >= max_range_blk)
693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                {
703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    max_range_blk = range[blks];
713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    max_thres_blk = thres[blks];
723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                }
733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                blks++;
743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        blks = 0;
783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        for (v_blk = 0; v_blk < MBSIZE; v_blk += BLKSIZE)
793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {
803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            v0 = ((v_blk - 1) >= 1) ? (v_blk - 1) : 1;
813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            for (h_blk = MB_H; h_blk < MB_H + MBSIZE; h_blk += BLKSIZE)
823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                h0 = ((h_blk - 1) >= 1) ? (h_blk - 1) : 1;
843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                /* threshold rearrangement for flat region adjacent to non-flat region */
863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                if (range[blks]<32 && max_range_blk >= 64)
873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    thres[blks] = max_thres_blk;
883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                /* threshold rearrangement for deblocking
903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                (blockiness annoying at DC dominant region) */
913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                if (max_range_blk >= 16)
923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                {
933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    /* adaptive smoothing */
943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    thr = thres[blks];
953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    AdaptiveSmooth_NoMMX(Rec_Y, v0, h0, v_blk, h_blk,
973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                                         thr, width, max_diff);
983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                }
993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                blks++;
1003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            } /* block level (Luminance) */
1013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
1023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    } /* macroblock level */
1033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /* Do the rest of the macro-block-lines */
1063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    for (MB_V = MBSIZE; MB_V < height; MB_V += MBSIZE)
1073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    {
1083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* First macro-block */
1093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        max_diff = (QP_store[((((int32)MB_V*width)>>4))>>4] >> 2) + 4;
1103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* threshold determination */
1113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        max_range_blk = max_thres_blk = 0;
1123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        blks = 0;
1133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        for (BLK_V = 0; BLK_V < MBSIZE; BLK_V += BLKSIZE)
1143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {
1153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            for (BLK_H = 0; BLK_H < MBSIZE; BLK_H += BLKSIZE)
1163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
1173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                ptr = &Rec_Y[(int32)(MB_V + BLK_V) * width + BLK_H];
1183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                FindMaxMin(ptr, &min_blk, &max_blk, incr);
1193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                thres[blks] = (max_blk + min_blk + 1) >> 1;
1203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                range[blks] = max_blk - min_blk;
1213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                if (range[blks] >= max_range_blk)
1233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                {
1243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    max_range_blk = range[blks];
1253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    max_thres_blk = thres[blks];
1263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                }
1273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                blks++;
1283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
1293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
1303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        blks = 0;
1323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        for (v_blk = MB_V; v_blk < MB_V + MBSIZE; v_blk += BLKSIZE)
1333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {
1343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            v0 = v_blk - 1;
1353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            for (h_blk = 0; h_blk < MBSIZE; h_blk += BLKSIZE)
1363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
1373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                h0 = ((h_blk - 1) >= 1) ? (h_blk - 1) : 1;
1383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                /* threshold rearrangement for flat region adjacent to non-flat region */
1403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                if (range[blks]<32 && max_range_blk >= 64)
1413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    thres[blks] = max_thres_blk;
1423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                /* threshold rearrangement for deblocking
1443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                (blockiness annoying at DC dominant region) */
1453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                if (max_range_blk >= 16)
1463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                {
1473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    /* adaptive smoothing */
1483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    thr = thres[blks];
1493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    AdaptiveSmooth_NoMMX(Rec_Y, v0, h0, v_blk, h_blk,
1513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                                         thr, width, max_diff);
1523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                }
1533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                blks++;
1543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
1553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        } /* block level (Luminance) */
1563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* Rest of the macro-blocks */
1583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        for (MB_H = MBSIZE; MB_H < width; MB_H += MBSIZE)
1593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {
1603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            max_diff = (QP_store[((((int32)MB_V*width)>>4)+MB_H)>>4] >> 2) + 4;
1613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            /* threshold determination */
1633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            max_range_blk = max_thres_blk = 0;
1643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            blks = 0;
1653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            mb_indx = (MB_V / 8) * (width / 8) + MB_H / 8;
1673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            for (BLK_V = 0; BLK_V < MBSIZE; BLK_V += BLKSIZE)
1683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
1693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                for (BLK_H = 0; BLK_H < MBSIZE; BLK_H += BLKSIZE)
1703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                {
1713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    blk_indx = mb_indx + (BLK_V / 8) * width / 8 + BLK_H / 8;
1723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    /* Update based on pp_mod only */
1733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    if ((pp_mod[blk_indx]&0x4) != 0)
1743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    {
1753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        ptr = &Rec_Y[(int32)(MB_V + BLK_V) * width + MB_H + BLK_H];
1763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        FindMaxMin(ptr, &min_blk, &max_blk, incr);
1773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        thres[blks] = (max_blk + min_blk + 1) >> 1;
1783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        range[blks] = max_blk - min_blk;
1793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        if (range[blks] >= max_range_blk)
1813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        {
1823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            max_range_blk = range[blks];
1833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            max_thres_blk = thres[blks];
1843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        }
1853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    }
1863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    blks++;
1873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                }
1883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
1893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            blks = 0;
1913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            for (v_blk = MB_V; v_blk < MB_V + MBSIZE; v_blk += BLKSIZE)
1923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
1933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                v0 = v_blk - 1;
1943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                mb_indx = (v_blk / 8) * (width / 8);
1953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                for (h_blk = MB_H; h_blk < MB_H + MBSIZE; h_blk += BLKSIZE)
1963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                {
1973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    h0 = h_blk - 1;
1983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    blk_indx = mb_indx + h_blk / 8;
1993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    if ((pp_mod[blk_indx]&0x4) != 0)
2003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    {
2013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        /* threshold rearrangement for flat region adjacent to non-flat region */
2023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        if (range[blks]<32 && max_range_blk >= 64)
2033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            thres[blks] = max_thres_blk;
2043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        /* threshold rearrangement for deblocking
2063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        (blockiness annoying at DC dominant region) */
2073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        if (max_range_blk >= 16)
2083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        {
2093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            /* adaptive smoothing */
2103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            thr = thres[blks];
2113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef NoMMX
2123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            AdaptiveSmooth_NoMMX(Rec_Y, v0, h0, v_blk, h_blk,
2133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                                                 thr, width, max_diff);
2143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#else
2153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            DeringAdaptiveSmoothMMX(&Rec_Y[v0*width+h0],
2163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                                                    width, thr, max_diff);
2173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
2183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                        }
2193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    }
2203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                    blks++;
2213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                }
2223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            } /* block level (Luminance) */
2233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        } /* macroblock level */
2243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    } /* macroblock level */
2253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
2263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
2273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; Return nothing or data or data pointer
2283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
2293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    return;
2303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong}
2313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
232