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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pngvcrd.c

?? GIS系統支持庫Geospatial Data Abstraction Library代碼.GDAL is a translator library for raster geospatial dat
?? 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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
18涩涩午夜精品.www| 久久奇米777| 欧美亚洲一区二区在线| av电影在线观看一区| 天天av天天翘天天综合网| 91国产福利在线| 久久网站最新地址| 欧美精品日韩精品| 成人av在线资源| 石原莉奈一区二区三区在线观看 | 欧美一级艳片视频免费观看| 亚洲激情欧美激情| 色成年激情久久综合| 亚洲一区二区三区影院| 欧美日韩一区二区电影| 亚洲大片免费看| 91精品国产综合久久香蕉的特点| 韩国女主播成人在线观看| 精品国产第一区二区三区观看体验| 久久av老司机精品网站导航| 中文字幕+乱码+中文字幕一区| 国产亲近乱来精品视频| 奇米888四色在线精品| 麻豆精品国产传媒mv男同| 日韩一二三区视频| 激情欧美一区二区| 亚洲欧美电影院| 欧美二区三区的天堂| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩精品中文字幕在线一区| 国产精品资源在线看| 91在线看国产| 青青草97国产精品免费观看无弹窗版| 精品国产免费人成在线观看| 懂色av一区二区在线播放| 亚洲第一二三四区| 国产色产综合色产在线视频 | 在线综合亚洲欧美在线视频| 激情综合网最新| 亚洲免费观看高清完整版在线观看熊 | 一区二区三区四区高清精品免费观看| 日韩欧美国产一区二区在线播放| 国产精品萝li| 欧美日韩在线免费视频| 亚洲va天堂va国产va久| 中文字幕一区二区三区四区| 色妞www精品视频| 国产成人精品免费在线| 欧美高清视频一二三区| 国产成人精品免费| 日本亚洲最大的色成网站www| 久久先锋影音av鲁色资源网| 欧美在线色视频| 国产在线麻豆精品观看| 欧美在线看片a免费观看| 国产成a人亚洲| 亚洲免费av网站| 久久久亚洲精华液精华液精华液 | 99久久精品国产观看| 日日夜夜一区二区| 尤物视频一区二区| 国产欧美一区二区精品秋霞影院 | 亚洲天堂a在线| 日韩免费看的电影| 成人一区二区在线观看| 免费高清在线一区| 亚洲午夜免费视频| 中文字幕亚洲一区二区av在线 | 久久久影院官网| 色www精品视频在线观看| av在线播放不卡| 国产精品自拍一区| 久久成人免费日本黄色| 久久99最新地址| 亚洲综合在线五月| 中文字幕精品一区二区精品绿巨人| 久久久久久久久久久久久久久99| 国产精品第四页| 精品一区二区久久| 久久久美女艺术照精彩视频福利播放| 国内精品国产三级国产a久久| 国产亚洲婷婷免费| 91在线无精精品入口| 亚洲大型综合色站| 久久久久久久久久久久久女国产乱| 成人av午夜电影| 亚洲黄色av一区| 欧美综合亚洲图片综合区| 亚洲va在线va天堂| 日韩欧美在线网站| 91老司机福利 在线| 久久爱另类一区二区小说| 1024成人网色www| 精品国产一区二区国模嫣然| 国产成人精品www牛牛影视| 亚洲二区在线视频| 亚洲天堂久久久久久久| 久久精品水蜜桃av综合天堂| 制服丝袜中文字幕一区| 99精品热视频| 在线视频综合导航| 国产成人久久精品77777最新版本| 激情亚洲综合在线| 北岛玲一区二区三区四区| 韩国三级中文字幕hd久久精品| 精品va天堂亚洲国产| 在线不卡中文字幕播放| 欧美高清视频在线高清观看mv色露露十八| 色婷婷亚洲精品| 色婷婷狠狠综合| 欧美精品一级二级| 日韩色视频在线观看| 日韩一区和二区| 国产精品乱人伦| 日韩一区二区电影| 成人av中文字幕| 久久不见久久见免费视频7| 高清久久久久久| 在线观看一区二区精品视频| 欧美高清视频在线高清观看mv色露露十八| 九九精品视频在线看| 欧美国产亚洲另类动漫| 亚洲乱码一区二区三区在线观看| 国产精品丝袜一区| 亚洲免费三区一区二区| 亚洲第一狼人社区| 激情综合网最新| 国产成人在线观看| 麻豆精品久久精品色综合| 日本欧美久久久久免费播放网| 国产成a人亚洲| 欧美日韩一二三区| 亚洲色图视频免费播放| 精品一区精品二区高清| 在线免费亚洲电影| 中文字幕一区二区三区在线播放| 午夜精品久久久久久久99水蜜桃 | 9191国产精品| 亚洲www啪成人一区二区麻豆 | 国模娜娜一区二区三区| 亚洲色图欧洲色图| 欧美日韩另类一区| 精品一区二区三区免费观看| 欧美va日韩va| 国产成人精品免费视频网站| 韩国三级中文字幕hd久久精品| 久久亚洲精品小早川怜子| 成人综合在线网站| 日韩午夜激情免费电影| 国产精品欧美一级免费| 国产精品91一区二区| 91国偷自产一区二区三区成为亚洲经典 | 精品美女一区二区三区| 一区二区三区成人在线视频| 99在线热播精品免费| 国产三区在线成人av| 极品销魂美女一区二区三区| 日韩欧美亚洲一区二区| 免播放器亚洲一区| 欧美久久一区二区| 亚洲精品第1页| 北条麻妃一区二区三区| 日本人妖一区二区| 2017欧美狠狠色| 91丨九色丨国产丨porny| 亚洲丰满少妇videoshd| 久久九九全国免费| 91丨国产丨九色丨pron| 青青草精品视频| 欧美国产日韩亚洲一区| 99视频有精品| 久色婷婷小香蕉久久| 日韩一区在线播放| 综合色中文字幕| 亚洲综合在线观看视频| 国产在线国偷精品产拍免费yy| 国产精品午夜电影| 高清成人在线观看| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲人快播电影网| 在线精品亚洲一区二区不卡| 玉足女爽爽91| 欧美日本视频在线| 久久成人麻豆午夜电影| 久久精品亚洲精品国产欧美| 成人在线综合网站| 亚洲精品一二三四区| 51精品视频一区二区三区| 另类小说一区二区三区| 欧美激情中文字幕| 不卡的av在线| 亚洲自拍欧美精品| 精品免费日韩av| 99久久国产综合色|国产精品| 亚洲一区二区免费视频| 91精品国产手机| 丁香另类激情小说| 午夜国产不卡在线观看视频| 精品国产乱码久久久久久久久| 99久久精品国产一区二区三区|