Advertisement
cr88192

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

Feb 9th, 2013
195
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. 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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement