⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swscale.c.svn-base

📁 mediastreamer2是开源的网络传输媒体流的库
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
        for (j=0; j<lumFilterSize; j++)            val += lumSrc[j][i] * lumFilter[j];        dest[i]= av_clip_uint8(val>>19);    }    if (uDest)        for (i=0; i<chrDstW; i++)        {            int u=1<<18;            int v=1<<18;            int j;            for (j=0; j<chrFilterSize; j++)            {                u += chrSrc[j][i] * chrFilter[j];                v += chrSrc[j][i + 2048] * chrFilter[j];            }            uDest[i]= av_clip_uint8(u>>19);            vDest[i]= av_clip_uint8(v>>19);        }}static inline void yuv2nv12XinC(int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,                                int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,                                uint8_t *dest, uint8_t *uDest, int dstW, int chrDstW, int dstFormat){    //FIXME Optimize (just quickly writen not opti..)    int i;    for (i=0; i<dstW; i++)    {        int val=1<<18;        int j;        for (j=0; j<lumFilterSize; j++)            val += lumSrc[j][i] * lumFilter[j];        dest[i]= av_clip_uint8(val>>19);    }    if (!uDest)        return;    if (dstFormat == PIX_FMT_NV12)        for (i=0; i<chrDstW; i++)        {            int u=1<<18;            int v=1<<18;            int j;            for (j=0; j<chrFilterSize; j++)            {                u += chrSrc[j][i] * chrFilter[j];                v += chrSrc[j][i + 2048] * chrFilter[j];            }            uDest[2*i]= av_clip_uint8(u>>19);            uDest[2*i+1]= av_clip_uint8(v>>19);        }    else        for (i=0; i<chrDstW; i++)        {            int u=1<<18;            int v=1<<18;            int j;            for (j=0; j<chrFilterSize; j++)            {                u += chrSrc[j][i] * chrFilter[j];                v += chrSrc[j][i + 2048] * chrFilter[j];            }            uDest[2*i]= av_clip_uint8(v>>19);            uDest[2*i+1]= av_clip_uint8(u>>19);        }}#define YSCALE_YUV_2_PACKEDX_C(type) \    for (i=0; i<(dstW>>1); i++){\        int j;\        int Y1 = 1<<18;\        int Y2 = 1<<18;\        int U  = 1<<18;\        int V  = 1<<18;\        type av_unused *r, *b, *g;\        const int i2= 2*i;\        \        for (j=0; j<lumFilterSize; j++)\        {\            Y1 += lumSrc[j][i2] * lumFilter[j];\            Y2 += lumSrc[j][i2+1] * lumFilter[j];\        }\        for (j=0; j<chrFilterSize; j++)\        {\            U += chrSrc[j][i] * chrFilter[j];\            V += chrSrc[j][i+2048] * chrFilter[j];\        }\        Y1>>=19;\        Y2>>=19;\        U >>=19;\        V >>=19;\        if ((Y1|Y2|U|V)&256)\        {\            if (Y1>255)   Y1=255; \            else if (Y1<0)Y1=0;   \            if (Y2>255)   Y2=255; \            else if (Y2<0)Y2=0;   \            if (U>255)    U=255;  \            else if (U<0) U=0;    \            if (V>255)    V=255;  \            else if (V<0) V=0;    \        }#define YSCALE_YUV_2_RGBX_C(type) \    YSCALE_YUV_2_PACKEDX_C(type)  \    r = (type *)c->table_rV[V];   \    g = (type *)(c->table_gU[U] + c->table_gV[V]); \    b = (type *)c->table_bU[U];   \#define YSCALE_YUV_2_PACKED2_C   \    for (i=0; i<(dstW>>1); i++){ \        const int i2= 2*i;       \        int Y1= (buf0[i2  ]*yalpha1+buf1[i2  ]*yalpha)>>19;           \        int Y2= (buf0[i2+1]*yalpha1+buf1[i2+1]*yalpha)>>19;           \        int U= (uvbuf0[i     ]*uvalpha1+uvbuf1[i     ]*uvalpha)>>19;  \        int V= (uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19;  \#define YSCALE_YUV_2_RGB2_C(type) \    YSCALE_YUV_2_PACKED2_C\    type *r, *b, *g;\    r = (type *)c->table_rV[V];\    g = (type *)(c->table_gU[U] + c->table_gV[V]);\    b = (type *)c->table_bU[U];\#define YSCALE_YUV_2_PACKED1_C \    for (i=0; i<(dstW>>1); i++){\        const int i2= 2*i;\        int Y1= buf0[i2  ]>>7;\        int Y2= buf0[i2+1]>>7;\        int U= (uvbuf1[i     ])>>7;\        int V= (uvbuf1[i+2048])>>7;\#define YSCALE_YUV_2_RGB1_C(type) \    YSCALE_YUV_2_PACKED1_C\    type *r, *b, *g;\    r = (type *)c->table_rV[V];\    g = (type *)(c->table_gU[U] + c->table_gV[V]);\    b = (type *)c->table_bU[U];\#define YSCALE_YUV_2_PACKED1B_C \    for (i=0; i<(dstW>>1); i++){\        const int i2= 2*i;\        int Y1= buf0[i2  ]>>7;\        int Y2= buf0[i2+1]>>7;\        int U= (uvbuf0[i     ] + uvbuf1[i     ])>>8;\        int V= (uvbuf0[i+2048] + uvbuf1[i+2048])>>8;\#define YSCALE_YUV_2_RGB1B_C(type) \    YSCALE_YUV_2_PACKED1B_C\    type *r, *b, *g;\    r = (type *)c->table_rV[V];\    g = (type *)(c->table_gU[U] + c->table_gV[V]);\    b = (type *)c->table_bU[U];\#define YSCALE_YUV_2_ANYRGB_C(func, func2)\    switch(c->dstFormat)\    {\    case PIX_FMT_RGB32:\    case PIX_FMT_BGR32:\        func(uint32_t)\            ((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1];\            ((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2];\        }                \        break;\    case PIX_FMT_RGB24:\        func(uint8_t)\            ((uint8_t*)dest)[0]= r[Y1];\            ((uint8_t*)dest)[1]= g[Y1];\            ((uint8_t*)dest)[2]= b[Y1];\            ((uint8_t*)dest)[3]= r[Y2];\            ((uint8_t*)dest)[4]= g[Y2];\            ((uint8_t*)dest)[5]= b[Y2];\            dest+=6;\        }\        break;\    case PIX_FMT_BGR24:\        func(uint8_t)\            ((uint8_t*)dest)[0]= b[Y1];\            ((uint8_t*)dest)[1]= g[Y1];\            ((uint8_t*)dest)[2]= r[Y1];\            ((uint8_t*)dest)[3]= b[Y2];\            ((uint8_t*)dest)[4]= g[Y2];\            ((uint8_t*)dest)[5]= r[Y2];\            dest+=6;\        }\        break;\    case PIX_FMT_RGB565:\    case PIX_FMT_BGR565:\        {\            const int dr1= dither_2x2_8[y&1    ][0];\            const int dg1= dither_2x2_4[y&1    ][0];\            const int db1= dither_2x2_8[(y&1)^1][0];\            const int dr2= dither_2x2_8[y&1    ][1];\            const int dg2= dither_2x2_4[y&1    ][1];\            const int db2= dither_2x2_8[(y&1)^1][1];\            func(uint16_t)\                ((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];\                ((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];\            }\        }\        break;\    case PIX_FMT_RGB555:\    case PIX_FMT_BGR555:\        {\            const int dr1= dither_2x2_8[y&1    ][0];\            const int dg1= dither_2x2_8[y&1    ][1];\            const int db1= dither_2x2_8[(y&1)^1][0];\            const int dr2= dither_2x2_8[y&1    ][1];\            const int dg2= dither_2x2_8[y&1    ][0];\            const int db2= dither_2x2_8[(y&1)^1][1];\            func(uint16_t)\                ((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];\                ((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];\            }\        }\        break;\    case PIX_FMT_RGB8:\    case PIX_FMT_BGR8:\        {\            const uint8_t * const d64= dither_8x8_73[y&7];\            const uint8_t * const d32= dither_8x8_32[y&7];\            func(uint8_t)\                ((uint8_t*)dest)[i2+0]= r[Y1+d32[(i2+0)&7]] + g[Y1+d32[(i2+0)&7]] + b[Y1+d64[(i2+0)&7]];\                ((uint8_t*)dest)[i2+1]= r[Y2+d32[(i2+1)&7]] + g[Y2+d32[(i2+1)&7]] + b[Y2+d64[(i2+1)&7]];\            }\        }\        break;\    case PIX_FMT_RGB4:\    case PIX_FMT_BGR4:\        {\            const uint8_t * const d64= dither_8x8_73 [y&7];\            const uint8_t * const d128=dither_8x8_220[y&7];\            func(uint8_t)\                ((uint8_t*)dest)[i]= r[Y1+d128[(i2+0)&7]] + g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]]\                                 + ((r[Y2+d128[(i2+1)&7]] + g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]])<<4);\            }\        }\        break;\    case PIX_FMT_RGB4_BYTE:\    case PIX_FMT_BGR4_BYTE:\        {\            const uint8_t * const d64= dither_8x8_73 [y&7];\            const uint8_t * const d128=dither_8x8_220[y&7];\            func(uint8_t)\                ((uint8_t*)dest)[i2+0]= r[Y1+d128[(i2+0)&7]] + g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]];\                ((uint8_t*)dest)[i2+1]= r[Y2+d128[(i2+1)&7]] + g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]];\            }\        }\        break;\    case PIX_FMT_MONOBLACK:\        {\            const uint8_t * const d128=dither_8x8_220[y&7];\            uint8_t *g= c->table_gU[128] + c->table_gV[128];\            for (i=0; i<dstW-7; i+=8){\                int acc;\                acc =       g[((buf0[i  ]*yalpha1+buf1[i  ]*yalpha)>>19) + d128[0]];\                acc+= acc + g[((buf0[i+1]*yalpha1+buf1[i+1]*yalpha)>>19) + d128[1]];\                acc+= acc + g[((buf0[i+2]*yalpha1+buf1[i+2]*yalpha)>>19) + d128[2]];\                acc+= acc + g[((buf0[i+3]*yalpha1+buf1[i+3]*yalpha)>>19) + d128[3]];\                acc+= acc + g[((buf0[i+4]*yalpha1+buf1[i+4]*yalpha)>>19) + d128[4]];\                acc+= acc + g[((buf0[i+5]*yalpha1+buf1[i+5]*yalpha)>>19) + d128[5]];\                acc+= acc + g[((buf0[i+6]*yalpha1+buf1[i+6]*yalpha)>>19) + d128[6]];\                acc+= acc + g[((buf0[i+7]*yalpha1+buf1[i+7]*yalpha)>>19) + d128[7]];\                ((uint8_t*)dest)[0]= acc;\                dest++;\            }\\/*\((uint8_t*)dest)-= dstW>>4;\{\            int acc=0;\            int left=0;\            static int top[1024];\            static int last_new[1024][1024];\            static int last_in3[1024][1024];\            static int drift[1024][1024];\            int topLeft=0;\            int shift=0;\            int count=0;\            const uint8_t * const d128=dither_8x8_220[y&7];\            int error_new=0;\            int error_in3=0;\            int f=0;\            \            for (i=dstW>>1; i<dstW; i++){\                int in= ((buf0[i  ]*yalpha1+buf1[i  ]*yalpha)>>19);\                int in2 = (76309 * (in - 16) + 32768) >> 16;\                int in3 = (in2 < 0) ? 0 : ((in2 > 255) ? 255 : in2);\                int old= (left*7 + topLeft + top[i]*5 + top[i+1]*3)/20 + in3\                         + (last_new[y][i] - in3)*f/256;\                int new= old> 128 ? 255 : 0;\\                error_new+= FFABS(last_new[y][i] - new);\                error_in3+= FFABS(last_in3[y][i] - in3);\                f= error_new - error_in3*4;\                if (f<0) f=0;\                if (f>256) f=256;\\                topLeft= top[i];\                left= top[i]= old - new;\                last_new[y][i]= new;\                last_in3[y][i]= in3;\\                acc+= acc + (new&1);\                if ((i&7)==6){\                    ((uint8_t*)dest)[0]= acc;\                    ((uint8_t*)dest)++;\                }\            }\}\*/\        }\        break;\    case PIX_FMT_YUYV422:\        func2\            ((uint8_t*)dest)[2*i2+0]= Y1;\            ((uint8_t*)dest)[2*i2+1]= U;\            ((uint8_t*)dest)[2*i2+2]= Y2;\            ((uint8_t*)dest)[2*i2+3]= V;\        }                \        break;\    case PIX_FMT_UYVY422:\        func2\            ((uint8_t*)dest)[2*i2+0]= U;\            ((uint8_t*)dest)[2*i2+1]= Y1;\            ((uint8_t*)dest)[2*i2+2]= V;\            ((uint8_t*)dest)[2*i2+3]= Y2;\        }                \        break;\    }\static inline void yuv2packedXinC(SwsContext *c, int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,                                  int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,                                  uint8_t *dest, int dstW, int y){    int i;    switch(c->dstFormat)    {    case PIX_FMT_BGR32:    case PIX_FMT_RGB32:        YSCALE_YUV_2_RGBX_C(uint32_t)            ((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1];            ((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2];        }        break;    case PIX_FMT_RGB24:        YSCALE_YUV_2_RGBX_C(uint8_t)            ((uint8_t*)dest)[0]= r[Y1];            ((uint8_t*)dest)[1]= g[Y1];            ((uint8_t*)dest)[2]= b[Y1];            ((uint8_t*)dest)[3]= r[Y2];            ((uint8_t*)dest)[4]= g[Y2];            ((uint8_t*)dest)[5]= b[Y2];            dest+=6;        }        break;    case PIX_FMT_BGR24:        YSCALE_YUV_2_RGBX_C(uint8_t)            ((uint8_t*)dest)[0]= b[Y1];            ((uint8_t*)dest)[1]= g[Y1];            ((uint8_t*)dest)[2]= r[Y1];            ((uint8_t*)dest)[3]= b[Y2];            ((uint8_t*)dest)[4]= g[Y2];            ((uint8_t*)dest)[5]= r[Y2];            dest+=6;        }        break;    case PIX_FMT_RGB565:    case PIX_FMT_BGR565:        {            const int dr1= dither_2x2_8[y&1    ][0];            const int dg1= dither_2x2_4[y&1    ][0];            const int db1= dither_2x2_8[(y&1)^1][0];            const int dr2= dither_2x2_8[y&1    ][1];            const int dg2= dither_2x2_4[y&1    ][1];            const int db2= dither_2x2_8[(y&1)^1][1];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -