Want more features on Pastebin? Sign Up, it's FREE!
Guest

vaguely fast DXT1 encoder (YUV420, 8x8 blocks, untested)

By: cr88192 on Feb 9th, 2013  |  syntax: C  |  size: 11.46 KB  |  views: 30  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /*
  2. Copyright (C) 2013 by Brendan G Bohannon
  3. Email: cr88192@gmail.com
  4. Copying: http://pastebin.com/iJxtZHm6
  5.  */
  6.  
  7. void BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(byte *block,
  8.         short *pxy, short *pxu, short *pxv)
  9. {
  10.         int p0, p1, p2, p3;
  11.         int mcy, ncy, acy;
  12.         int acr, acg, acb;
  13.         int cy, cu, cv;
  14.         int cra, cga, cba;
  15.         int crb, cgb, cbb;
  16.         int u1, v1, l0, l1, l2;
  17.         int i, j, k;
  18.  
  19.         cu=(pxu[0]+pxu[1]+pxu[8]+pxu[9])>>2;
  20.         cv=(pxv[0]+pxv[1]+pxv[8]+pxv[9])>>2;
  21.  
  22.         mcy=pxy[0];     ncy=mcy;
  23.         i=pxy[ 1];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  24.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  25.         i=pxy[ 2];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  26.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  27.         i=pxy[ 3];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  28.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  29.         i=pxy[ 8];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  30.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  31.         i=pxy[ 9];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  32.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  33.         i=pxy[10];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  34.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  35.         i=pxy[11];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  36.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  37.         i=pxy[16];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  38.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  39.         i=pxy[17];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  40.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  41.         i=pxy[18];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  42.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  43.         i=pxy[19];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  44.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  45.         i=pxy[24];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  46.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  47.         i=pxy[25];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  48.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  49.         i=pxy[26];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  50.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  51.         i=pxy[27];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  52.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  53.  
  54.         acy=(mcy+ncy)>>1;
  55.  
  56.         u1=cu-128; v1=cv-128;
  57.         l0=91881*v1;
  58.         l1=-22554*u1-46802*v1;
  59.         l2=116130*u1;
  60.  
  61.         //EDIT: fixed math
  62.         cra=(65536*mcy+l0)>>16; cga=(65536*mcy+l1)>>16; cba=(65536*mcy+l2)>>16;
  63.         crb=(65536*ncy+l0)>>16; cgb=(65536*ncy+l1)>>16; cbb=(65536*ncy+l2)>>16;
  64.  
  65.         if((cra|cga|cba|crb|cgb|cbb)&(~255))
  66.         {
  67.                 cra=(cra<0)?0:((cra>255)?255:cra);
  68.                 cga=(cga<0)?0:((cga>255)?255:cga);
  69.                 cba=(cba<0)?0:((cba>255)?255:cba);
  70.                 crb=(crb<0)?0:((crb>255)?255:crb);
  71.                 cgb=(cgb<0)?0:((cgb>255)?255:cgb);
  72.                 cbb=(cbb<0)?0:((cbb>255)?255:cbb);
  73.         }
  74.  
  75.         i=((cra<<8)&0xF800) | ((cga<<3)&0x07E0) | (cba>>3);
  76.         j=((crb<<8)&0xF800) | ((cgb<<3)&0x07E0) | (cbb>>3);
  77.  
  78.         block[0]=i;             block[1]=i>>8;
  79.         block[2]=j;             block[3]=j>>8;
  80.  
  81.         p0=-((acy-pxy[ 0])>>16);
  82.         p1=-((acy-pxy[ 1])>>16);
  83.         p2=-((acy-pxy[ 2])>>16);
  84.         p3=-((acy-pxy[ 3])>>16);
  85.         block[4]=(p3<<6)|(p2<<4)|(p1<<2)|p0;
  86.         p0=-((acy-pxy[ 8])>>16);
  87.         p1=-((acy-pxy[ 9])>>16);
  88.         p2=-((acy-pxy[10])>>16);
  89.         p3=-((acy-pxy[11])>>16);
  90.         block[5]=(p3<<6)|(p2<<4)|(p1<<2)|p0;
  91.         p0=-((acy-pxy[16])>>16);
  92.         p1=-((acy-pxy[17])>>16);
  93.         p2=-((acy-pxy[18])>>16);
  94.         p3=-((acy-pxy[19])>>16);
  95.         block[6]=(p3<<6)|(p2<<4)|(p1<<2)|p0;
  96.         p0=-((acy-pxy[24])>>16);
  97.         p1=-((acy-pxy[25])>>16);
  98.         p2=-((acy-pxy[26])>>16);
  99.         p3=-((acy-pxy[27])>>16);
  100.         block[7]=(p3<<6)|(p2<<4)|(p1<<2)|p0;
  101. }
  102.  
  103.  
  104. /*
  105. Alternate Version
  106. Flipped vertically, uses DXT5 interpolation (via index table).
  107. true DXT1 is color1/color2/average/transparent
  108.         { 0,0,0,0, 0,0,2,2, 2,2,1,1, 1,1,1,1 };
  109. The use of interpolation is mostly for slightly higher image quality.
  110. */
  111.  
  112. void BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(byte *block,
  113.         short *pxy, short *pxu, short *pxv)
  114. {
  115.         static const char idxtab[16]=
  116.                 { 0,0,0,0, 0,0,2,2, 3,3,1,1, 1,1,1,1 };
  117.  
  118.         int p0, p1, p2, p3;
  119.         int mcy, ncy, acy;
  120.         int acr, acg, acb;
  121.         int cy, cu, cv;
  122.         int cra, cga, cba;
  123.         int crb, cgb, cbb;
  124.         int u1, v1, l0, l1, l2;
  125.         int i, j, k;
  126.  
  127.         cu=(pxu[0]+pxu[1]+pxu[8]+pxu[9])>>2;
  128.         cv=(pxv[0]+pxv[1]+pxv[8]+pxv[9])>>2;
  129.  
  130.         mcy=pxy[0];     ncy=mcy;
  131.         i=pxy[ 1];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  132.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  133.         i=pxy[ 2];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  134.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  135.         i=pxy[ 3];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  136.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  137.         i=pxy[ 8];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  138.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  139.         i=pxy[ 9];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  140.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  141.         i=pxy[10];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  142.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  143.         i=pxy[11];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  144.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  145.         i=pxy[16];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  146.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  147.         i=pxy[17];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  148.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  149.         i=pxy[18];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  150.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  151.         i=pxy[19];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  152.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  153.         i=pxy[24];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  154.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  155.         i=pxy[25];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  156.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  157.         i=pxy[26];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  158.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  159.         i=pxy[27];      j=(i-mcy)>>24; k=(ncy-i)>>24;
  160.         mcy=(j&i)|((~j)&mcy); ncy=(k&i)|((~k)&ncy);
  161.  
  162.         acy=(mcy+ncy)>>1;
  163.  
  164.         u1=cu-128; v1=cv-128;
  165.         l0=359*v1;
  166.         l1=-88*u1-183*v1;
  167.         l2=454*u1;
  168.  
  169.         cra=(256*mcy+l0)>>8;    cga=(256*mcy+l1)>>8;    cba=(256*mcy+l2)>>8;
  170.         crb=(256*ncy+l0)>>8;    cgb=(256*ncy+l1)>>8;    cbb=(256*ncy+l2)>>8;
  171.         if((cra|cga|cba|crb|cgb|cbb)&(~255))
  172.         {
  173.                 cra=(cra<0)?0:((cra>255)?255:cra);
  174.                 cga=(cga<0)?0:((cga>255)?255:cga);
  175.                 cba=(cba<0)?0:((cba>255)?255:cba);
  176.                 crb=(crb<0)?0:((crb>255)?255:crb);
  177.                 cgb=(cgb<0)?0:((cgb>255)?255:cgb);
  178.                 cbb=(cbb<0)?0:((cbb>255)?255:cbb);
  179.         }
  180.  
  181.         i=((cra<<8)&0xF800) | ((cga<<3)&0x07E0) | (cba>>3);
  182.         j=((crb<<8)&0xF800) | ((cgb<<3)&0x07E0) | (cbb>>3);
  183.         block[0]=i;             block[1]=i>>8;
  184.         block[2]=j;             block[3]=j>>8;
  185.  
  186.         if(i==j)
  187.         {
  188.                 block[4]=0;     block[5]=0;
  189.                 block[6]=0;     block[7]=0;
  190.                 return;
  191.         }
  192.  
  193. //      l0=(256+64)/(ncy-acy+1);
  194.         l0=32768/(ncy-acy+1);           //Quality FIX
  195.  
  196.         p0=idxtab[(((pxy[24]-acy)*l0)>>13)+8];
  197.         p1=idxtab[(((pxy[25]-acy)*l0)>>13)+8];
  198.         p2=idxtab[(((pxy[26]-acy)*l0)>>13)+8];
  199.         p3=idxtab[(((pxy[27]-acy)*l0)>>13)+8];
  200.         block[4]=(p3<<6)|(p2<<4)|(p1<<2)|p0;
  201.         p0=idxtab[(((pxy[16]-acy)*l0)>>13)+8];
  202.         p1=idxtab[(((pxy[17]-acy)*l0)>>13)+8];
  203.         p2=idxtab[(((pxy[18]-acy)*l0)>>13)+8];
  204.         p3=idxtab[(((pxy[19]-acy)*l0)>>13)+8];
  205.         block[5]=(p3<<6)|(p2<<4)|(p1<<2)|p0;
  206.         p0=idxtab[(((pxy[ 8]-acy)*l0)>>13)+8];
  207.         p1=idxtab[(((pxy[ 9]-acy)*l0)>>13)+8];
  208.         p2=idxtab[(((pxy[10]-acy)*l0)>>13)+8];
  209.         p3=idxtab[(((pxy[11]-acy)*l0)>>13)+8];
  210.         block[6]=(p3<<6)|(p2<<4)|(p1<<2)|p0;
  211.         p0=idxtab[(((pxy[ 0]-acy)*l0)>>13)+8];
  212.         p1=idxtab[(((pxy[ 1]-acy)*l0)>>13)+8];
  213.         p2=idxtab[(((pxy[ 2]-acy)*l0)>>13)+8];
  214.         p3=idxtab[(((pxy[ 3]-acy)*l0)>>13)+8];
  215.         block[7]=(p3<<6)|(p2<<4)|(p1<<2)|p0;
  216. }
  217.  
  218.  
  219. //Logic for YUV -> DXT
  220.  
  221. int BGBBTJ_JPG_DecodeColorTransform_YCbCr420_DXT1(
  222.         BGBBTJ_JPG_Context *ctx, byte *obuf, int xs, int ys, int stride)
  223. {
  224.         short *yblk, *ublk, *vblk;
  225.         byte *oblk;
  226.         int xs1, ys1, xs2, ys2, xs3, ys3, xs4, ys4;
  227.         int i, j, k, i1;
  228.  
  229.         xs1=xs>>1; ys1=ys>>1;
  230.         xs2=xs>>2; ys2=ys>>2;
  231.         xs3=xs>>3; ys3=ys>>3;
  232.         xs4=xs>>4; ys4=ys>>4;
  233.  
  234.         for(i=0; i<ys4; i++)
  235.                 for(j=0; j<xs4; j++)
  236.         {
  237.                 k=i*xs4+j;
  238.                 ublk=ctx->jpg_sibuf[1]+k*64;
  239.                 vblk=ctx->jpg_sibuf[2]+k*64;
  240.  
  241. #if 1   //Vertical Flip
  242.                 i1=ys4-i-1;
  243.  
  244.                 k=((i*2+0)*xs3)+(j*2+0);
  245.                 yblk=ctx->jpg_sibuf[0]+k*64;
  246.  
  247.                 k=((i1*4+3)*xs2)+(j*4+0); oblk=obuf+k*stride;
  248.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+0, ublk+0, vblk+0);
  249.                 k=((i1*4+3)*xs2)+(j*4+1); oblk=obuf+k*stride;
  250.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+4, ublk+2, vblk+2);
  251.                 k=((i1*4+2)*xs2)+(j*4+0); oblk=obuf+k*stride;
  252.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+32, ublk+16, vblk+16);
  253.                 k=((i1*4+2)*xs2)+(j*4+1); oblk=obuf+k*stride;
  254.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+36, ublk+18, vblk+18);
  255.  
  256.                 k=((i*2+0)*xs3)+(j*2+1);
  257.                 yblk=ctx->jpg_sibuf[0]+k*64;
  258.        
  259.                 k=((i1*4+3)*xs2)+(j*4+2); oblk=obuf+k*stride;
  260.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+0, ublk+4, vblk+4);
  261.                 k=((i1*4+3)*xs2)+(j*4+3); oblk=obuf+k*stride;
  262.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+4, ublk+6, vblk+6);
  263.                 k=((i1*4+2)*xs2)+(j*4+2); oblk=obuf+k*stride;
  264.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+32, ublk+20, vblk+20);
  265.                 k=((i1*4+2)*xs2)+(j*4+3); oblk=obuf+k*stride;
  266.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+36, ublk+22, vblk+22);
  267.  
  268.                 k=((i*2+1)*xs3)+(j*2+0);
  269.                 yblk=ctx->jpg_sibuf[0]+k*64;
  270.        
  271.                 k=((i1*4+1)*xs2)+(j*4+0); oblk=obuf+k*stride;
  272.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+0, ublk+32, vblk+32);
  273.                 k=((i1*4+1)*xs2)+(j*4+1); oblk=obuf+k*stride;
  274.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+4, ublk+34, vblk+34);
  275.                 k=((i1*4+0)*xs2)+(j*4+0); oblk=obuf+k*stride;
  276.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+32, ublk+48, vblk+48);
  277.                 k=((i1*4+0)*xs2)+(j*4+1); oblk=obuf+k*stride;
  278.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+36, ublk+50, vblk+50);
  279.  
  280.                 k=((i*2+1)*xs3)+(j*2+1);
  281.                 yblk=ctx->jpg_sibuf[0]+k*64;
  282.        
  283.                 k=((i1*4+1)*xs2)+(j*4+2); oblk=obuf+k*stride;
  284.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+0, ublk+36, vblk+36);
  285.                 k=((i1*4+1)*xs2)+(j*4+3); oblk=obuf+k*stride;
  286.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+4, ublk+38, vblk+38);
  287.                 k=((i1*4+0)*xs2)+(j*4+2); oblk=obuf+k*stride;
  288.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+32, ublk+52, vblk+52);
  289.                 k=((i1*4+0)*xs2)+(j*4+3); oblk=obuf+k*stride;
  290.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+36, ublk+54, vblk+54);
  291. #endif
  292.  
  293. #if 0   //No Vertical Flip
  294.                 k=((i*2+0)*xs3)+(j*2+0);
  295.                 yblk=ctx->jpg_sibuf[0]+k*64;
  296.  
  297.                 k=((i*4+0)*xs2)+(j*4+0); oblk=obuf+k*stride;
  298.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+0, ublk+0, vblk+0);
  299.                 k=((i*4+0)*xs2)+(j*4+1); oblk=obuf+k*stride;
  300.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+4, ublk+2, vblk+2);
  301.                 k=((i*4+1)*xs2)+(j*4+0); oblk=obuf+k*stride;
  302.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+32, ublk+16, vblk+16);
  303.                 k=((i*4+1)*xs2)+(j*4+1); oblk=obuf+k*stride;
  304.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+36, ublk+18, vblk+18);
  305.  
  306.                 k=((i*2+0)*xs3)+(j*2+1);
  307.                 yblk=ctx->jpg_sibuf[0]+k*64;
  308.        
  309.                 k=((i*4+0)*xs2)+(j*4+2); oblk=obuf+k*stride;
  310.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+0, ublk+4, vblk+4);
  311.                 k=((i*4+0)*xs2)+(j*4+3); oblk=obuf+k*stride;
  312.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+4, ublk+6, vblk+6);
  313.                 k=((i*4+1)*xs2)+(j*4+2); oblk=obuf+k*stride;
  314.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+32, ublk+20, vblk+20);
  315.                 k=((i*4+1)*xs2)+(j*4+3); oblk=obuf+k*stride;
  316.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+36, ublk+22, vblk+22);
  317.  
  318.                 k=((i*2+1)*xs3)+(j*2+0);
  319.                 yblk=ctx->jpg_sibuf[0]+k*64;
  320.        
  321.                 k=((i*4+2)*xs2)+(j*4+0); oblk=obuf+k*stride;
  322.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+0, ublk+32, vblk+32);
  323.                 k=((i*4+2)*xs2)+(j*4+1); oblk=obuf+k*stride;
  324.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+4, ublk+34, vblk+34);
  325.                 k=((i*4+3)*xs2)+(j*4+0); oblk=obuf+k*stride;
  326.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+32, ublk+48, vblk+48);
  327.                 k=((i*4+3)*xs2)+(j*4+1); oblk=obuf+k*stride;
  328.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+36, ublk+50, vblk+50);
  329.  
  330.                 k=((i*2+1)*xs3)+(j*2+1);
  331.                 yblk=ctx->jpg_sibuf[0]+k*64;
  332.        
  333.                 k=((i*4+2)*xs2)+(j*4+2); oblk=obuf+k*stride;
  334.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+0, ublk+36, vblk+36);
  335.                 k=((i*4+2)*xs2)+(j*4+3); oblk=obuf+k*stride;
  336.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+4, ublk+38, vblk+38);
  337.                 k=((i*4+3)*xs2)+(j*4+2); oblk=obuf+k*stride;
  338.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+32, ublk+52, vblk+52);
  339.                 k=((i*4+3)*xs2)+(j*4+3); oblk=obuf+k*stride;
  340.                 BGBBTJ_BCn_EncodeBlockDXT1F_YUV420(oblk, yblk+36, ublk+54, vblk+54);
  341. #endif
  342.  
  343.         }
  344. }
clone this paste RAW Paste Data