[svn] / branches / dev-api-3 / xvidcore / src / image / image.c Repository:
ViewVC logotype

Diff of /branches/dev-api-3/xvidcore/src/image/image.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 714, Sat Dec 14 05:39:54 2002 UTC revision 715, Sat Dec 14 06:07:03 2002 UTC
# Line 1100  Line 1100 
1100  }  }
1101    
1102    
1103  /* reduced resolution deblocking filter */  void
1104    image_clear(IMAGE * img, int width, int height, int edged_width,
1105                                            int y, int u, int v)
1106    {
1107            uint8_t * p;
1108            int i;
1109    
1110            p = img->y;
1111            for (i = 0; i < height; i++) {
1112                    memset(p, y, width);
1113                    p += edged_width;
1114            }
1115    
1116            p = img->u;
1117            for (i = 0; i < height/2; i++) {
1118                    memset(p, u, width/2);
1119                    p += edged_width/2;
1120            }
1121    
1122            p = img->v;
1123            for (i = 0; i < height/2; i++) {
1124                    memset(p, v, width/2);
1125                    p += edged_width/2;
1126            }
1127    }
1128    
1129    
1130    /* reduced resolution deblocking filter
1131            block = block size (16=rrv, 8=full resolution)
1132            flags = XVID_DEC_YDEBLOCK|XVID_DEC_UVDEBLOCK
1133    */
1134  void  void
1135  image_deblock_rrv(IMAGE * img, int edged_width,  image_deblock_rrv(IMAGE * img, int edged_width,
1136                                  const MACROBLOCK * mbs, int mb_width, int mb_height, int mb_stride)                                  const MACROBLOCK * mbs, int mb_width, int mb_height, int mb_stride,
1137                                    int block, int flags)
1138  {  {
1139          const int edged_width2 = edged_width /2;          const int edged_width2 = edged_width /2;
1140            const int nblocks = block / 8;  /* skals code uses 8pixel block uints */
1141          int i,j;          int i,j;
1142    
1143          /* horizontal deblocking */          /* luma: j,i in block units */
1144            if ((flags & XVID_DEC_DEBLOCKY))
1145          for (j = 1; j < mb_height*2; j++)       // luma: j,i in block units          {
1146                    for (j = 1; j < mb_height*2; j++)               /* horizontal deblocking */
1147          for (i = 0; i < mb_width*2; i++)          for (i = 0; i < mb_width*2; i++)
1148          {          {
1149                  if (mbs[(j-1)/2*mb_stride + (i/2)].mode != MODE_NOT_CODED ||                  if (mbs[(j-1)/2*mb_stride + (i/2)].mode != MODE_NOT_CODED ||
1150                          mbs[(j+0)/2*mb_stride + (i/2)].mode != MODE_NOT_CODED)                          mbs[(j+0)/2*mb_stride + (i/2)].mode != MODE_NOT_CODED)
1151                  {                  {
1152                          xvid_HFilter_31_C(img->y + (j*16 - 1)*edged_width + i*16,                                  xvid_HFilter_31_C(img->y + (j*block - 1)*edged_width + i*block,
1153                                                            img->y + (j*16 + 0)*edged_width + i*16, 2);                                                                    img->y + (j*block + 0)*edged_width + i*block, nblocks);
1154                  }                  }
1155          }          }
1156    
1157          for (j = 1; j < mb_height; j++) // chroma                  for (j = 0; j < mb_height*2; j++)               /* vertical deblocking */
         for (i = 0; i < mb_width; i++)  
         {  
                 if (mbs[(j-1)*mb_stride + i].mode != MODE_NOT_CODED ||  
                         mbs[(j+0)*mb_stride + i].mode != MODE_NOT_CODED)  
                 {  
                         hfilter_31(img->u + (j*16 - 1)*edged_width2 + i*16,  
                                            img->u + (j*16 + 0)*edged_width2 + i*16, 2);  
                         hfilter_31(img->v + (j*16 - 1)*edged_width2 + i*16,  
                                            img->v + (j*16 + 0)*edged_width2 + i*16, 2);  
                 }  
         }  
   
         /* vertical deblocking */  
   
         for (j = 0; j < mb_height*2; j++)               // luma: i,j in block units  
1158          for (i = 1; i < mb_width*2; i++)          for (i = 1; i < mb_width*2; i++)
1159          {          {
1160                  if (mbs[(j/2)*mb_stride + (i-1)/2].mode != MODE_NOT_CODED ||                  if (mbs[(j/2)*mb_stride + (i-1)/2].mode != MODE_NOT_CODED ||
1161                          mbs[(j/2)*mb_stride + (i+0)/2].mode != MODE_NOT_CODED)                          mbs[(j/2)*mb_stride + (i+0)/2].mode != MODE_NOT_CODED)
1162                  {                  {
1163                          vfilter_31(img->y + (j*16)*edged_width + i*16 - 1,                                  vfilter_31(img->y + (j*block)*edged_width + i*block - 1,
1164                                             img->y + (j*16)*edged_width + i*16 + 0,                                                     img->y + (j*block)*edged_width + i*block + 0,
1165                                             edged_width, 2);                                                     edged_width, nblocks);
1166                            }
1167                  }                  }
1168          }          }
1169    
1170          for (j = 0; j < mb_height; j++) // chroma  
1171            /* chroma */
1172            if ((flags & XVID_DEC_DEBLOCKUV))
1173            {
1174                    for (j = 0; j < mb_height; j++)                 /* horizontal deblocking */
1175          for (i = 1; i < mb_width; i++)          for (i = 1; i < mb_width; i++)
1176          {          {
1177                  if (mbs[j*mb_stride + i - 1].mode != MODE_NOT_CODED ||                  if (mbs[j*mb_stride + i - 1].mode != MODE_NOT_CODED ||
1178                          mbs[j*mb_stride + i + 0].mode != MODE_NOT_CODED)                          mbs[j*mb_stride + i + 0].mode != MODE_NOT_CODED)
1179                  {                  {
1180                          vfilter_31(img->u + (j*16)*edged_width2 + i*16 - 1,                                  vfilter_31(img->u + (j*block)*edged_width2 + i*block - 1,
1181                                             img->u + (j*16)*edged_width2 + i*16 + 0,                                                     img->u + (j*block)*edged_width2 + i*block + 0,
1182                                             edged_width2, 2);                                                     edged_width2, nblocks);
1183                          vfilter_31(img->v + (j*16)*edged_width2 + i*16 - 1,                                  vfilter_31(img->v + (j*block)*edged_width2 + i*block - 1,
1184                                             img->v + (j*16)*edged_width2 + i*16 + 0,                                                     img->v + (j*block)*edged_width2 + i*block + 0,
1185                                             edged_width2, 2);                                                     edged_width2, nblocks);
1186                  }                  }
1187          }          }
1188    
1189                    for (j = 1; j < mb_height; j++)         /* vertical deblocking */
1190                    for (i = 0; i < mb_width; i++)
1191                    {
1192                            if (mbs[(j-1)*mb_stride + i].mode != MODE_NOT_CODED ||
1193                                    mbs[(j+0)*mb_stride + i].mode != MODE_NOT_CODED)
1194                            {
1195                                    hfilter_31(img->u + (j*block - 1)*edged_width2 + i*block,
1196                                                       img->u + (j*block + 0)*edged_width2 + i*block, nblocks);
1197                                    hfilter_31(img->v + (j*block - 1)*edged_width2 + i*block,
1198                                                       img->v + (j*block + 0)*edged_width2 + i*block, nblocks);
1199                            }
1200                    }
1201            }
1202    
1203  }  }

Legend:
Removed from v.714  
changed lines
  Added in v.715

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4