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

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

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

revision 1814, Thu Nov 27 20:46:13 2008 UTC revision 1815, Fri Nov 28 10:58:07 2008 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.42 2008-11-26 01:04:34 Isibaar Exp $   * $Id: image.c,v 1.43 2008-11-28 10:58:07 Isibaar Exp $
23   *   *
24   ****************************************************************************/   ****************************************************************************/
25    
# Line 385  Line 385 
385                                   uint8_t * y_ptr, uint8_t * u_ptr, uint8_t * v_ptr,                                   uint8_t * y_ptr, uint8_t * u_ptr, uint8_t * v_ptr,
386                                   int y_stride, int uv_stride,                                   int y_stride, int uv_stride,
387                                   int width, int height, int vflip,                                   int width, int height, int vflip,
388                                   packedFunc * func_opt, packedFunc func_c, int size)                                   packedFunc * func_opt, packedFunc func_c,
389                     int size, int interlacing)
390  {  {
391          int width_opt, width_c;          int width_opt, width_c, height_opt;
392    
393        if (width==1 || height==1) return; /* forget about it */
394    
395          if (func_opt != func_c && x_stride < size*((width+15)/16)*16)          if (func_opt != func_c && x_stride < size*((width+15)/16)*16)
396          {          {
397                  width_opt = width & (~15);                  width_opt = width & (~15);
398                  width_c = width - width_opt;                  width_c = (width - width_opt) & (~1);
399          }          }
400          else          else
401          {          {
402                  width_opt = width;          /* Enforce the width to be divisable by two. */
403                    width_opt = width & (~1);
404                  width_c = 0;                  width_c = 0;
405          }          }
406    
407        /* packed conversions require height to be divisable by 2
408           (or even by 4 for interlaced conversion) */
409        if (interlacing)
410            height_opt = height & (~3);
411        else
412            height_opt = height & (~1);
413    
414          func_opt(x_ptr, x_stride,          func_opt(x_ptr, x_stride,
415                          y_ptr, u_ptr, v_ptr, y_stride, uv_stride,                          y_ptr, u_ptr, v_ptr, y_stride, uv_stride,
416                          width_opt, height, vflip);                          width_opt, height_opt, vflip);
417    
418          if (width_c)          if (width_c)
419          {          {
420                  func_c(x_ptr + size*width_opt, x_stride,                  func_c(x_ptr + size*width_opt, x_stride,
421                          y_ptr + width_opt, u_ptr + width_opt/2, v_ptr + width_opt/2,                          y_ptr + width_opt, u_ptr + width_opt/2, v_ptr + width_opt/2,
422                          y_stride, uv_stride, width_c, height, vflip);                          y_stride, uv_stride, width_c, height_opt, vflip);
423          }          }
424  }  }
425    
# Line 437  Line 448 
448                          src[0], src_stride[0], image->y, image->u, image->v,                          src[0], src_stride[0], image->y, image->u, image->v,
449                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
450                          interlacing?rgb555i_to_yv12  :rgb555_to_yv12,                          interlacing?rgb555i_to_yv12  :rgb555_to_yv12,
451                          interlacing?rgb555i_to_yv12_c:rgb555_to_yv12_c, 2);                          interlacing?rgb555i_to_yv12_c:rgb555_to_yv12_c, 2, interlacing);
452                  break;                  break;
453    
454          case XVID_CSP_RGB565:          case XVID_CSP_RGB565:
# Line 445  Line 456 
456                          src[0], src_stride[0], image->y, image->u, image->v,                          src[0], src_stride[0], image->y, image->u, image->v,
457                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
458                          interlacing?rgb565i_to_yv12  :rgb565_to_yv12,                          interlacing?rgb565i_to_yv12  :rgb565_to_yv12,
459                          interlacing?rgb565i_to_yv12_c:rgb565_to_yv12_c, 2);                          interlacing?rgb565i_to_yv12_c:rgb565_to_yv12_c, 2, interlacing);
460                  break;                  break;
461    
462    
# Line 454  Line 465 
465                          src[0], src_stride[0], image->y, image->u, image->v,                          src[0], src_stride[0], image->y, image->u, image->v,
466                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
467                          interlacing?bgri_to_yv12  :bgr_to_yv12,                          interlacing?bgri_to_yv12  :bgr_to_yv12,
468                          interlacing?bgri_to_yv12_c:bgr_to_yv12_c, 3);                          interlacing?bgri_to_yv12_c:bgr_to_yv12_c, 3, interlacing);
469                  break;                  break;
470    
471          case XVID_CSP_BGRA:          case XVID_CSP_BGRA:
# Line 462  Line 473 
473                          src[0], src_stride[0], image->y, image->u, image->v,                          src[0], src_stride[0], image->y, image->u, image->v,
474                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
475                          interlacing?bgrai_to_yv12  :bgra_to_yv12,                          interlacing?bgrai_to_yv12  :bgra_to_yv12,
476                          interlacing?bgrai_to_yv12_c:bgra_to_yv12_c, 4);                          interlacing?bgrai_to_yv12_c:bgra_to_yv12_c, 4, interlacing);
477                  break;                  break;
478    
479          case XVID_CSP_ABGR :          case XVID_CSP_ABGR :
# Line 470  Line 481 
481                          src[0], src_stride[0], image->y, image->u, image->v,                          src[0], src_stride[0], image->y, image->u, image->v,
482                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
483                          interlacing?abgri_to_yv12  :abgr_to_yv12,                          interlacing?abgri_to_yv12  :abgr_to_yv12,
484                          interlacing?abgri_to_yv12_c:abgr_to_yv12_c, 4);                          interlacing?abgri_to_yv12_c:abgr_to_yv12_c, 4, interlacing);
485                  break;                  break;
486    
487          case XVID_CSP_RGB:          case XVID_CSP_RGB:
# Line 478  Line 489 
489                          src[0], src_stride[0], image->y, image->u, image->v,                          src[0], src_stride[0], image->y, image->u, image->v,
490                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
491                          interlacing?rgbi_to_yv12  :rgb_to_yv12,                          interlacing?rgbi_to_yv12  :rgb_to_yv12,
492                          interlacing?rgbi_to_yv12_c:rgb_to_yv12_c, 3);                          interlacing?rgbi_to_yv12_c:rgb_to_yv12_c, 3, interlacing);
493                  break;                  break;
494    
495          case XVID_CSP_RGBA :          case XVID_CSP_RGBA :
# Line 486  Line 497 
497                          src[0], src_stride[0], image->y, image->u, image->v,                          src[0], src_stride[0], image->y, image->u, image->v,
498                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
499                          interlacing?rgbai_to_yv12  :rgba_to_yv12,                          interlacing?rgbai_to_yv12  :rgba_to_yv12,
500                          interlacing?rgbai_to_yv12_c:rgba_to_yv12_c, 4);                          interlacing?rgbai_to_yv12_c:rgba_to_yv12_c, 4, interlacing);
501                  break;                  break;
502    
503          case XVID_CSP_ARGB:          case XVID_CSP_ARGB:
# Line 494  Line 505 
505                          src[0], src_stride[0], image->y, image->u, image->v,                          src[0], src_stride[0], image->y, image->u, image->v,
506                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
507                          interlacing?argbi_to_yv12  : argb_to_yv12,                          interlacing?argbi_to_yv12  : argb_to_yv12,
508                          interlacing?argbi_to_yv12_c: argb_to_yv12_c, 4);                          interlacing?argbi_to_yv12_c: argb_to_yv12_c, 4, interlacing);
509                  break;                  break;
510    
511          case XVID_CSP_YUY2:          case XVID_CSP_YUY2:
# Line 502  Line 513 
513                          src[0], src_stride[0], image->y, image->u, image->v,                          src[0], src_stride[0], image->y, image->u, image->v,
514                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
515                          interlacing?yuyvi_to_yv12  :yuyv_to_yv12,                          interlacing?yuyvi_to_yv12  :yuyv_to_yv12,
516                          interlacing?yuyvi_to_yv12_c:yuyv_to_yv12_c, 2);                          interlacing?yuyvi_to_yv12_c:yuyv_to_yv12_c, 2, interlacing);
517                  break;                  break;
518    
519          case XVID_CSP_YVYU:             /* u/v swapped */          case XVID_CSP_YVYU:             /* u/v swapped */
# Line 510  Line 521 
521                          src[0], src_stride[0], image->y, image->v, image->u,                          src[0], src_stride[0], image->y, image->v, image->u,
522                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
523                          interlacing?yuyvi_to_yv12  :yuyv_to_yv12,                          interlacing?yuyvi_to_yv12  :yuyv_to_yv12,
524                          interlacing?yuyvi_to_yv12_c:yuyv_to_yv12_c, 2);                          interlacing?yuyvi_to_yv12_c:yuyv_to_yv12_c, 2, interlacing);
525                  break;                  break;
526    
527          case XVID_CSP_UYVY:          case XVID_CSP_UYVY:
# Line 518  Line 529 
529                          src[0], src_stride[0], image->y, image->u, image->v,                          src[0], src_stride[0], image->y, image->u, image->v,
530                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
531                          interlacing?uyvyi_to_yv12  :uyvy_to_yv12,                          interlacing?uyvyi_to_yv12  :uyvy_to_yv12,
532                          interlacing?uyvyi_to_yv12_c:uyvy_to_yv12_c, 2);                          interlacing?uyvyi_to_yv12_c:uyvy_to_yv12_c, 2, interlacing);
533                  break;                  break;
534    
535          case XVID_CSP_I420:     /* YCbCr == YUV == internal colorspace for MPEG */          case XVID_CSP_I420:     /* YCbCr == YUV == internal colorspace for MPEG */
# Line 622  Line 633 
633                          dst[0], dst_stride[0], image->y, image->u, image->v,                          dst[0], dst_stride[0], image->y, image->u, image->v,
634                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
635                          interlacing?yv12_to_rgb555i  :yv12_to_rgb555,                          interlacing?yv12_to_rgb555i  :yv12_to_rgb555,
636                          interlacing?yv12_to_rgb555i_c:yv12_to_rgb555_c, 2);                          interlacing?yv12_to_rgb555i_c:yv12_to_rgb555_c, 2, interlacing);
637                  return 0;                  return 0;
638    
639          case XVID_CSP_RGB565:          case XVID_CSP_RGB565:
# Line 630  Line 641 
641                          dst[0], dst_stride[0], image->y, image->u, image->v,                          dst[0], dst_stride[0], image->y, image->u, image->v,
642                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
643                          interlacing?yv12_to_rgb565i  :yv12_to_rgb565,                          interlacing?yv12_to_rgb565i  :yv12_to_rgb565,
644                          interlacing?yv12_to_rgb565i_c:yv12_to_rgb565_c, 2);                          interlacing?yv12_to_rgb565i_c:yv12_to_rgb565_c, 2, interlacing);
645                  return 0;                  return 0;
646    
647      case XVID_CSP_BGR:      case XVID_CSP_BGR:
# Line 638  Line 649 
649                          dst[0], dst_stride[0], image->y, image->u, image->v,                          dst[0], dst_stride[0], image->y, image->u, image->v,
650                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
651                          interlacing?yv12_to_bgri  :yv12_to_bgr,                          interlacing?yv12_to_bgri  :yv12_to_bgr,
652                          interlacing?yv12_to_bgri_c:yv12_to_bgr_c, 3);                          interlacing?yv12_to_bgri_c:yv12_to_bgr_c, 3, interlacing);
653                  return 0;                  return 0;
654    
655          case XVID_CSP_BGRA:          case XVID_CSP_BGRA:
# Line 646  Line 657 
657                          dst[0], dst_stride[0], image->y, image->u, image->v,                          dst[0], dst_stride[0], image->y, image->u, image->v,
658                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
659                          interlacing?yv12_to_bgrai  :yv12_to_bgra,                          interlacing?yv12_to_bgrai  :yv12_to_bgra,
660                          interlacing?yv12_to_bgrai_c:yv12_to_bgra_c, 4);                          interlacing?yv12_to_bgrai_c:yv12_to_bgra_c, 4, interlacing);
661                  return 0;                  return 0;
662    
663          case XVID_CSP_ABGR:          case XVID_CSP_ABGR:
# Line 654  Line 665 
665                          dst[0], dst_stride[0], image->y, image->u, image->v,                          dst[0], dst_stride[0], image->y, image->u, image->v,
666                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
667                          interlacing?yv12_to_abgri  :yv12_to_abgr,                          interlacing?yv12_to_abgri  :yv12_to_abgr,
668                          interlacing?yv12_to_abgri_c:yv12_to_abgr_c, 4);                          interlacing?yv12_to_abgri_c:yv12_to_abgr_c, 4, interlacing);
669                  return 0;                  return 0;
670    
671          case XVID_CSP_RGB:          case XVID_CSP_RGB:
# Line 662  Line 673 
673                          dst[0], dst_stride[0], image->y, image->u, image->v,                          dst[0], dst_stride[0], image->y, image->u, image->v,
674                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
675                          interlacing?yv12_to_rgbi  :yv12_to_rgb,                          interlacing?yv12_to_rgbi  :yv12_to_rgb,
676                          interlacing?yv12_to_rgbi_c:yv12_to_rgb_c, 3);                          interlacing?yv12_to_rgbi_c:yv12_to_rgb_c, 3, interlacing);
677                  return 0;                  return 0;
678    
679          case XVID_CSP_RGBA:          case XVID_CSP_RGBA:
# Line 670  Line 681 
681                          dst[0], dst_stride[0], image->y, image->u, image->v,                          dst[0], dst_stride[0], image->y, image->u, image->v,
682                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
683                          interlacing?yv12_to_rgbai  :yv12_to_rgba,                          interlacing?yv12_to_rgbai  :yv12_to_rgba,
684                          interlacing?yv12_to_rgbai_c:yv12_to_rgba_c, 4);                          interlacing?yv12_to_rgbai_c:yv12_to_rgba_c, 4, interlacing);
685                  return 0;                  return 0;
686    
687          case XVID_CSP_ARGB:          case XVID_CSP_ARGB:
# Line 678  Line 689 
689                          dst[0], dst_stride[0], image->y, image->u, image->v,                          dst[0], dst_stride[0], image->y, image->u, image->v,
690                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
691                          interlacing?yv12_to_argbi  :yv12_to_argb,                          interlacing?yv12_to_argbi  :yv12_to_argb,
692                          interlacing?yv12_to_argbi_c:yv12_to_argb_c, 4);                          interlacing?yv12_to_argbi_c:yv12_to_argb_c, 4, interlacing);
693                  return 0;                  return 0;
694    
695          case XVID_CSP_YUY2:          case XVID_CSP_YUY2:
# Line 686  Line 697 
697                          dst[0], dst_stride[0], image->y, image->u, image->v,                          dst[0], dst_stride[0], image->y, image->u, image->v,
698                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
699                          interlacing?yv12_to_yuyvi  :yv12_to_yuyv,                          interlacing?yv12_to_yuyvi  :yv12_to_yuyv,
700                          interlacing?yv12_to_yuyvi_c:yv12_to_yuyv_c, 2);                          interlacing?yv12_to_yuyvi_c:yv12_to_yuyv_c, 2, interlacing);
701                  return 0;                  return 0;
702    
703          case XVID_CSP_YVYU:             /* u,v swapped */          case XVID_CSP_YVYU:             /* u,v swapped */
# Line 694  Line 705 
705                          dst[0], dst_stride[0], image->y, image->v, image->u,                          dst[0], dst_stride[0], image->y, image->v, image->u,
706                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
707                          interlacing?yv12_to_yuyvi  :yv12_to_yuyv,                          interlacing?yv12_to_yuyvi  :yv12_to_yuyv,
708                          interlacing?yv12_to_yuyvi_c:yv12_to_yuyv_c, 2);                          interlacing?yv12_to_yuyvi_c:yv12_to_yuyv_c, 2, interlacing);
709                  return 0;                  return 0;
710    
711          case XVID_CSP_UYVY:          case XVID_CSP_UYVY:
# Line 702  Line 713 
713                          dst[0], dst_stride[0], image->y, image->u, image->v,                          dst[0], dst_stride[0], image->y, image->u, image->v,
714                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),                          edged_width, edged_width2, width, height, (csp & XVID_CSP_VFLIP),
715                          interlacing?yv12_to_uyvyi  :yv12_to_uyvy,                          interlacing?yv12_to_uyvyi  :yv12_to_uyvy,
716                          interlacing?yv12_to_uyvyi_c:yv12_to_uyvy_c, 2);                          interlacing?yv12_to_uyvyi_c:yv12_to_uyvy_c, 2, interlacing);
717                  return 0;                  return 0;
718    
719          case XVID_CSP_I420: /* YCbCr == YUV == internal colorspace for MPEG */          case XVID_CSP_I420: /* YCbCr == YUV == internal colorspace for MPEG */

Legend:
Removed from v.1814  
changed lines
  Added in v.1815

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