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

📄 swscale_template.c.svn-base

📁 mediastreamer2是开源的网络传输媒体流的库
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
#define YSCALEYUV2RGB1(index, c)  REAL_YSCALEYUV2RGB1(index, c)#define REAL_YSCALEYUV2PACKED1b(index, c) \    "xor "#index", "#index"             \n\t"\    ASMALIGN(4)\    "1:                                 \n\t"\    "movq     (%2, "#index"), %%mm2     \n\t" /* uvbuf0[eax]*/\    "movq     (%3, "#index"), %%mm3     \n\t" /* uvbuf1[eax]*/\    "movq 4096(%2, "#index"), %%mm5     \n\t" /* uvbuf0[eax+2048]*/\    "movq 4096(%3, "#index"), %%mm4     \n\t" /* uvbuf1[eax+2048]*/\    "paddw             %%mm2, %%mm3     \n\t" /* uvbuf0[eax] + uvbuf1[eax]*/\    "paddw             %%mm5, %%mm4     \n\t" /* uvbuf0[eax+2048] + uvbuf1[eax+2048]*/\    "psrlw                $8, %%mm3     \n\t" \    "psrlw                $8, %%mm4     \n\t" \    "movq  (%0, "#index", 2), %%mm1     \n\t" /*buf0[eax]*/\    "movq 8(%0, "#index", 2), %%mm7     \n\t" /*buf0[eax]*/\    "psraw                $7, %%mm1     \n\t" \    "psraw                $7, %%mm7     \n\t"#define YSCALEYUV2PACKED1b(index, c)  REAL_YSCALEYUV2PACKED1b(index, c)// do vertical chrominance interpolation#define REAL_YSCALEYUV2RGB1b(index, c) \    "xor            "#index", "#index"  \n\t"\    ASMALIGN(4)\    "1:                                 \n\t"\    "movq     (%2, "#index"), %%mm2     \n\t" /* uvbuf0[eax]*/\    "movq     (%3, "#index"), %%mm3     \n\t" /* uvbuf1[eax]*/\    "movq 4096(%2, "#index"), %%mm5     \n\t" /* uvbuf0[eax+2048]*/\    "movq 4096(%3, "#index"), %%mm4     \n\t" /* uvbuf1[eax+2048]*/\    "paddw             %%mm2, %%mm3     \n\t" /* uvbuf0[eax] + uvbuf1[eax]*/\    "paddw             %%mm5, %%mm4     \n\t" /* uvbuf0[eax+2048] + uvbuf1[eax+2048]*/\    "psrlw                $5, %%mm3     \n\t" /*FIXME might overflow*/\    "psrlw                $5, %%mm4     \n\t" /*FIXME might overflow*/\    "psubw  "U_OFFSET"("#c"), %%mm3     \n\t" /* (U-128)8*/\    "psubw  "V_OFFSET"("#c"), %%mm4     \n\t" /* (V-128)8*/\    "movq              %%mm3, %%mm2     \n\t" /* (U-128)8*/\    "movq              %%mm4, %%mm5     \n\t" /* (V-128)8*/\    "pmulhw "UG_COEFF"("#c"), %%mm3     \n\t"\    "pmulhw "VG_COEFF"("#c"), %%mm4     \n\t"\    /* mm2=(U-128)8, mm3=ug, mm4=vg mm5=(V-128)8 */\    "movq  (%0, "#index", 2), %%mm1     \n\t" /*buf0[eax]*/\    "movq 8(%0, "#index", 2), %%mm7     \n\t" /*buf0[eax]*/\    "psraw                $4, %%mm1     \n\t" /* buf0[eax] - buf1[eax] >>4*/\    "psraw                $4, %%mm7     \n\t" /* buf0[eax] - buf1[eax] >>4*/\    "pmulhw "UB_COEFF"("#c"), %%mm2     \n\t"\    "pmulhw "VR_COEFF"("#c"), %%mm5     \n\t"\    "psubw  "Y_OFFSET"("#c"), %%mm1     \n\t" /* 8(Y-16)*/\    "psubw  "Y_OFFSET"("#c"), %%mm7     \n\t" /* 8(Y-16)*/\    "pmulhw  "Y_COEFF"("#c"), %%mm1     \n\t"\    "pmulhw  "Y_COEFF"("#c"), %%mm7     \n\t"\    /* mm1= Y1, mm2=ub, mm3=ug, mm4=vg mm5=vr, mm7=Y2 */\    "paddw             %%mm3, %%mm4     \n\t"\    "movq              %%mm2, %%mm0     \n\t"\    "movq              %%mm5, %%mm6     \n\t"\    "movq              %%mm4, %%mm3     \n\t"\    "punpcklwd         %%mm2, %%mm2     \n\t"\    "punpcklwd         %%mm5, %%mm5     \n\t"\    "punpcklwd         %%mm4, %%mm4     \n\t"\    "paddw             %%mm1, %%mm2     \n\t"\    "paddw             %%mm1, %%mm5     \n\t"\    "paddw             %%mm1, %%mm4     \n\t"\    "punpckhwd         %%mm0, %%mm0     \n\t"\    "punpckhwd         %%mm6, %%mm6     \n\t"\    "punpckhwd         %%mm3, %%mm3     \n\t"\    "paddw             %%mm7, %%mm0     \n\t"\    "paddw             %%mm7, %%mm6     \n\t"\    "paddw             %%mm7, %%mm3     \n\t"\    /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\    "packuswb          %%mm0, %%mm2     \n\t"\    "packuswb          %%mm6, %%mm5     \n\t"\    "packuswb          %%mm3, %%mm4     \n\t"\    "pxor              %%mm7, %%mm7     \n\t"#define YSCALEYUV2RGB1b(index, c)  REAL_YSCALEYUV2RGB1b(index, c)#define REAL_WRITEBGR32(dst, dstw, index) \    /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */\    "movq      %%mm2, %%mm1     \n\t" /* B */\    "movq      %%mm5, %%mm6     \n\t" /* R */\    "punpcklbw %%mm4, %%mm2     \n\t" /* GBGBGBGB 0 */\    "punpcklbw %%mm7, %%mm5     \n\t" /* 0R0R0R0R 0 */\    "punpckhbw %%mm4, %%mm1     \n\t" /* GBGBGBGB 2 */\    "punpckhbw %%mm7, %%mm6     \n\t" /* 0R0R0R0R 2 */\    "movq      %%mm2, %%mm0     \n\t" /* GBGBGBGB 0 */\    "movq      %%mm1, %%mm3     \n\t" /* GBGBGBGB 2 */\    "punpcklwd %%mm5, %%mm0     \n\t" /* 0RGB0RGB 0 */\    "punpckhwd %%mm5, %%mm2     \n\t" /* 0RGB0RGB 1 */\    "punpcklwd %%mm6, %%mm1     \n\t" /* 0RGB0RGB 2 */\    "punpckhwd %%mm6, %%mm3     \n\t" /* 0RGB0RGB 3 */\\    MOVNTQ(%%mm0,   (dst, index, 4))\    MOVNTQ(%%mm2,  8(dst, index, 4))\    MOVNTQ(%%mm1, 16(dst, index, 4))\    MOVNTQ(%%mm3, 24(dst, index, 4))\\    "add      $8, "#index"      \n\t"\    "cmp "#dstw", "#index"      \n\t"\    " jb      1b                \n\t"#define WRITEBGR32(dst, dstw, index)  REAL_WRITEBGR32(dst, dstw, index)#define REAL_WRITEBGR16(dst, dstw, index) \    "pand "MANGLE(bF8)", %%mm2  \n\t" /* B */\    "pand "MANGLE(bFC)", %%mm4  \n\t" /* G */\    "pand "MANGLE(bF8)", %%mm5  \n\t" /* R */\    "psrlq           $3, %%mm2  \n\t"\\    "movq         %%mm2, %%mm1  \n\t"\    "movq         %%mm4, %%mm3  \n\t"\\    "punpcklbw    %%mm7, %%mm3  \n\t"\    "punpcklbw    %%mm5, %%mm2  \n\t"\    "punpckhbw    %%mm7, %%mm4  \n\t"\    "punpckhbw    %%mm5, %%mm1  \n\t"\\    "psllq           $3, %%mm3  \n\t"\    "psllq           $3, %%mm4  \n\t"\\    "por          %%mm3, %%mm2  \n\t"\    "por          %%mm4, %%mm1  \n\t"\\    MOVNTQ(%%mm2,  (dst, index, 2))\    MOVNTQ(%%mm1, 8(dst, index, 2))\\    "add             $8, "#index"   \n\t"\    "cmp        "#dstw", "#index"   \n\t"\    " jb             1b             \n\t"#define WRITEBGR16(dst, dstw, index)  REAL_WRITEBGR16(dst, dstw, index)#define REAL_WRITEBGR15(dst, dstw, index) \    "pand "MANGLE(bF8)", %%mm2  \n\t" /* B */\    "pand "MANGLE(bF8)", %%mm4  \n\t" /* G */\    "pand "MANGLE(bF8)", %%mm5  \n\t" /* R */\    "psrlq           $3, %%mm2  \n\t"\    "psrlq           $1, %%mm5  \n\t"\\    "movq         %%mm2, %%mm1  \n\t"\    "movq         %%mm4, %%mm3  \n\t"\\    "punpcklbw    %%mm7, %%mm3  \n\t"\    "punpcklbw    %%mm5, %%mm2  \n\t"\    "punpckhbw    %%mm7, %%mm4  \n\t"\    "punpckhbw    %%mm5, %%mm1  \n\t"\\    "psllq           $2, %%mm3  \n\t"\    "psllq           $2, %%mm4  \n\t"\\    "por          %%mm3, %%mm2  \n\t"\    "por          %%mm4, %%mm1  \n\t"\\    MOVNTQ(%%mm2,  (dst, index, 2))\    MOVNTQ(%%mm1, 8(dst, index, 2))\\    "add             $8, "#index"   \n\t"\    "cmp        "#dstw", "#index"   \n\t"\    " jb             1b             \n\t"#define WRITEBGR15(dst, dstw, index)  REAL_WRITEBGR15(dst, dstw, index)#define WRITEBGR24OLD(dst, dstw, index) \    /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */\    "movq      %%mm2, %%mm1             \n\t" /* B */\    "movq      %%mm5, %%mm6             \n\t" /* R */\    "punpcklbw %%mm4, %%mm2             \n\t" /* GBGBGBGB 0 */\    "punpcklbw %%mm7, %%mm5             \n\t" /* 0R0R0R0R 0 */\    "punpckhbw %%mm4, %%mm1             \n\t" /* GBGBGBGB 2 */\    "punpckhbw %%mm7, %%mm6             \n\t" /* 0R0R0R0R 2 */\    "movq      %%mm2, %%mm0             \n\t" /* GBGBGBGB 0 */\    "movq      %%mm1, %%mm3             \n\t" /* GBGBGBGB 2 */\    "punpcklwd %%mm5, %%mm0             \n\t" /* 0RGB0RGB 0 */\    "punpckhwd %%mm5, %%mm2             \n\t" /* 0RGB0RGB 1 */\    "punpcklwd %%mm6, %%mm1             \n\t" /* 0RGB0RGB 2 */\    "punpckhwd %%mm6, %%mm3             \n\t" /* 0RGB0RGB 3 */\\    "movq      %%mm0, %%mm4             \n\t" /* 0RGB0RGB 0 */\    "psrlq        $8, %%mm0             \n\t" /* 00RGB0RG 0 */\    "pand "MANGLE(bm00000111)", %%mm4   \n\t" /* 00000RGB 0 */\    "pand "MANGLE(bm11111000)", %%mm0   \n\t" /* 00RGB000 0.5 */\    "por       %%mm4, %%mm0             \n\t" /* 00RGBRGB 0 */\    "movq      %%mm2, %%mm4             \n\t" /* 0RGB0RGB 1 */\    "psllq       $48, %%mm2             \n\t" /* GB000000 1 */\    "por       %%mm2, %%mm0             \n\t" /* GBRGBRGB 0 */\\    "movq      %%mm4, %%mm2             \n\t" /* 0RGB0RGB 1 */\    "psrld       $16, %%mm4             \n\t" /* 000R000R 1 */\    "psrlq       $24, %%mm2             \n\t" /* 0000RGB0 1.5 */\    "por       %%mm4, %%mm2             \n\t" /* 000RRGBR 1 */\    "pand "MANGLE(bm00001111)", %%mm2   \n\t" /* 0000RGBR 1 */\    "movq      %%mm1, %%mm4             \n\t" /* 0RGB0RGB 2 */\    "psrlq        $8, %%mm1             \n\t" /* 00RGB0RG 2 */\    "pand "MANGLE(bm00000111)", %%mm4   \n\t" /* 00000RGB 2 */\    "pand "MANGLE(bm11111000)", %%mm1   \n\t" /* 00RGB000 2.5 */\    "por       %%mm4, %%mm1             \n\t" /* 00RGBRGB 2 */\    "movq      %%mm1, %%mm4             \n\t" /* 00RGBRGB 2 */\    "psllq       $32, %%mm1             \n\t" /* BRGB0000 2 */\    "por       %%mm1, %%mm2             \n\t" /* BRGBRGBR 1 */\\    "psrlq       $32, %%mm4             \n\t" /* 000000RG 2.5 */\    "movq      %%mm3, %%mm5             \n\t" /* 0RGB0RGB 3 */\    "psrlq        $8, %%mm3             \n\t" /* 00RGB0RG 3 */\    "pand "MANGLE(bm00000111)", %%mm5   \n\t" /* 00000RGB 3 */\    "pand "MANGLE(bm11111000)", %%mm3   \n\t" /* 00RGB000 3.5 */\    "por       %%mm5, %%mm3             \n\t" /* 00RGBRGB 3 */\    "psllq       $16, %%mm3             \n\t" /* RGBRGB00 3 */\    "por       %%mm4, %%mm3             \n\t" /* RGBRGBRG 2.5 */\\    MOVNTQ(%%mm0,   (dst))\    MOVNTQ(%%mm2,  8(dst))\    MOVNTQ(%%mm3, 16(dst))\    "add         $24, "#dst"            \n\t"\\    "add          $8, "#index"          \n\t"\    "cmp     "#dstw", "#index"          \n\t"\    " jb          1b                    \n\t"#define WRITEBGR24MMX(dst, dstw, index) \    /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */\    "movq      %%mm2, %%mm1     \n\t" /* B */\    "movq      %%mm5, %%mm6     \n\t" /* R */\    "punpcklbw %%mm4, %%mm2     \n\t" /* GBGBGBGB 0 */\    "punpcklbw %%mm7, %%mm5     \n\t" /* 0R0R0R0R 0 */\    "punpckhbw %%mm4, %%mm1     \n\t" /* GBGBGBGB 2 */\    "punpckhbw %%mm7, %%mm6     \n\t" /* 0R0R0R0R 2 */\    "movq      %%mm2, %%mm0     \n\t" /* GBGBGBGB 0 */\    "movq      %%mm1, %%mm3     \n\t" /* GBGBGBGB 2 */\    "punpcklwd %%mm5, %%mm0     \n\t" /* 0RGB0RGB 0 */\    "punpckhwd %%mm5, %%mm2     \n\t" /* 0RGB0RGB 1 */\    "punpcklwd %%mm6, %%mm1     \n\t" /* 0RGB0RGB 2 */\    "punpckhwd %%mm6, %%mm3     \n\t" /* 0RGB0RGB 3 */\\    "movq      %%mm0, %%mm4     \n\t" /* 0RGB0RGB 0 */\    "movq      %%mm2, %%mm6     \n\t" /* 0RGB0RGB 1 */\    "movq      %%mm1, %%mm5     \n\t" /* 0RGB0RGB 2 */\    "movq      %%mm3, %%mm7     \n\t" /* 0RGB0RGB 3 */\\    "psllq       $40, %%mm0     \n\t" /* RGB00000 0 */\    "psllq       $40, %%mm2     \n\t" /* RGB00000 1 */\    "psllq       $40, %%mm1     \n\t" /* RGB00000 2 */\    "psllq       $40, %%mm3     \n\t" /* RGB00000 3 */\\    "punpckhdq %%mm4, %%mm0     \n\t" /* 0RGBRGB0 0 */\    "punpckhdq %%mm6, %%mm2     \n\t" /* 0RGBRGB0 1 */\    "punpckhdq %%mm5, %%mm1     \n\t" /* 0RGBRGB0 2 */\    "punpckhdq %%mm7, %%mm3     \n\t" /* 0RGBRGB0 3 */\\    "psrlq        $8, %%mm0     \n\t" /* 00RGBRGB 0 */\    "movq      %%mm2, %%mm6     \n\t" /* 0RGBRGB0 1 */\    "psllq       $40, %%mm2     \n\t" /* GB000000 1 */\    "por       %%mm2, %%mm0     \n\t" /* GBRGBRGB 0 */\    MOVNTQ(%%mm0, (dst))\\    "psrlq       $24, %%mm6     \n\t" /* 0000RGBR 1 */\    "movq      %%mm1, %%mm5     \n\t" /* 0RGBRGB0 2 */\    "psllq       $24, %%mm1     \n\t" /* BRGB0000 2 */\    "por       %%mm1, %%mm6     \n\t" /* BRGBRGBR 1 */\    MOVNTQ(%%mm6, 8(dst))\\    "psrlq       $40, %%mm5     \n\t" /* 000000RG 2 */\    "psllq        $8, %%mm3     \n\t" /* RGBRGB00 3 */\    "por       %%mm3, %%mm5     \n\t" /* RGBRGBRG 2 */\    MOVNTQ(%%mm5, 16(dst))\\    "add         $24, "#dst"    \n\t"\\    "add          $8, "#index"  \n\t"\    "cmp     "#dstw", "#index"  \n\t"\    " jb          1b            \n\t"#define WRITEBGR24MMX2(dst, dstw, index) \    /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */\    "movq "MANGLE(ff_M24A)", %%mm0 \n\t"\    "movq "MANGLE(ff_M24C)", %%mm7 \n\t"\    "pshufw $0x50, %%mm2, %%mm1 \n\t" /* B3 B2 B3 B2  B1 B0 B1 B0 */\    "pshufw $0x50, %%mm4, %%mm3 \n\t" /* G3 G2 G3 G2  G1 G0 G1 G0 */\    "pshufw $0x00, %%mm5, %%mm6 \n\t" /* R1 R0 R1 R0  R1 R0 R1 R0 */\\    "pand   %%mm0, %%mm1        \n\t" /*    B2        B1       B0 */\    "pand   %%mm0, %%mm3        \n\t" /*    G2        G1       G0 */\    "pand   %%mm7, %%mm6        \n\t" /*       R1        R0       */\\    "psllq     $8, %%mm3        \n\t" /* G2        G1       G0    */\    "por    %%mm1, %%mm6        \n\t"\    "por    %%mm3, %%mm6        \n\t"\    MOVNTQ(%%mm6, (dst))\\    "psrlq     $8, %%mm4        \n\t" /* 00 G7 G6 G5  G4 G3 G2 G1 */\    "pshufw $0xA5, %%mm2, %%mm1 \n\t" /* B5 B4 B5 B4  B3 B2 B3 B2 */\    "pshufw $0x55, %%mm4, %%mm3 \n\t" /* G4 G3 G4 G3  G4 G3 G4 G3 */\    "pshufw $0xA5, %%mm5, %%mm6 \n\t" /* R5 R4 R5 R4  R3 R2 R3 R2 */\\    "pand "MANGLE(ff_M24B)", %%mm1 \n\t" /* B5       B4        B3    */\    "pand   %%mm7, %%mm3        \n\t" /*       G4        G3       */\    "pand   %%mm0, %%mm6        \n\t" /*    R4        R3       R2 */\\    "por    %%mm1, %%mm3        \n\t" /* B5    G4 B4     G3 B3    */\    "por    %%mm3, %%mm6        \n\t"\    MOVNTQ(%%mm6, 8(dst))\\

⌨️ 快捷键说明

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