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

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

?? rgb2rgb_template.c.svn-base

?? ffmpeg最新源碼
?? SVN-BASE
?? 第 1 頁 / 共 5 頁
字號:
/* * software RGB to RGB converter * pluralize by software PAL8 to RGB converter *              software YUV to YUV converter *              software YUV to RGB converter * Written by Nick Kurshev. * palette & YUV & runtime CPU stuff by Michael (michaelni@gmx.at) * lot of big-endian byte order fixes by Alex Beregszaszi * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * The C code (not assembly, MMX, ...) of this file can be used * under the LGPL license. */#include <stddef.h>#include <inttypes.h> /* for __WORDSIZE */#ifndef __WORDSIZE// #warning You have a misconfigured system and will probably lose performance!#define __WORDSIZE MP_WORDSIZE#endif#undef PREFETCH#undef MOVNTQ#undef EMMS#undef SFENCE#undef MMREG_SIZE#undef PREFETCHW#undef PAVGB#ifdef HAVE_SSE2#define MMREG_SIZE 16#else#define MMREG_SIZE 8#endif#ifdef HAVE_3DNOW#define PREFETCH  "prefetch"#define PREFETCHW "prefetchw"#define PAVGB     "pavgusb"#elif defined (HAVE_MMX2)#define PREFETCH "prefetchnta"#define PREFETCHW "prefetcht0"#define PAVGB     "pavgb"#else#ifdef __APPLE__#define PREFETCH "#"#define PREFETCHW "#"#else#define PREFETCH  " # nop"#define PREFETCHW " # nop"#endif#endif#ifdef HAVE_3DNOW/* On K6 femms is faster than emms. On K7 femms is directly mapped on emms. */#define EMMS     "femms"#else#define EMMS     "emms"#endif#ifdef HAVE_MMX2#define MOVNTQ "movntq"#define SFENCE "sfence"#else#define MOVNTQ "movq"#define SFENCE " # nop"#endifstatic inline void RENAME(rgb24to32)(const uint8_t *src, uint8_t *dst, long src_size){    uint8_t *dest = dst;    const uint8_t *s = src;    const uint8_t *end;    #ifdef HAVE_MMX        const uint8_t *mm_end;    #endif    end = s + src_size;    #ifdef HAVE_MMX        asm volatile(PREFETCH"    %0"::"m"(*s):"memory");        mm_end = end - 23;        asm volatile("movq        %0, %%mm7"::"m"(mask32):"memory");        while (s < mm_end)        {            asm volatile(            PREFETCH"    32%1           \n\t"            "movd          %1, %%mm0    \n\t"            "punpckldq    3%1, %%mm0    \n\t"            "movd         6%1, %%mm1    \n\t"            "punpckldq    9%1, %%mm1    \n\t"            "movd        12%1, %%mm2    \n\t"            "punpckldq   15%1, %%mm2    \n\t"            "movd        18%1, %%mm3    \n\t"            "punpckldq   21%1, %%mm3    \n\t"            "pand       %%mm7, %%mm0    \n\t"            "pand       %%mm7, %%mm1    \n\t"            "pand       %%mm7, %%mm2    \n\t"            "pand       %%mm7, %%mm3    \n\t"            MOVNTQ"     %%mm0,   %0     \n\t"            MOVNTQ"     %%mm1,  8%0     \n\t"            MOVNTQ"     %%mm2, 16%0     \n\t"            MOVNTQ"     %%mm3, 24%0"            :"=m"(*dest)            :"m"(*s)            :"memory");            dest += 32;            s += 24;        }        asm volatile(SFENCE:::"memory");        asm volatile(EMMS:::"memory");    #endif    while (s < end)    {    #ifdef WORDS_BIGENDIAN        /* RGB24 (= R,G,B) -> RGB32 (= A,B,G,R) */        *dest++ = 0;        *dest++ = s[2];        *dest++ = s[1];        *dest++ = s[0];        s+=3;    #else        *dest++ = *s++;        *dest++ = *s++;        *dest++ = *s++;        *dest++ = 0;    #endif    }}static inline void RENAME(rgb32to24)(const uint8_t *src, uint8_t *dst, long src_size){    uint8_t *dest = dst;    const uint8_t *s = src;    const uint8_t *end;#ifdef HAVE_MMX    const uint8_t *mm_end;#endif    end = s + src_size;#ifdef HAVE_MMX    asm volatile(PREFETCH"    %0"::"m"(*s):"memory");    mm_end = end - 31;    while (s < mm_end)    {        asm volatile(        PREFETCH"    32%1           \n\t"        "movq          %1, %%mm0    \n\t"        "movq         8%1, %%mm1    \n\t"        "movq        16%1, %%mm4    \n\t"        "movq        24%1, %%mm5    \n\t"        "movq       %%mm0, %%mm2    \n\t"        "movq       %%mm1, %%mm3    \n\t"        "movq       %%mm4, %%mm6    \n\t"        "movq       %%mm5, %%mm7    \n\t"        "psrlq         $8, %%mm2    \n\t"        "psrlq         $8, %%mm3    \n\t"        "psrlq         $8, %%mm6    \n\t"        "psrlq         $8, %%mm7    \n\t"        "pand          %2, %%mm0    \n\t"        "pand          %2, %%mm1    \n\t"        "pand          %2, %%mm4    \n\t"        "pand          %2, %%mm5    \n\t"        "pand          %3, %%mm2    \n\t"        "pand          %3, %%mm3    \n\t"        "pand          %3, %%mm6    \n\t"        "pand          %3, %%mm7    \n\t"        "por        %%mm2, %%mm0    \n\t"        "por        %%mm3, %%mm1    \n\t"        "por        %%mm6, %%mm4    \n\t"        "por        %%mm7, %%mm5    \n\t"        "movq       %%mm1, %%mm2    \n\t"        "movq       %%mm4, %%mm3    \n\t"        "psllq        $48, %%mm2    \n\t"        "psllq        $32, %%mm3    \n\t"        "pand          %4, %%mm2    \n\t"        "pand          %5, %%mm3    \n\t"        "por        %%mm2, %%mm0    \n\t"        "psrlq        $16, %%mm1    \n\t"        "psrlq        $32, %%mm4    \n\t"        "psllq        $16, %%mm5    \n\t"        "por        %%mm3, %%mm1    \n\t"        "pand          %6, %%mm5    \n\t"        "por        %%mm5, %%mm4    \n\t"        MOVNTQ"     %%mm0,   %0     \n\t"        MOVNTQ"     %%mm1,  8%0     \n\t"        MOVNTQ"     %%mm4, 16%0"        :"=m"(*dest)        :"m"(*s),"m"(mask24l),         "m"(mask24h),"m"(mask24hh),"m"(mask24hhh),"m"(mask24hhhh)        :"memory");        dest += 24;        s += 32;    }    asm volatile(SFENCE:::"memory");    asm volatile(EMMS:::"memory");#endif    while (s < end)    {#ifdef WORDS_BIGENDIAN        /* RGB32 (= A,B,G,R) -> RGB24 (= R,G,B) */        s++;        dest[2] = *s++;        dest[1] = *s++;        dest[0] = *s++;        dest += 3;#else        *dest++ = *s++;        *dest++ = *s++;        *dest++ = *s++;        s++;#endif    }}/* original by Strepto/Astral ported to gcc & bugfixed: A'rpi MMX2, 3DNOW optimization by Nick Kurshev 32-bit C version, and and&add trick by Michael Niedermayer*/static inline void RENAME(rgb15to16)(const uint8_t *src, uint8_t *dst, long src_size){    register const uint8_t* s=src;    register uint8_t* d=dst;    register const uint8_t *end;    const uint8_t *mm_end;    end = s + src_size;#ifdef HAVE_MMX    asm volatile(PREFETCH"    %0"::"m"(*s));    asm volatile("movq        %0, %%mm4"::"m"(mask15s));    mm_end = end - 15;    while (s<mm_end)    {        asm volatile(        PREFETCH"  32%1         \n\t"        "movq        %1, %%mm0  \n\t"        "movq       8%1, %%mm2  \n\t"        "movq     %%mm0, %%mm1  \n\t"        "movq     %%mm2, %%mm3  \n\t"        "pand     %%mm4, %%mm0  \n\t"        "pand     %%mm4, %%mm2  \n\t"        "paddw    %%mm1, %%mm0  \n\t"        "paddw    %%mm3, %%mm2  \n\t"        MOVNTQ"   %%mm0,  %0    \n\t"        MOVNTQ"   %%mm2, 8%0"        :"=m"(*d)        :"m"(*s)        );        d+=16;        s+=16;    }    asm volatile(SFENCE:::"memory");    asm volatile(EMMS:::"memory");#endif    mm_end = end - 3;    while (s < mm_end)    {        register unsigned x= *((const uint32_t *)s);        *((uint32_t *)d) = (x&0x7FFF7FFF) + (x&0x7FE07FE0);        d+=4;        s+=4;    }    if (s < end)    {        register unsigned short x= *((const uint16_t *)s);        *((uint16_t *)d) = (x&0x7FFF) + (x&0x7FE0);    }}static inline void RENAME(rgb16to15)(const uint8_t *src, uint8_t *dst, long src_size){    register const uint8_t* s=src;    register uint8_t* d=dst;    register const uint8_t *end;    const uint8_t *mm_end;    end = s + src_size;#ifdef HAVE_MMX    asm volatile(PREFETCH"    %0"::"m"(*s));    asm volatile("movq        %0, %%mm7"::"m"(mask15rg));    asm volatile("movq        %0, %%mm6"::"m"(mask15b));    mm_end = end - 15;    while (s<mm_end)    {        asm volatile(        PREFETCH"  32%1         \n\t"        "movq        %1, %%mm0  \n\t"        "movq       8%1, %%mm2  \n\t"        "movq     %%mm0, %%mm1  \n\t"        "movq     %%mm2, %%mm3  \n\t"        "psrlq       $1, %%mm0  \n\t"        "psrlq       $1, %%mm2  \n\t"        "pand     %%mm7, %%mm0  \n\t"        "pand     %%mm7, %%mm2  \n\t"        "pand     %%mm6, %%mm1  \n\t"        "pand     %%mm6, %%mm3  \n\t"        "por      %%mm1, %%mm0  \n\t"        "por      %%mm3, %%mm2  \n\t"        MOVNTQ"   %%mm0,  %0    \n\t"        MOVNTQ"   %%mm2, 8%0"        :"=m"(*d)        :"m"(*s)        );        d+=16;        s+=16;    }    asm volatile(SFENCE:::"memory");    asm volatile(EMMS:::"memory");#endif    mm_end = end - 3;    while (s < mm_end)    {        register uint32_t x= *((const uint32_t*)s);        *((uint32_t *)d) = ((x>>1)&0x7FE07FE0) | (x&0x001F001F);        s+=4;        d+=4;    }    if (s < end)    {        register uint16_t x= *((const uint16_t*)s);        *((uint16_t *)d) = ((x>>1)&0x7FE0) | (x&0x001F);        s+=2;        d+=2;    }}static inline void RENAME(rgb32to16)(const uint8_t *src, uint8_t *dst, long src_size){    const uint8_t *s = src;    const uint8_t *end;#ifdef HAVE_MMX    const uint8_t *mm_end;#endif    uint16_t *d = (uint16_t *)dst;    end = s + src_size;#ifdef HAVE_MMX    mm_end = end - 15;#if 1 //is faster only if multiplies are reasonably fast (FIXME figure out on which CPUs this is faster, on Athlon it is slightly faster)    asm volatile(    "movq           %3, %%mm5   \n\t"    "movq           %4, %%mm6   \n\t"    "movq           %5, %%mm7   \n\t"    "jmp 2f                     \n\t"    ASMALIGN(4)    "1:                         \n\t"    PREFETCH"   32(%1)          \n\t"    "movd         (%1), %%mm0   \n\t"    "movd        4(%1), %%mm3   \n\t"    "punpckldq   8(%1), %%mm0   \n\t"    "punpckldq  12(%1), %%mm3   \n\t"    "movq        %%mm0, %%mm1   \n\t"    "movq        %%mm3, %%mm4   \n\t"    "pand        %%mm6, %%mm0   \n\t"    "pand        %%mm6, %%mm3   \n\t"    "pmaddwd     %%mm7, %%mm0   \n\t"    "pmaddwd     %%mm7, %%mm3   \n\t"    "pand        %%mm5, %%mm1   \n\t"    "pand        %%mm5, %%mm4   \n\t"    "por         %%mm1, %%mm0   \n\t"    "por         %%mm4, %%mm3   \n\t"    "psrld          $5, %%mm0   \n\t"    "pslld         $11, %%mm3   \n\t"    "por         %%mm3, %%mm0   \n\t"    MOVNTQ"      %%mm0, (%0)    \n\t"

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女久久久久久久| 日韩av午夜在线观看| 国产午夜精品一区二区三区四区| 国产视频一区二区三区在线观看| 欧美日本韩国一区二区三区视频| 欧美国产一区二区| 亚洲电影欧美电影有声小说| 国产经典欧美精品| 欧美精品视频www在线观看| 日本v片在线高清不卡在线观看| 99国内精品久久| 国产精品成人午夜| 99re热视频精品| 精品少妇一区二区三区在线视频| www一区二区| 奇米888四色在线精品| 亚洲成人一区二区| 国内精品久久久久影院一蜜桃| 在线欧美日韩国产| 日本在线观看不卡视频| 欧美色涩在线第一页| 成人av网在线| 欧美tickling挠脚心丨vk| 亚洲精品视频免费看| 国产盗摄视频一区二区三区| 亚洲精品菠萝久久久久久久| 欧美丝袜丝nylons| 久久99国产精品尤物| 51精品视频一区二区三区| 人人超碰91尤物精品国产| 久久综合久久鬼色中文字| 成人91在线观看| 有坂深雪av一区二区精品| 欧美日韩国产一级片| 国产91高潮流白浆在线麻豆| 亚洲最新视频在线观看| 在线观看成人小视频| 六月丁香综合在线视频| 中文字幕日韩av资源站| 欧洲一区在线电影| 97精品国产露脸对白| 久久久激情视频| 国产精品久久久久久久久晋中| 欧美视频在线播放| 欧美videofree性高清杂交| 国产欧美一区二区三区在线看蜜臀| 亚洲地区一二三色| 97se狠狠狠综合亚洲狠狠| 亚洲欧洲精品成人久久奇米网| 亚洲mv大片欧洲mv大片精品| 精品视频色一区| 高清av一区二区| 日本午夜一区二区| 国产一区二区三区在线观看免费视频| 在线电影一区二区三区| 一级中文字幕一区二区| 美女任你摸久久| 91麻豆精品国产91久久久使用方法| 国产精品福利影院| 91成人免费在线视频| 亚洲综合激情小说| 欧美日韩电影一区| 国内外精品视频| 亚洲欧美区自拍先锋| 欧美激情在线一区二区| 久久久国产精品麻豆| 久久综合久久久久88| 国产午夜精品一区二区三区视频| 日韩欧美一卡二卡| 精品国产亚洲在线| 亚洲国产精品精华液ab| 1000精品久久久久久久久| 欧美a一区二区| 国产精品久久久久一区二区三区共| 国产日本亚洲高清| 亚洲高清一区二区三区| 精品国精品国产| 国产成人激情av| 综合av第一页| 欧美猛男gaygay网站| 亚洲一区二区三区四区中文字幕| 欧美成人综合网站| 久久69国产一区二区蜜臀| 国产精品久久久久久久久快鸭| 91麻豆精品秘密| 日韩精品亚洲专区| 国产欧美日韩不卡免费| 一本大道久久a久久综合婷婷| 日韩中文字幕1| 欧美极品aⅴ影院| 日韩一区和二区| 91影院在线免费观看| 免费xxxx性欧美18vr| 欧美老人xxxx18| av在线不卡网| 久久av老司机精品网站导航| 亚洲免费在线电影| 国产日韩精品视频一区| 欧美精品色综合| 成人黄页毛片网站| 亚洲一区二区三区激情| 国产亚洲精品aa| 国产一区激情在线| 亚洲精品亚洲人成人网在线播放| 高清av一区二区| 国产片一区二区| 成人av综合一区| 国产精品嫩草99a| 色成年激情久久综合| 亚洲男人的天堂在线aⅴ视频| 99riav久久精品riav| 麻豆91在线看| 国产激情一区二区三区| 国产欧美一二三区| 日韩欧美精品在线视频| 欧美在线视频不卡| 欧美日韩亚洲另类| 91福利在线观看| 91在线精品一区二区| 99在线精品一区二区三区| 亚洲激情在线播放| 日韩视频一区二区| av激情成人网| 日韩综合一区二区| 久久亚洲欧美国产精品乐播 | 亚洲va中文字幕| 天天av天天翘天天综合网| 26uuu精品一区二区在线观看| 国产乱码精品一区二区三区av| 欧美激情艳妇裸体舞| 成人av综合在线| 蜜臀精品久久久久久蜜臀| 久久免费偷拍视频| 欧美性视频一区二区三区| 欧美日韩中文另类| 91精品国产综合久久福利| 在线免费av一区| 成人免费的视频| 欧美午夜不卡在线观看免费| 日韩免费成人网| 午夜影院久久久| 久久99国产精品麻豆| 久久这里只有精品首页| 日韩av中文字幕一区二区 | 97成人超碰视| 中文字幕五月欧美| 国产一区久久久| 国产农村妇女精品| 国产精品免费视频网站| 亚洲视频免费在线观看| 青青草国产成人99久久| 久久av资源站| av中文字幕亚洲| 欧美日韩一区二区三区在线看| 99久久免费视频.com| 国产一区久久久| 国产精品一品视频| 麻豆精品久久久| 免费的国产精品| 美美哒免费高清在线观看视频一区二区| 一区二区三区国产豹纹内裤在线| 最好看的中文字幕久久| 亚洲图片欧美一区| 午夜一区二区三区在线观看| 看片的网站亚洲| 国产一区二区主播在线| 久久国产精品第一页| 亚洲精品一区二区精华| 日本高清不卡视频| 日精品一区二区三区| 国产精品黄色在线观看| 亚洲国产一区二区视频| 成人免费视频caoporn| 欧美美女一区二区三区| 自拍偷自拍亚洲精品播放| 国产精品欧美精品| 韩国av一区二区三区在线观看| 欧美嫩在线观看| 中文字幕视频一区| 成人18视频日本| 精品国产凹凸成av人导航| 日韩激情在线观看| 91在线播放网址| 欧美激情中文字幕| 国产精品一二三| 日韩一级二级三级| 日精品一区二区三区| 色婷婷香蕉在线一区二区| 国产精品天天摸av网| 国产精品99久久久久久久vr| 91精选在线观看| 亚洲影院理伦片| av在线综合网| 中文字幕+乱码+中文字幕一区| 亚洲黄色在线视频| 色婷婷久久久久swag精品| 六月丁香综合在线视频| 亚洲精品写真福利| 99精品欧美一区二区蜜桃免费| 1区2区3区精品视频|