home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 275 / DPCS0111DVD.ISO / Toolkit / Audio-Visual / VirtualDub / Source / VirtualDub-1.9.10-src.7z / src / Kasumi / source / blt_x86.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-14  |  7.2 KB  |  145 lines

  1. #include <vd2/system/vdtypes.h>
  2. #include <vd2/Kasumi/pixmap.h>
  3. #include <vd2/Kasumi/pixmaputils.h>
  4. #include "blt_setup.h"
  5.  
  6. void VDPixmapInitBlittersReference(VDPixmapBlitterTable& table);
  7.  
  8. #define DECLARE_PALETTED(x, y) extern void VDPixmapBlt_##x##_to_##y##_reference(void *dst0, ptrdiff_t dstpitch, const void *src0, ptrdiff_t srcpitch, vdpixsize w, vdpixsize h, const void *pal0);
  9. #define DECLARE_RGB(x, y) extern void VDPixmapBlt_##x##_to_##y##_reference(void *dst0, ptrdiff_t dstpitch, const void *src0, ptrdiff_t srcpitch, vdpixsize w, vdpixsize h);
  10. #define DECLARE_RGB_ASM(x, y) extern "C" void vdasm_pixblt_##x##_to_##y(void *dst0, ptrdiff_t dstpitch, const void *src0, ptrdiff_t srcpitch, vdpixsize w, vdpixsize h);
  11. #define DECLARE_RGB_ASM_MMX(x, y) extern "C" void vdasm_pixblt_##x##_to_##y##_MMX(void *dst0, ptrdiff_t dstpitch, const void *src0, ptrdiff_t srcpitch, vdpixsize w, vdpixsize h);
  12. #define DECLARE_YUV(x, y) extern void VDPixmapBlt_##x##_to_##y##_reference(void *dst0, ptrdiff_t dstpitch, const void *src0, ptrdiff_t srcpitch, vdpixsize w, vdpixsize h);
  13. #define DECLARE_YUV_REV(x, y) void VDPixmapBlt_##x##_to_##y##_reference(void *dst0, ptrdiff_t dstpitch, const void *src0, ptrdiff_t srcpitch, vdpixsize w, vdpixsize h)
  14. #define DECLARE_YUV_PLANAR(x, y) extern void VDPixmapBlt_##x##_to_##y##_reference(const VDPixmap& dst, const VDPixmap& src, vdpixsize w, vdpixsize h);
  15.  
  16.                                     DECLARE_RGB_ASM(RGB565,      XRGB1555);    DECLARE_RGB_ASM_MMX(RGB565,   XRGB1555);
  17.                                     DECLARE_RGB_ASM(RGB888,   XRGB1555);
  18.                                     DECLARE_RGB_ASM(XRGB8888, XRGB1555);    DECLARE_RGB_ASM_MMX(XRGB8888, XRGB1555);
  19.                                     DECLARE_RGB_ASM(XRGB1555, RGB565);        DECLARE_RGB_ASM_MMX(XRGB1555, RGB565);
  20.                                     DECLARE_RGB_ASM(RGB888,   RGB565);
  21.                                     DECLARE_RGB_ASM(XRGB8888, RGB565);        DECLARE_RGB_ASM_MMX(XRGB8888, RGB565);
  22. DECLARE_RGB(XRGB1555, RGB888);
  23. DECLARE_RGB(RGB565,   RGB888);
  24.                                     DECLARE_RGB_ASM(XRGB8888, RGB888);        DECLARE_RGB_ASM_MMX(XRGB8888, RGB888);
  25.                                     DECLARE_RGB_ASM(XRGB1555, XRGB8888);    DECLARE_RGB_ASM_MMX(XRGB1555, XRGB8888);
  26.                                     DECLARE_RGB_ASM(RGB565,   XRGB8888);    DECLARE_RGB_ASM_MMX(RGB565,   XRGB8888);
  27.                                     DECLARE_RGB_ASM(RGB888,   XRGB8888);    DECLARE_RGB_ASM_MMX(RGB888,   XRGB8888);
  28.  
  29. DECLARE_PALETTED(Pal1, Any8);
  30. DECLARE_PALETTED(Pal1, Any16);
  31. DECLARE_PALETTED(Pal1, Any24);
  32. DECLARE_PALETTED(Pal1, Any32);
  33. DECLARE_PALETTED(Pal2, Any8);
  34. DECLARE_PALETTED(Pal2, Any16);
  35. DECLARE_PALETTED(Pal2, Any24);
  36. DECLARE_PALETTED(Pal2, Any32);
  37. DECLARE_PALETTED(Pal4, Any8);
  38. DECLARE_PALETTED(Pal4, Any16);
  39. DECLARE_PALETTED(Pal4, Any24);
  40. DECLARE_PALETTED(Pal4, Any32);
  41. DECLARE_PALETTED(Pal8, Any8);
  42. DECLARE_PALETTED(Pal8, Any16);
  43. DECLARE_PALETTED(Pal8, Any24);
  44. DECLARE_PALETTED(Pal8, Any32);
  45.  
  46. DECLARE_YUV(XVYU, UYVY);
  47. DECLARE_YUV(XVYU, YUYV);
  48. DECLARE_YUV(Y8, UYVY);
  49. DECLARE_YUV(Y8, YUYV);
  50. DECLARE_YUV(UYVY, Y8);
  51. DECLARE_YUV(YUYV, Y8);
  52. DECLARE_YUV(UYVY, YUYV);
  53. DECLARE_YUV_PLANAR(YUV411, YV12);
  54.  
  55. DECLARE_YUV(UYVY, XRGB1555);
  56. DECLARE_YUV(UYVY, RGB565);
  57. DECLARE_YUV(UYVY, RGB888);
  58. DECLARE_YUV(UYVY, XRGB8888);
  59. DECLARE_YUV(YUYV, XRGB1555);
  60. DECLARE_YUV(YUYV, RGB565);
  61. DECLARE_YUV(YUYV, RGB888);
  62. DECLARE_YUV(YUYV, XRGB8888);
  63. DECLARE_YUV(Y8, XRGB1555);
  64. DECLARE_YUV(Y8, RGB565);
  65. DECLARE_YUV(Y8, RGB888);
  66. DECLARE_YUV(Y8, XRGB8888);
  67.  
  68. DECLARE_YUV_REV(XRGB1555, Y8);
  69. DECLARE_YUV_REV(RGB565,   Y8);
  70. DECLARE_YUV_REV(RGB888,   Y8);
  71. DECLARE_YUV_REV(XRGB8888, Y8);
  72.  
  73. DECLARE_YUV_REV(XRGB1555, XVYU);
  74. DECLARE_YUV_REV(RGB565,   XVYU);
  75. DECLARE_YUV_REV(RGB888,   XVYU);
  76. DECLARE_YUV_REV(XRGB8888, XVYU);
  77.  
  78. DECLARE_YUV_PLANAR(YV12, XRGB1555);
  79. DECLARE_YUV_PLANAR(YV12, RGB565);
  80. DECLARE_YUV_PLANAR(YV12, RGB888);
  81. DECLARE_YUV_PLANAR(YV12, XRGB8888);
  82.  
  83. DECLARE_YUV_PLANAR(YUV411, XRGB1555);
  84. DECLARE_YUV_PLANAR(YUV411, RGB565);
  85. DECLARE_YUV_PLANAR(YUV411, RGB888);
  86. DECLARE_YUV_PLANAR(YUV411, XRGB8888);
  87.  
  88. extern void VDPixmapBlt_YUVPlanar_decode_reference(const VDPixmap& dst, const VDPixmap& src, vdpixsize w, vdpixsize h);
  89. extern void VDPixmapBlt_YUVPlanar_encode_reference(const VDPixmap& dst, const VDPixmap& src, vdpixsize w, vdpixsize h);
  90. extern void VDPixmapBlt_YUVPlanar_convert_reference(const VDPixmap& dst, const VDPixmap& src, vdpixsize w, vdpixsize h);
  91.  
  92. using namespace nsVDPixmap;
  93.  
  94. void VDPixmapInitBlittersX86(VDPixmapBlitterTable& table) {
  95.     VDPixmapInitBlittersReference(table);
  96.  
  97.     table.AddBlitter(kPixFormat_XRGB1555,    kPixFormat_RGB565,        VDPixmapBlitterChunkyAdapter<vdasm_pixblt_XRGB1555_to_RGB565>);
  98.     table.AddBlitter(kPixFormat_XRGB1555,    kPixFormat_XRGB8888,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_XRGB1555_to_XRGB8888>);
  99.     table.AddBlitter(kPixFormat_RGB565,        kPixFormat_XRGB1555,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_RGB565_to_XRGB1555>);
  100.     table.AddBlitter(kPixFormat_RGB565,        kPixFormat_XRGB8888,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_RGB565_to_XRGB8888>);
  101.     table.AddBlitter(kPixFormat_RGB888,        kPixFormat_XRGB1555,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_RGB888_to_XRGB1555>);
  102.     table.AddBlitter(kPixFormat_RGB888,        kPixFormat_RGB565,        VDPixmapBlitterChunkyAdapter<vdasm_pixblt_RGB888_to_RGB565>);
  103.     table.AddBlitter(kPixFormat_RGB888,        kPixFormat_XRGB8888,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_RGB888_to_XRGB8888>);
  104.     table.AddBlitter(kPixFormat_XRGB8888,    kPixFormat_XRGB1555,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_XRGB8888_to_XRGB1555>);
  105.     table.AddBlitter(kPixFormat_XRGB8888,    kPixFormat_RGB565,        VDPixmapBlitterChunkyAdapter<vdasm_pixblt_XRGB8888_to_RGB565>);
  106.     table.AddBlitter(kPixFormat_XRGB8888,    kPixFormat_RGB888,        VDPixmapBlitterChunkyAdapter<vdasm_pixblt_XRGB8888_to_RGB888>);
  107. }
  108.  
  109. tpVDPixBltTable VDGetPixBltTableX86ScalarInternal() {
  110.     static VDPixmapBlitterTable sReferenceTable;
  111.  
  112.     VDPixmapInitBlittersX86(sReferenceTable);
  113.  
  114.     return sReferenceTable.mTable;
  115. }
  116.  
  117. tpVDPixBltTable VDGetPixBltTableX86MMXInternal() {
  118.     static VDPixmapBlitterTable sReferenceTable;
  119.  
  120.     VDPixmapInitBlittersX86(sReferenceTable);
  121.  
  122.     sReferenceTable.AddBlitter(kPixFormat_XRGB1555,    kPixFormat_RGB565,        VDPixmapBlitterChunkyAdapter<vdasm_pixblt_XRGB1555_to_RGB565_MMX>);
  123.     sReferenceTable.AddBlitter(kPixFormat_XRGB1555,    kPixFormat_XRGB8888,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_XRGB1555_to_XRGB8888_MMX>);
  124.     sReferenceTable.AddBlitter(kPixFormat_RGB565,    kPixFormat_XRGB1555,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_RGB565_to_XRGB1555_MMX>);
  125.     sReferenceTable.AddBlitter(kPixFormat_RGB565,    kPixFormat_XRGB8888,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_RGB565_to_XRGB8888_MMX>);
  126.     sReferenceTable.AddBlitter(kPixFormat_RGB888,    kPixFormat_XRGB8888,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_RGB888_to_XRGB8888_MMX>);
  127.     sReferenceTable.AddBlitter(kPixFormat_XRGB8888,    kPixFormat_XRGB1555,    VDPixmapBlitterChunkyAdapter<vdasm_pixblt_XRGB8888_to_XRGB1555_MMX>);
  128.     sReferenceTable.AddBlitter(kPixFormat_XRGB8888,    kPixFormat_RGB565,        VDPixmapBlitterChunkyAdapter<vdasm_pixblt_XRGB8888_to_RGB565_MMX>);
  129.     sReferenceTable.AddBlitter(kPixFormat_XRGB8888,    kPixFormat_RGB888,        VDPixmapBlitterChunkyAdapter<vdasm_pixblt_XRGB8888_to_RGB888_MMX>);
  130.  
  131.     return sReferenceTable.mTable;
  132. }
  133.  
  134. tpVDPixBltTable VDGetPixBltTableX86Scalar() {
  135.     static tpVDPixBltTable spTable = VDGetPixBltTableX86ScalarInternal();
  136.  
  137.     return spTable;
  138. }
  139.  
  140. tpVDPixBltTable VDGetPixBltTableX86MMX() {
  141.     static tpVDPixBltTable spTable = VDGetPixBltTableX86MMXInternal();
  142.  
  143.     return spTable;
  144. }
  145.