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

📄 dsputil.c

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 C
📖 第 1 页 / 共 4 页
字号:
        s += abs(pix1[3] - avg2(pix2[3], pix2[4]));        s += abs(pix1[4] - avg2(pix2[4], pix2[5]));        s += abs(pix1[5] - avg2(pix2[5], pix2[6]));        s += abs(pix1[6] - avg2(pix2[6], pix2[7]));        s += abs(pix1[7] - avg2(pix2[7], pix2[8]));        s += abs(pix1[8] - avg2(pix2[8], pix2[9]));        s += abs(pix1[9] - avg2(pix2[9], pix2[10]));        s += abs(pix1[10] - avg2(pix2[10], pix2[11]));        s += abs(pix1[11] - avg2(pix2[11], pix2[12]));        s += abs(pix1[12] - avg2(pix2[12], pix2[13]));        s += abs(pix1[13] - avg2(pix2[13], pix2[14]));        s += abs(pix1[14] - avg2(pix2[14], pix2[15]));        s += abs(pix1[15] - avg2(pix2[15], pix2[16]));        pix1 += line_size;        pix2 += line_size;    }    return s;}static int pix_abs16x16_y2_c(UINT8 *pix1, UINT8 *pix2, int line_size){    int s, i;    UINT8 *pix3 = pix2 + line_size;    s = 0;    for(i=0;i<16;i++) {        s += abs(pix1[0] - avg2(pix2[0], pix3[0]));        s += abs(pix1[1] - avg2(pix2[1], pix3[1]));        s += abs(pix1[2] - avg2(pix2[2], pix3[2]));        s += abs(pix1[3] - avg2(pix2[3], pix3[3]));        s += abs(pix1[4] - avg2(pix2[4], pix3[4]));        s += abs(pix1[5] - avg2(pix2[5], pix3[5]));        s += abs(pix1[6] - avg2(pix2[6], pix3[6]));        s += abs(pix1[7] - avg2(pix2[7], pix3[7]));        s += abs(pix1[8] - avg2(pix2[8], pix3[8]));        s += abs(pix1[9] - avg2(pix2[9], pix3[9]));        s += abs(pix1[10] - avg2(pix2[10], pix3[10]));        s += abs(pix1[11] - avg2(pix2[11], pix3[11]));        s += abs(pix1[12] - avg2(pix2[12], pix3[12]));        s += abs(pix1[13] - avg2(pix2[13], pix3[13]));        s += abs(pix1[14] - avg2(pix2[14], pix3[14]));        s += abs(pix1[15] - avg2(pix2[15], pix3[15]));        pix1 += line_size;        pix2 += line_size;        pix3 += line_size;    }    return s;}static int pix_abs16x16_xy2_c(UINT8 *pix1, UINT8 *pix2, int line_size){    int s, i;    UINT8 *pix3 = pix2 + line_size;    s = 0;    for(i=0;i<16;i++) {        s += abs(pix1[0] - avg4(pix2[0], pix2[1], pix3[0], pix3[1]));        s += abs(pix1[1] - avg4(pix2[1], pix2[2], pix3[1], pix3[2]));        s += abs(pix1[2] - avg4(pix2[2], pix2[3], pix3[2], pix3[3]));        s += abs(pix1[3] - avg4(pix2[3], pix2[4], pix3[3], pix3[4]));        s += abs(pix1[4] - avg4(pix2[4], pix2[5], pix3[4], pix3[5]));        s += abs(pix1[5] - avg4(pix2[5], pix2[6], pix3[5], pix3[6]));        s += abs(pix1[6] - avg4(pix2[6], pix2[7], pix3[6], pix3[7]));        s += abs(pix1[7] - avg4(pix2[7], pix2[8], pix3[7], pix3[8]));        s += abs(pix1[8] - avg4(pix2[8], pix2[9], pix3[8], pix3[9]));        s += abs(pix1[9] - avg4(pix2[9], pix2[10], pix3[9], pix3[10]));        s += abs(pix1[10] - avg4(pix2[10], pix2[11], pix3[10], pix3[11]));        s += abs(pix1[11] - avg4(pix2[11], pix2[12], pix3[11], pix3[12]));        s += abs(pix1[12] - avg4(pix2[12], pix2[13], pix3[12], pix3[13]));        s += abs(pix1[13] - avg4(pix2[13], pix2[14], pix3[13], pix3[14]));        s += abs(pix1[14] - avg4(pix2[14], pix2[15], pix3[14], pix3[15]));        s += abs(pix1[15] - avg4(pix2[15], pix2[16], pix3[15], pix3[16]));        pix1 += line_size;        pix2 += line_size;        pix3 += line_size;    }    return s;}static int pix_abs8x8_c(UINT8 *pix1, UINT8 *pix2, int line_size){    int s, i;    s = 0;    for(i=0;i<8;i++) {        s += abs(pix1[0] - pix2[0]);        s += abs(pix1[1] - pix2[1]);        s += abs(pix1[2] - pix2[2]);        s += abs(pix1[3] - pix2[3]);        s += abs(pix1[4] - pix2[4]);        s += abs(pix1[5] - pix2[5]);        s += abs(pix1[6] - pix2[6]);        s += abs(pix1[7] - pix2[7]);        pix1 += line_size;        pix2 += line_size;    }    return s;}static int pix_abs8x8_x2_c(UINT8 *pix1, UINT8 *pix2, int line_size){    int s, i;    s = 0;    for(i=0;i<8;i++) {        s += abs(pix1[0] - avg2(pix2[0], pix2[1]));        s += abs(pix1[1] - avg2(pix2[1], pix2[2]));        s += abs(pix1[2] - avg2(pix2[2], pix2[3]));        s += abs(pix1[3] - avg2(pix2[3], pix2[4]));        s += abs(pix1[4] - avg2(pix2[4], pix2[5]));        s += abs(pix1[5] - avg2(pix2[5], pix2[6]));        s += abs(pix1[6] - avg2(pix2[6], pix2[7]));        s += abs(pix1[7] - avg2(pix2[7], pix2[8]));        pix1 += line_size;        pix2 += line_size;    }    return s;}static int pix_abs8x8_y2_c(UINT8 *pix1, UINT8 *pix2, int line_size){    int s, i;    UINT8 *pix3 = pix2 + line_size;    s = 0;    for(i=0;i<8;i++) {        s += abs(pix1[0] - avg2(pix2[0], pix3[0]));        s += abs(pix1[1] - avg2(pix2[1], pix3[1]));        s += abs(pix1[2] - avg2(pix2[2], pix3[2]));        s += abs(pix1[3] - avg2(pix2[3], pix3[3]));        s += abs(pix1[4] - avg2(pix2[4], pix3[4]));        s += abs(pix1[5] - avg2(pix2[5], pix3[5]));        s += abs(pix1[6] - avg2(pix2[6], pix3[6]));        s += abs(pix1[7] - avg2(pix2[7], pix3[7]));        pix1 += line_size;        pix2 += line_size;        pix3 += line_size;    }    return s;}static int pix_abs8x8_xy2_c(UINT8 *pix1, UINT8 *pix2, int line_size){    int s, i;    UINT8 *pix3 = pix2 + line_size;    s = 0;    for(i=0;i<8;i++) {        s += abs(pix1[0] - avg4(pix2[0], pix2[1], pix3[0], pix3[1]));        s += abs(pix1[1] - avg4(pix2[1], pix2[2], pix3[1], pix3[2]));        s += abs(pix1[2] - avg4(pix2[2], pix2[3], pix3[2], pix3[3]));        s += abs(pix1[3] - avg4(pix2[3], pix2[4], pix3[3], pix3[4]));        s += abs(pix1[4] - avg4(pix2[4], pix2[5], pix3[4], pix3[5]));        s += abs(pix1[5] - avg4(pix2[5], pix2[6], pix3[5], pix3[6]));        s += abs(pix1[6] - avg4(pix2[6], pix2[7], pix3[6], pix3[7]));        s += abs(pix1[7] - avg4(pix2[7], pix2[8], pix3[7], pix3[8]));        pix1 += line_size;        pix2 += line_size;        pix3 += line_size;    }    return s;}void ff_block_permute(INT16 *block, UINT8 *permutation, const UINT8 *scantable, int last){    int i;    INT16 temp[64];        if(last<=0) return;    for(i=0; i<=last; i++){        const int j= scantable[i];        temp[j]= block[j];        block[j]=0;    }        for(i=0; i<=last; i++){        const int j= scantable[i];        const int perm_j= permutation[j];        block[perm_j]= temp[j];    }}static void clear_blocks_c(DCTELEM *blocks){    memset(blocks, 0, sizeof(DCTELEM)*6*64);}static void add_bytes_c(uint8_t *dst, uint8_t *src, int w){    int i;    for(i=0; i+7<w; i++){        dst[i+0] += src[i+0];        dst[i+1] += src[i+1];        dst[i+2] += src[i+2];        dst[i+3] += src[i+3];        dst[i+4] += src[i+4];        dst[i+5] += src[i+5];        dst[i+6] += src[i+6];        dst[i+7] += src[i+7];    }    for(; i<w; i++)        dst[i+0] += src[i+0];}static void diff_bytes_c(uint8_t *dst, uint8_t *src1, uint8_t *src2, int w){    int i;    for(i=0; i+7<w; i++){        dst[i+0] = src1[i+0]-src2[i+0];        dst[i+1] = src1[i+1]-src2[i+1];        dst[i+2] = src1[i+2]-src2[i+2];        dst[i+3] = src1[i+3]-src2[i+3];        dst[i+4] = src1[i+4]-src2[i+4];        dst[i+5] = src1[i+5]-src2[i+5];        dst[i+6] = src1[i+6]-src2[i+6];        dst[i+7] = src1[i+7]-src2[i+7];    }    for(; i<w; i++)        dst[i+0] = src1[i+0]-src2[i+0];}void dsputil_init(DSPContext* c, unsigned mask){    static int init_done = 0;    int i;    if (!init_done) {	for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;	for(i=0;i<MAX_NEG_CROP;i++) {	    cropTbl[i] = 0;	    cropTbl[i + MAX_NEG_CROP + 256] = 255;	}	for(i=0;i<512;i++) {	    squareTbl[i] = (i - 256) * (i - 256);	}	for(i=0; i<64; i++) inv_zigzag_direct16[ff_zigzag_direct[i]]= i+1;	init_done = 1;    }    c->get_pixels = get_pixels_c;    c->diff_pixels = diff_pixels_c;    c->put_pixels_clamped = put_pixels_clamped_c;    c->add_pixels_clamped = add_pixels_clamped_c;    c->gmc1 = gmc1_c;    c->gmc = gmc_c;    c->clear_blocks = clear_blocks_c;    c->pix_sum = pix_sum_c;    c->pix_norm1 = pix_norm1_c;    /* TODO [0] 16  [1] 8 */    c->pix_abs16x16     = pix_abs16x16_c;    c->pix_abs16x16_x2  = pix_abs16x16_x2_c;    c->pix_abs16x16_y2  = pix_abs16x16_y2_c;    c->pix_abs16x16_xy2 = pix_abs16x16_xy2_c;    c->pix_abs8x8     = pix_abs8x8_c;    c->pix_abs8x8_x2  = pix_abs8x8_x2_c;    c->pix_abs8x8_y2  = pix_abs8x8_y2_c;    c->pix_abs8x8_xy2 = pix_abs8x8_xy2_c;#define dspfunc(PFX, IDX, NUM) \    c->PFX ## _pixels_tab[IDX][0] = PFX ## _pixels ## NUM ## _c;     \    c->PFX ## _pixels_tab[IDX][1] = PFX ## _pixels ## NUM ## _x2_c;  \    c->PFX ## _pixels_tab[IDX][2] = PFX ## _pixels ## NUM ## _y2_c;  \    c->PFX ## _pixels_tab[IDX][3] = PFX ## _pixels ## NUM ## _xy2_c    dspfunc(put, 0, 16);    dspfunc(put_no_rnd, 0, 16);    dspfunc(put, 1, 8);    dspfunc(put_no_rnd, 1, 8);    dspfunc(avg, 0, 16);    dspfunc(avg_no_rnd, 0, 16);    dspfunc(avg, 1, 8);    dspfunc(avg_no_rnd, 1, 8);#undef dspfunc#define dspfunc(PFX, IDX, NUM) \    c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_c; \    c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_c; \    c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_c; \    c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_c; \    c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_c; \    c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_c; \    c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_c; \    c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_c; \    c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_c; \    c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_c; \    c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_c; \    c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_c; \    c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_c; \    c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_c; \    c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_c; \    c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_c    dspfunc(put_qpel, 0, 16);    dspfunc(put_no_rnd_qpel, 0, 16);    dspfunc(avg_qpel, 0, 16);    /* dspfunc(avg_no_rnd_qpel, 0, 16); */    dspfunc(put_qpel, 1, 8);    dspfunc(put_no_rnd_qpel, 1, 8);    dspfunc(avg_qpel, 1, 8);    /* dspfunc(avg_no_rnd_qpel, 1, 8); */#undef dspfunc    c->add_bytes= add_bytes_c;    c->diff_bytes= diff_bytes_c;#ifdef HAVE_MMX    dsputil_init_mmx(c, mask);    if (ff_bit_exact)    {        /* FIXME - AVCodec context should have flag for bitexact match */	/* fprintf(stderr, "\n\n\nff_bit_exact %d\n\n\n\n", ff_bit_exact); */	dsputil_set_bit_exact_mmx(c, mask);    }#endif#ifdef ARCH_ARMV4L    dsputil_init_armv4l(c, mask);#endif#ifdef HAVE_MLIB    dsputil_init_mlib(c, mask);#endif#ifdef ARCH_ALPHA    dsputil_init_alpha(c, mask);#endif#ifdef ARCH_POWERPC    dsputil_init_ppc(c, mask);#endif#ifdef HAVE_MMI    dsputil_init_mmi(c, mask);#endif}/* remove any non bit exact operation (testing purpose) */void avcodec_set_bit_exact(void){    ff_bit_exact=1;#ifdef HAVE_MMX// FIXME - better set_bit_exact//    dsputil_set_bit_exact_mmx();#endif}void get_psnr(UINT8 *orig_image[3], UINT8 *coded_image[3],              int orig_linesize[3], int coded_linesize,              AVCodecContext *avctx){    int quad, diff, x, y;    UINT8 *orig, *coded;    UINT32 *sq = squareTbl + 256;        quad = 0;    diff = 0;        /* Luminance */    orig = orig_image[0];    coded = coded_image[0];        for (y=0;y<avctx->height;y++) {        for (x=0;x<avctx->width;x++) {            diff = *(orig + x) - *(coded + x);            quad += sq[diff];        }        orig += orig_linesize[0];        coded += coded_linesize;    }       avctx->psnr_y = (float) quad / (float) (avctx->width * avctx->height);        if (avctx->psnr_y) {        avctx->psnr_y = (float) (255 * 255) / avctx->psnr_y;        avctx->psnr_y = 10 * (float) log10 (avctx->psnr_y);     } else        avctx->psnr_y = 99.99;}

⌨️ 快捷键说明

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