cr88192

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

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