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

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

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

revision 1157, Mon Sep 29 00:30:31 2003 UTC revision 1257, Fri Dec 12 08:19:13 2003 UTC
# Line 19  Line 19 
19   *  along with this program ; if not, write to the Free Software   *  along with this program ; if not, write to the Free Software
20   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21   *   *
22   * $Id: image.c,v 1.26.2.9 2003-09-29 00:30:31 edgomez Exp $   * $Id: image.c,v 1.26.2.12 2003-12-12 08:19:13 chl Exp $
23   *   *
24   ****************************************************************************/   ****************************************************************************/
25    
# Line 258  Line 258 
258          n_ptr = refn->y;          n_ptr = refn->y;
259          h_ptr = refh->y;          h_ptr = refh->y;
260          v_ptr = refv->y;          v_ptr = refv->y;
         hv_ptr = refhv->y;  
261    
262          n_ptr -= offset;          n_ptr -= offset;
263          h_ptr -= offset;          h_ptr -= offset;
264          v_ptr -= offset;          v_ptr -= offset;
         hv_ptr -= offset;  
265    
266            /* Note we initialize the hv pointer later, as we can optimize code a bit
267             * doing it down to up in quarterpel and up to down in halfpel */
268          if(quarterpel) {          if(quarterpel) {
269    
270                  for (y = 0; y < (edged_height - EDGE_SIZE); y += 8) {                  for (y = 0; y < (edged_height - EDGE_SIZE); y += 8) {
# Line 286  Line 286 
286                          n_ptr += stride_add;                          n_ptr += stride_add;
287                  }                  }
288    
289                  h_ptr = refh->y;                  h_ptr = refh->y + (edged_height - EDGE_SIZE - EDGE_SIZE2)*edged_width - EDGE_SIZE2;
290                  h_ptr -= offset;                  hv_ptr = refhv->y + (edged_height - EDGE_SIZE - EDGE_SIZE2)*edged_width - EDGE_SIZE2;
291    
292                  for (y = 0; y < (edged_height - EDGE_SIZE); y = y + 8) {                  for (y = 0; y < (edged_height - EDGE_SIZE); y = y + 8) {
293                            hv_ptr -= stride_add;
294                            h_ptr -= stride_add;
295                            hv_ptr -= EDGE_SIZE;
296                            h_ptr -= EDGE_SIZE;
297    
298                          for (x = 0; x < (edged_width - EDGE_SIZE); x = x + 8) {                          for (x = 0; x < (edged_width - EDGE_SIZE); x = x + 8) {
299                                    hv_ptr -= 8;
300                                    h_ptr -= 8;
301                                  interpolate8x8_6tap_lowpass_v(hv_ptr, h_ptr, edged_width, rounding);                                  interpolate8x8_6tap_lowpass_v(hv_ptr, h_ptr, edged_width, rounding);
                                 hv_ptr += 8;  
                                 h_ptr += 8;  
                         }  
   
                         hv_ptr += EDGE_SIZE;  
                         h_ptr += EDGE_SIZE;  
   
                         hv_ptr += stride_add;  
                         h_ptr += stride_add;  
302                  }                  }
303          }          }
304          else {          } else {
305    
306                    hv_ptr = refhv->y;
307                    hv_ptr -= offset;
308    
309                  for (y = 0; y < (edged_height - EDGE_SIZE); y += 8) {                  for (y = 0; y < (edged_height - EDGE_SIZE); y += 8) {
310                          for (x = 0; x < (edged_width - EDGE_SIZE); x += 8) {                          for (x = 0; x < (edged_width - EDGE_SIZE); x += 8) {
# Line 622  Line 623 
623                          interlacing?uyvyi_to_yv12_c:uyvy_to_yv12_c, 2);                          interlacing?uyvyi_to_yv12_c:uyvy_to_yv12_c, 2);
624                  break;                  break;
625    
626          case XVID_CSP_I420:          case XVID_CSP_I420: /* YCrCb == internal colorspace for MPEG */
627                  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,
628                          src[0], src[0] + src_stride[0]*height, src[0] + src_stride[0]*height + (src_stride[0]/2)*height2,                          src[0], src[0] + src_stride[0]*height, src[0] + src_stride[0]*height + (src_stride[0]/2)*height2,
629                          src_stride[0], src_stride[0]/2, width, height, (csp & XVID_CSP_VFLIP));                          src_stride[0], src_stride[0]/2, width, height, (csp & XVID_CSP_VFLIP));
630                  break                  break;
631                          ;  
632          case XVID_CSP_YV12:             /* u/v swapped */          case XVID_CSP_YV12:     /* YCbCr == U and V plane swapped */
633                  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,
634                          src[0], src[0] + src_stride[0]*height, src[0] + src_stride[0]*height + (src_stride[0]/2)*height2,                          src[0], src[0] + src_stride[0]*height, src[0] + src_stride[0]*height + (src_stride[0]/2)*height2,
635                          src_stride[0], src_stride[0]/2, width, height, (csp & XVID_CSP_VFLIP));                          src_stride[0], src_stride[0]/2, width, height, (csp & XVID_CSP_VFLIP));
636                  break;                  break;
637    
638          case XVID_CSP_USER:          case XVID_CSP_USER :  /* YCrCb with arbitrary pointers and different strides for Y and UV */
         /*XXX: support for different u & v strides */  
639                  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,
640                          src[0], src[1], src[2], src_stride[0], src_stride[1],                          src[0], src[1], src[2], src_stride[0], src_stride[1],  /* v: dst_stride[2] not yet supported */
641                          width, height, (csp & XVID_CSP_VFLIP));                          width, height, (csp & XVID_CSP_VFLIP));
642                  break;                  break;
643    
# Line 791  Line 791 
791                          interlacing?yv12_to_uyvyi_c:yv12_to_uyvy_c, 2);                          interlacing?yv12_to_uyvyi_c:yv12_to_uyvy_c, 2);
792                  return 0;                  return 0;
793    
794          case XVID_CSP_I420:          case XVID_CSP_I420: /* YCrCb == internal colorspace for MPEG */
795                  yv12_to_yv12(dst[0], dst[0] + dst_stride[0]*height, dst[0] + dst_stride[0]*height + (dst_stride[0]/2)*height2,                  yv12_to_yv12(dst[0], dst[0] + dst_stride[0]*height, dst[0] + dst_stride[0]*height + (dst_stride[0]/2)*height2,
796                          dst_stride[0], dst_stride[0]/2,                          dst_stride[0], dst_stride[0]/2,
797                          image->y, image->u, image->v, edged_width, edged_width2,                          image->y, image->u, image->v, edged_width, edged_width2,
798                          width, height, (csp & XVID_CSP_VFLIP));                          width, height, (csp & XVID_CSP_VFLIP));
799                  return 0;                  return 0;
800    
801          case XVID_CSP_YV12:             /* u,v swapped */          case XVID_CSP_YV12:     /* YCbCr == U and V plane swapped */
802                  yv12_to_yv12(dst[0], dst[0] + dst_stride[0]*height, dst[0] + dst_stride[0]*height + (dst_stride[0]/2)*height2,                  yv12_to_yv12(dst[0], dst[0] + dst_stride[0]*height, dst[0] + dst_stride[0]*height + (dst_stride[0]/2)*height2,
803                          dst_stride[0], dst_stride[0]/2,                          dst_stride[0], dst_stride[0]/2,
804                          image->y, image->v, image->u, edged_width, edged_width2,                          image->y, image->v, image->u, edged_width, edged_width2,
805                          width, height, (csp & XVID_CSP_VFLIP));                          width, height, (csp & XVID_CSP_VFLIP));
806                  return 0;                  return 0;
807    
808          case XVID_CSP_USER :            /* u,v swapped */          case XVID_CSP_USER :  /* YCrCb with arbitrary pointers and different strides for Y and UV */
809                  yv12_to_yv12(dst[0], dst[1], dst[2],                  yv12_to_yv12(dst[0], dst[1], dst[2],
810                          dst_stride[0], dst_stride[1],   /* v: dst_stride[2] */                          dst_stride[0], dst_stride[1],   /* v: dst_stride[2] not yet supported */
811                          image->y, image->v, image->u, edged_width, edged_width2,                          image->y, image->u, image->v, edged_width, edged_width2,
812                          width, height, (csp & XVID_CSP_VFLIP));                          width, height, (csp & XVID_CSP_VFLIP));
813                  return 0;                  return 0;
814    

Legend:
Removed from v.1157  
changed lines
  Added in v.1257

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