亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pngvcrd.c

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* pngvcrd.c - mixed C/assembler version of utilities to read a PNG file * * For Intel x86 CPU and Microsoft Visual C++ compiler * * libpng version 1.2.8 - December 3, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * Copyright (c) 1998, Intel Corporation * * Contributed by Nirav Chhatrapati, Intel Corporation, 1998 * Interface to libpng contributed by Gilles Vollant, 1999 * * * In png_do_read_interlace() in libpng versions 1.0.3a through 1.0.4d, * a sign error in the post-MMX cleanup code for each pixel_depth resulted * in bad pixels at the beginning of some rows of some images, and also * (due to out-of-range memory reads and writes) caused heap corruption * when compiled with MSVC 6.0.  The error was fixed in version 1.0.4e. * * [png_read_filter_row_mmx_avg() bpp == 2 bugfix, GRR 20000916] * * [runtime MMX configuration, GRR 20010102] * */#define PNG_INTERNAL#include "png.h"#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGVCRD)static int mmx_supported=2;int PNGAPIpng_mmx_support(void){  int mmx_supported_local = 0;  _asm {    push ebx          //CPUID will trash these    push ecx    push edx    pushfd            //Save Eflag to stack    pop eax           //Get Eflag from stack into eax    mov ecx, eax      //Make another copy of Eflag in ecx    xor eax, 0x200000 //Toggle ID bit in Eflag [i.e. bit(21)]    push eax          //Save modified Eflag back to stack    popfd             //Restored modified value back to Eflag reg    pushfd            //Save Eflag to stack    pop eax           //Get Eflag from stack    push ecx          // save original Eflag to stack    popfd             // restore original Eflag    xor eax, ecx      //Compare the new Eflag with the original Eflag    jz NOT_SUPPORTED  //If the same, CPUID instruction is not supported,                      //skip following instructions and jump to                      //NOT_SUPPORTED label    xor eax, eax      //Set eax to zero    _asm _emit 0x0f   //CPUID instruction  (two bytes opcode)    _asm _emit 0xa2    cmp eax, 1        //make sure eax return non-zero value    jl NOT_SUPPORTED  //If eax is zero, mmx not supported    xor eax, eax      //set eax to zero    inc eax           //Now increment eax to 1.  This instruction is                      //faster than the instruction "mov eax, 1"    _asm _emit 0x0f   //CPUID instruction    _asm _emit 0xa2    and edx, 0x00800000  //mask out all bits but mmx bit(24)    cmp edx, 0        // 0 = mmx not supported    jz  NOT_SUPPORTED // non-zero = Yes, mmx IS supported    mov  mmx_supported_local, 1  //set return value to 1NOT_SUPPORTED:    mov  eax, mmx_supported_local  //move return value to eax    pop edx          //CPUID trashed these    pop ecx    pop ebx  }  //mmx_supported_local=0; // test code for force don't support MMX  //printf("MMX : %u (1=MMX supported)\n",mmx_supported_local);  mmx_supported = mmx_supported_local;  return mmx_supported_local;}/* Combines the row recently read in with the previous row.   This routine takes care of alpha and transparency if requested.   This routine also handles the two methods of progressive display   of interlaced images, depending on the mask value.   The mask value describes which pixels are to be combined with   the row.  The pattern always repeats every 8 pixels, so just 8   bits are needed.  A one indicates the pixel is to be combined; a   zero indicates the pixel is to be skipped.  This is in addition   to any alpha or transparency value associated with the pixel.  If   you want all pixels to be combined, pass 0xff (255) in mask.  *//* Use this routine for x86 platform - uses faster MMX routine if machine   supports MMX */void /* PRIVATE */png_combine_row(png_structp png_ptr, png_bytep row, int mask){#ifdef PNG_USE_LOCAL_ARRAYS   const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};#endif   png_debug(1,"in png_combine_row_asm\n");   if (mmx_supported == 2) {#if !defined(PNG_1_0_X)       /* this should have happened in png_init_mmx_flags() already */       png_warning(png_ptr, "asm_flags may not have been initialized");#endif       png_mmx_support();   }   if (mask == 0xff)   {      png_memcpy(row, png_ptr->row_buf + 1,       (png_size_t)PNG_ROWBYTES(png_ptr->row_info.pixel_depth,       png_ptr->width));   }   /* GRR:  add "else if (mask == 0)" case?    *       or does png_combine_row() not even get called in that case? */   else   {      switch (png_ptr->row_info.pixel_depth)      {         case 1:         {            png_bytep sp;            png_bytep dp;            int s_inc, s_start, s_end;            int m;            int shift;            png_uint_32 i;            sp = png_ptr->row_buf + 1;            dp = row;            m = 0x80;#if defined(PNG_READ_PACKSWAP_SUPPORTED)            if (png_ptr->transformations & PNG_PACKSWAP)            {                s_start = 0;                s_end = 7;                s_inc = 1;            }            else#endif            {                s_start = 7;                s_end = 0;                s_inc = -1;            }            shift = s_start;            for (i = 0; i < png_ptr->width; i++)            {               if (m & mask)               {                  int value;                  value = (*sp >> shift) & 0x1;                  *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);                  *dp |= (png_byte)(value << shift);               }               if (shift == s_end)               {                  shift = s_start;                  sp++;                  dp++;               }               else                  shift += s_inc;               if (m == 1)                  m = 0x80;               else                  m >>= 1;            }            break;         }         case 2:         {            png_bytep sp;            png_bytep dp;            int s_start, s_end, s_inc;            int m;            int shift;            png_uint_32 i;            int value;            sp = png_ptr->row_buf + 1;            dp = row;            m = 0x80;#if defined(PNG_READ_PACKSWAP_SUPPORTED)            if (png_ptr->transformations & PNG_PACKSWAP)            {               s_start = 0;               s_end = 6;               s_inc = 2;            }            else#endif            {               s_start = 6;               s_end = 0;               s_inc = -2;            }            shift = s_start;            for (i = 0; i < png_ptr->width; i++)            {               if (m & mask)               {                  value = (*sp >> shift) & 0x3;                  *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);                  *dp |= (png_byte)(value << shift);               }               if (shift == s_end)               {                  shift = s_start;                  sp++;                  dp++;               }               else                  shift += s_inc;               if (m == 1)                  m = 0x80;               else                  m >>= 1;            }            break;         }         case 4:         {            png_bytep sp;            png_bytep dp;            int s_start, s_end, s_inc;            int m;            int shift;            png_uint_32 i;            int value;            sp = png_ptr->row_buf + 1;            dp = row;            m = 0x80;#if defined(PNG_READ_PACKSWAP_SUPPORTED)            if (png_ptr->transformations & PNG_PACKSWAP)            {               s_start = 0;               s_end = 4;               s_inc = 4;            }            else#endif            {               s_start = 4;               s_end = 0;               s_inc = -4;            }            shift = s_start;            for (i = 0; i < png_ptr->width; i++)            {               if (m & mask)               {                  value = (*sp >> shift) & 0xf;                  *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);                  *dp |= (png_byte)(value << shift);               }               if (shift == s_end)               {                  shift = s_start;                  sp++;                  dp++;               }               else                  shift += s_inc;               if (m == 1)                  m = 0x80;               else                  m >>= 1;            }            break;         }         case 8:         {            png_bytep srcptr;            png_bytep dstptr;            png_uint_32 len;            int m;            int diff, unmask;            __int64 mask0=0x0102040810204080;#if !defined(PNG_1_0_X)            if ((png_ptr->asm_flags & PNG_ASM_FLAG_MMX_READ_COMBINE_ROW)                /* && mmx_supported */ )#else            if (mmx_supported)#endif            {               srcptr = png_ptr->row_buf + 1;               dstptr = row;               m = 0x80;               unmask = ~mask;               len  = png_ptr->width &~7;  //reduce to multiple of 8               diff = png_ptr->width & 7;  //amount lost               _asm               {                  movd       mm7, unmask   //load bit pattern                  psubb      mm6,mm6       //zero mm6                  punpcklbw  mm7,mm7                  punpcklwd  mm7,mm7                  punpckldq  mm7,mm7       //fill register with 8 masks                  movq       mm0,mask0                  pand       mm0,mm7       //nonzero if keep byte                  pcmpeqb    mm0,mm6       //zeros->1s, v versa                  mov        ecx,len       //load length of line (pixels)                  mov        esi,srcptr    //load source                  mov        ebx,dstptr    //load dest                  cmp        ecx,0         //lcr                  je         mainloop8endmainloop8:                  movq       mm4,[esi]                  pand       mm4,mm0                  movq       mm6,mm0                  pandn      mm6,[ebx]                  por        mm4,mm6                  movq       [ebx],mm4                  add        esi,8         //inc by 8 bytes processed                  add        ebx,8                  sub        ecx,8         //dec by 8 pixels processed                  ja         mainloop8mainloop8end:                  mov        ecx,diff                  cmp        ecx,0                  jz         end8                  mov        edx,mask                  sal        edx,24        //make low byte the high bytesecondloop8:                  sal        edx,1         //move high bit to CF                  jnc        skip8         //if CF = 0                  mov        al,[esi]                  mov        [ebx],alskip8:                  inc        esi                  inc        ebx

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
尤物视频一区二区| 日本欧美大码aⅴ在线播放| 欧美妇女性影城| 91麻豆精东视频| 国产精品18久久久久久久久| 亚洲午夜电影在线| 亚洲欧洲日韩av| 国产亚洲综合av| wwww国产精品欧美| 久久在线免费观看| 欧美成人r级一区二区三区| 欧美网站大全在线观看| 欧美视频一区二| 精品视频在线视频| 欧美性大战久久久| 欧美性生活一区| 欧美日韩一区三区四区| 欧美在线短视频| 欧美网站大全在线观看| 7777精品伊人久久久大香线蕉完整版 | 国产福利一区二区三区在线视频| 久久精品国产第一区二区三区| 亚洲成人在线免费| 久久精品国产秦先生| 国产精品自在在线| 99久久夜色精品国产网站| 不卡av免费在线观看| 日本丰满少妇一区二区三区| 中文字幕一区二区三区在线不卡| 亚洲欧洲av一区二区三区久久| 综合色中文字幕| 爽爽淫人综合网网站| 日韩国产精品久久| 亚洲欧美日韩国产另类专区| 五月天亚洲婷婷| 国内国产精品久久| 成人性色生活片| 99久久精品免费精品国产| 一本久道中文字幕精品亚洲嫩| 欧美三片在线视频观看| 欧美va在线播放| 亚洲欧美日韩国产综合在线| 亚洲自拍欧美精品| 成人三级伦理片| 欧美精品日韩一本| 国产精品色一区二区三区| 亚洲成在人线在线播放| 国产成人亚洲综合a∨猫咪| 欧美午夜宅男影院| 日韩欧美国产精品一区| 精品国产麻豆免费人成网站| 一区二区在线电影| 国产精品一区二区x88av| 岛国精品在线播放| 91久久精品一区二区三区| 欧美成人aa大片| 国产色产综合产在线视频| 欧美影片第一页| 亚洲精品菠萝久久久久久久| 不卡的av在线播放| 欧美精品777| 亚洲欧美色综合| 国内精品第一页| 日本精品一区二区三区高清| 久久色在线视频| 亚洲.国产.中文慕字在线| 国内成人免费视频| 88在线观看91蜜桃国自产| 国产欧美一区二区三区网站| 国产精品亚洲第一区在线暖暖韩国| 88在线观看91蜜桃国自产| 亚洲一区二区三区美女| 国产成人福利片| 中文字幕一区二区三区在线不卡| 国产一区二区三区免费| 欧美一级理论片| 免费看黄色91| 国产日韩欧美一区二区三区乱码 | 国产在线精品一区二区| 制服丝袜在线91| 丁香婷婷深情五月亚洲| 亚洲夂夂婷婷色拍ww47| 在线不卡一区二区| 国产成人精品亚洲日本在线桃色| 久久久久久久av麻豆果冻| 国产一区二区在线电影| 亚洲国产精品精华液2区45| 成人h版在线观看| 亚洲综合无码一区二区| 欧美日本韩国一区| 国产馆精品极品| 亚洲五月六月丁香激情| 久久婷婷国产综合精品青草| 99re免费视频精品全部| 日韩av电影免费观看高清完整版 | 日韩精品在线网站| 99在线视频精品| 另类小说色综合网站| 亚洲天堂精品在线观看| 精品少妇一区二区三区| 国产在线观看免费一区| 国产精品福利影院| 欧美欧美欧美欧美| 99免费精品视频| 国产精选一区二区三区| 亚洲国产一区视频| 国产欧美日韩另类视频免费观看| 国内精品国产成人国产三级粉色| 日韩在线播放一区二区| 亚洲视频1区2区| 国产精品久久三| 久久久亚洲高清| 欧美va亚洲va国产综合| 91精品国产综合久久精品 | av高清久久久| 精品一二三四在线| 精品影视av免费| 久久国产三级精品| 免费看精品久久片| 青青草国产精品97视觉盛宴| 亚洲动漫第一页| 亚洲图片欧美一区| 亚洲va欧美va人人爽午夜| 亚洲激情欧美激情| 亚洲国产精品久久久久秋霞影院| 国产欧美日韩综合精品一区二区 | 欧美精品一区二区三区蜜臀| 日韩亚洲欧美高清| 欧美mv日韩mv| 日韩免费一区二区| 国产精品美女久久久久久久久 | 91久久精品一区二区三| 欧美午夜精品免费| 日韩亚洲欧美综合| 国产日韩综合av| 一区二区三区四区激情| 亚洲另类色综合网站| 三级不卡在线观看| 国产精品羞羞答答xxdd| 国产成人综合亚洲网站| 亚洲自拍偷拍麻豆| 亚洲色图另类专区| 日韩中文字幕一区二区三区| 色综合咪咪久久| 国产欧美日韩在线看| 精品在线一区二区| 在线观看国产91| 久久久久久亚洲综合| 丝袜美腿一区二区三区| 成人免费视频免费观看| 欧美日韩中文字幕一区| 久久人人超碰精品| 有码一区二区三区| 美女一区二区视频| 欧美日韩精品电影| 亚洲欧美综合另类在线卡通| 激情综合亚洲精品| 欧美日韩国产123区| 精品少妇一区二区三区视频免付费 | 欧美日韩国产精选| 欧美xxxxx牲另类人与| 亚洲黄色av一区| 国产麻豆午夜三级精品| aaa欧美日韩| 日韩久久精品一区| 国产精品女同互慰在线看| 奇米精品一区二区三区四区| 色av综合在线| 亚洲黄网站在线观看| 国产电影一区二区三区| 久久影院视频免费| 国产高清精品网站| 国产精品高潮呻吟久久| 91亚洲精华国产精华精华液| 亚洲成人精品在线观看| 欧美午夜精品理论片a级按摩| 久久精品久久精品| 亚洲男同1069视频| 色婷婷av久久久久久久| 一区二区视频在线| 欧美日韩国产精品成人| 综合激情成人伊人| 欧美日本一道本| 久久99精品国产.久久久久久 | 视频在线在亚洲| 色94色欧美sute亚洲线路一ni| 亚洲免费av高清| 欧美日韩一区二区三区在线| 亚洲综合丝袜美腿| 欧美大片日本大片免费观看| 精品一区二区三区免费毛片爱| 久久综合色婷婷| 99视频精品在线| 亚洲无人区一区| 久久青草欧美一区二区三区| 国产v综合v亚洲欧| 一区二区三区在线播放| 欧美日韩国产大片| 国产成人在线影院| 日韩有码一区二区三区|