[cvs] / xvidcore / src / image / image.c Repository:
ViewVC logotype

Diff of /xvidcore/src/image/image.c

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

revision 1.20.2.10, Thu Dec 12 12:40:19 2002 UTC revision 1.20.2.12, Tue Dec 17 12:56:37 2002 UTC
# Line 677  Line 677 
677    
678          case XVID_CSP_I420:          case XVID_CSP_I420:
679                  yv12_to_yv12(image->y, image->u, image->v, edged_width, edged_width2,                  yv12_to_yv12(image->y, image->u, image->v, edged_width, edged_width2,
680                          src, src + width*height, src + width*height + width2*height2,                          src, src + src_stride*height, src + src_stride*height + (src_stride/2)*height2,
681                          width, width2, width, height, (csp & XVID_CSP_VFLIP));                          src_stride, src_stride/2, width, height, (csp & XVID_CSP_VFLIP));
682                  break                  break
683                          ;                          ;
684          case XVID_CSP_YV12:             /* u/v swapped */          case XVID_CSP_YV12:             /* u/v swapped */
685                  yv12_to_yv12(image->y, image->v, image->u, edged_width, edged_width2,                  yv12_to_yv12(image->y, image->v, image->u, edged_width, edged_width2,
686                          src, src + width*height, src + width*height + width2*height2,                          src, src + src_stride*height, src + src_stride*height + (src_stride/2)*height2,
687                          width, width2, width, height, (csp & XVID_CSP_VFLIP));                          src_stride, src_stride/2, width, height, (csp & XVID_CSP_VFLIP));
688                  break;                  break;
689    
690          case XVID_CSP_USER:          case XVID_CSP_USER:
# Line 765  Line 765 
765                           int interlacing)                           int interlacing)
766  {  {
767          const int edged_width2 = edged_width/2;          const int edged_width2 = edged_width/2;
         int width2 = width/2;  
768          int height2 = height/2;          int height2 = height/2;
769    
770  /*  /*
# Line 874  Line 873 
873                  return 0;                  return 0;
874    
875          case XVID_CSP_I420:          case XVID_CSP_I420:
876                  yv12_to_yv12(dst, dst + width*height, dst + width*height + width2*height2,                  yv12_to_yv12(dst, dst + dst_stride*height, dst + dst_stride*height + (dst_stride/2)*height2,
877                          width, width2,                          dst_stride, dst_stride/2,
878                          image->y, image->u, image->v, edged_width, edged_width2,                          image->y, image->u, image->v, edged_width, edged_width2,
879                          width, height, (csp & XVID_CSP_VFLIP));                          width, height, (csp & XVID_CSP_VFLIP));
880                  return 0;                  return 0;
881    
882          case XVID_CSP_YV12:             // u,v swapped          case XVID_CSP_YV12:             // u,v swapped
883                  yv12_to_yv12(dst, dst + width*height, dst + width*height + width2*height2,                  yv12_to_yv12(dst, dst + dst_stride*height, dst + dst_stride*height + (dst_stride/2)*height2,
884                          width, width2,                          dst_stride, dst_stride/2,
885                          image->y, image->v, image->u, edged_width, edged_width2,                          image->y, image->v, image->u, edged_width, edged_width2,
886                          width, height, (csp & XVID_CSP_VFLIP));                          width, height, (csp & XVID_CSP_VFLIP));
887                  return 0;                  return 0;
# Line 1100  Line 1099 
1099  }  }
1100    
1101    
1102  /* reduced resolution deblocking filter */  void
1103    image_clear(IMAGE * img, int width, int height, int edged_width,
1104                                            int y, int u, int v)
1105    {
1106            uint8_t * p;
1107            int i;
1108    
1109            p = img->y;
1110            for (i = 0; i < height; i++) {
1111                    memset(p, y, width);
1112                    p += edged_width;
1113            }
1114    
1115            p = img->u;
1116            for (i = 0; i < height/2; i++) {
1117                    memset(p, u, width/2);
1118                    p += edged_width/2;
1119            }
1120    
1121            p = img->v;
1122            for (i = 0; i < height/2; i++) {
1123                    memset(p, v, width/2);
1124                    p += edged_width/2;
1125            }
1126    }
1127    
1128    
1129    /* reduced resolution deblocking filter
1130            block = block size (16=rrv, 8=full resolution)
1131            flags = XVID_DEC_YDEBLOCK|XVID_DEC_UVDEBLOCK
1132    */
1133  void  void
1134  image_deblock_rrv(IMAGE * img, int edged_width,  image_deblock_rrv(IMAGE * img, int edged_width,
1135                                  const MACROBLOCK * mbs, int mb_width, int mb_height, int mb_stride)                                  const MACROBLOCK * mbs, int mb_width, int mb_height, int mb_stride,
1136                                    int block, int flags)
1137  {  {
1138          const int edged_width2 = edged_width /2;          const int edged_width2 = edged_width /2;
1139            const int nblocks = block / 8;  /* skals code uses 8pixel block uints */
1140          int i,j;          int i,j;
1141    
1142          /* horizontal deblocking */          /* luma: j,i in block units */
1143            if ((flags & XVID_DEC_DEBLOCKY))
1144          for (j = 1; j < mb_height*2; j++)       // luma: j,i in block units          {
1145                    for (j = 1; j < mb_height*2; j++)               /* horizontal deblocking */
1146          for (i = 0; i < mb_width*2; i++)          for (i = 0; i < mb_width*2; i++)
1147          {          {
1148                  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 ||
1149                          mbs[(j+0)/2*mb_stride + (i/2)].mode != MODE_NOT_CODED)                          mbs[(j+0)/2*mb_stride + (i/2)].mode != MODE_NOT_CODED)
1150                  {                  {
1151                          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,
1152                                                            img->y + (j*16 + 0)*edged_width + i*16, 2);                                                                    img->y + (j*block + 0)*edged_width + i*block, nblocks);
                 }  
         }  
   
         for (j = 1; j < mb_height; j++) // chroma  
         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);  
1153                  }                  }
1154          }          }
1155    
1156          /* vertical deblocking */                  for (j = 0; j < mb_height*2; j++)               /* vertical deblocking */
   
         for (j = 0; j < mb_height*2; j++)               // luma: i,j in block units  
1157          for (i = 1; i < mb_width*2; i++)          for (i = 1; i < mb_width*2; i++)
1158          {          {
1159                  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 ||
1160                          mbs[(j/2)*mb_stride + (i+0)/2].mode != MODE_NOT_CODED)                          mbs[(j/2)*mb_stride + (i+0)/2].mode != MODE_NOT_CODED)
1161                  {                  {
1162                          vfilter_31(img->y + (j*16)*edged_width + i*16 - 1,                                  vfilter_31(img->y + (j*block)*edged_width + i*block - 1,
1163                                             img->y + (j*16)*edged_width + i*16 + 0,                                                     img->y + (j*block)*edged_width + i*block + 0,
1164                                             edged_width, 2);                                                     edged_width, nblocks);
1165                            }
1166                  }                  }
1167          }          }
1168    
1169          for (j = 0; j < mb_height; j++) // chroma  
1170            /* chroma */
1171            if ((flags & XVID_DEC_DEBLOCKUV))
1172            {
1173                    for (j = 0; j < mb_height; j++)                 /* horizontal deblocking */
1174          for (i = 1; i < mb_width; i++)          for (i = 1; i < mb_width; i++)
1175          {          {
1176                  if (mbs[j*mb_stride + i - 1].mode != MODE_NOT_CODED ||                  if (mbs[j*mb_stride + i - 1].mode != MODE_NOT_CODED ||
1177                          mbs[j*mb_stride + i + 0].mode != MODE_NOT_CODED)                          mbs[j*mb_stride + i + 0].mode != MODE_NOT_CODED)
1178                  {                  {
1179                          vfilter_31(img->u + (j*16)*edged_width2 + i*16 - 1,                                  vfilter_31(img->u + (j*block)*edged_width2 + i*block - 1,
1180                                             img->u + (j*16)*edged_width2 + i*16 + 0,                                                     img->u + (j*block)*edged_width2 + i*block + 0,
1181                                             edged_width2, 2);                                                     edged_width2, nblocks);
1182                          vfilter_31(img->v + (j*16)*edged_width2 + i*16 - 1,                                  vfilter_31(img->v + (j*block)*edged_width2 + i*block - 1,
1183                                             img->v + (j*16)*edged_width2 + i*16 + 0,                                                     img->v + (j*block)*edged_width2 + i*block + 0,
1184                                             edged_width2, 2);                                                     edged_width2, nblocks);
1185                  }                  }
1186          }          }
1187    
1188                    for (j = 1; j < mb_height; j++)         /* vertical deblocking */
1189                    for (i = 0; i < mb_width; i++)
1190                    {
1191                            if (mbs[(j-1)*mb_stride + i].mode != MODE_NOT_CODED ||
1192                                    mbs[(j+0)*mb_stride + i].mode != MODE_NOT_CODED)
1193                            {
1194                                    hfilter_31(img->u + (j*block - 1)*edged_width2 + i*block,
1195                                                       img->u + (j*block + 0)*edged_width2 + i*block, nblocks);
1196                                    hfilter_31(img->v + (j*block - 1)*edged_width2 + i*block,
1197                                                       img->v + (j*block + 0)*edged_width2 + i*block, nblocks);
1198                            }
1199                    }
1200            }
1201    
1202  }  }

Legend:
Removed from v.1.20.2.10  
changed lines
  Added in v.1.20.2.12

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