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

📄 dsputil.c

📁 ffmpeg移植到symbian的全部源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
            {  0, 230, 230, 156},            {  0, 138, 138, 113},        },{            // 5/3 16x16 or 32x32 dec=4            {352, 317, 317, 286},            {  0, 328, 328, 233},            {  0, 180, 180, 140},            {  0, 132, 132, 105},        }      }    };    for (i = 0; i < h; i++) {        for (j = 0; j < w; j+=4) {            tmp[32*i+j+0] = (pix1[j+0] - pix2[j+0])<<4;            tmp[32*i+j+1] = (pix1[j+1] - pix2[j+1])<<4;            tmp[32*i+j+2] = (pix1[j+2] - pix2[j+2])<<4;            tmp[32*i+j+3] = (pix1[j+3] - pix2[j+3])<<4;        }        pix1 += line_size;        pix2 += line_size;    }    ff_spatial_dwt(tmp, w, h, 32, type, dec_count);    s=0;    assert(w==h);    for(level=0; level<dec_count; level++){        for(ori= level ? 1 : 0; ori<4; ori++){            int size= w>>(dec_count-level);            int sx= (ori&1) ? size : 0;            int stride= 32<<(dec_count-level);            int sy= (ori&2) ? stride>>1 : 0;            for(i=0; i<size; i++){                for(j=0; j<size; j++){                    int v= tmp[sx + sy + i*stride + j] * scale[type][dec_count-3][level][ori];                    s += FFABS(v);                }            }        }    }    assert(s>=0);    return s>>9;}static int w53_8_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h){    return w_c(v, pix1, pix2, line_size,  8, h, 1);}static int w97_8_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h){    return w_c(v, pix1, pix2, line_size,  8, h, 0);}static int w53_16_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h){    return w_c(v, pix1, pix2, line_size, 16, h, 1);}static int w97_16_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h){    return w_c(v, pix1, pix2, line_size, 16, h, 0);}int w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h){    return w_c(v, pix1, pix2, line_size, 32, h, 1);}int w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h){    return w_c(v, pix1, pix2, line_size, 32, h, 0);}#endif/* draw the edges of width 'w' of an image of size width, height *///FIXME check that this is ok for mpeg4 interlacedstatic void draw_edges_c(uint8_t *buf, int wrap, int width, int height, int w){    uint8_t *ptr, *last_line;    int i;    last_line = buf + (height - 1) * wrap;    for(i=0;i<w;i++) {        /* top and bottom */        memcpy(buf - (i + 1) * wrap, buf, width);        memcpy(last_line + (i + 1) * wrap, last_line, width);    }    /* left and right */    ptr = buf;    for(i=0;i<height;i++) {        memset(ptr - w, ptr[0], w);        memset(ptr + width, ptr[width-1], w);        ptr += wrap;    }    /* corners */    for(i=0;i<w;i++) {        memset(buf - (i + 1) * wrap - w, buf[0], w); /* top left */        memset(buf - (i + 1) * wrap + width, buf[width-1], w); /* top right */        memset(last_line + (i + 1) * wrap - w, last_line[0], w); /* top left */        memset(last_line + (i + 1) * wrap + width, last_line[width-1], w); /* top right */    }}/** * Copies a rectangular area of samples to a temporary buffer and replicates the boarder samples. * @param buf destination buffer * @param src source buffer * @param linesize number of bytes between 2 vertically adjacent samples in both the source and destination buffers * @param block_w width of block * @param block_h height of block * @param src_x x coordinate of the top left sample of the block in the source buffer * @param src_y y coordinate of the top left sample of the block in the source buffer * @param w width of the source buffer * @param h height of the source buffer */void ff_emulated_edge_mc(uint8_t *buf, uint8_t *src, int linesize, int block_w, int block_h,                                    int src_x, int src_y, int w, int h){    int x, y;    int start_y, start_x, end_y, end_x;    if(src_y>= h){        src+= (h-1-src_y)*linesize;        src_y=h-1;    }else if(src_y<=-block_h){        src+= (1-block_h-src_y)*linesize;        src_y=1-block_h;    }    if(src_x>= w){        src+= (w-1-src_x);        src_x=w-1;    }else if(src_x<=-block_w){        src+= (1-block_w-src_x);        src_x=1-block_w;    }    start_y= FFMAX(0, -src_y);    start_x= FFMAX(0, -src_x);    end_y= FFMIN(block_h, h-src_y);    end_x= FFMIN(block_w, w-src_x);    // copy existing part    for(y=start_y; y<end_y; y++){        for(x=start_x; x<end_x; x++){            buf[x + y*linesize]= src[x + y*linesize];        }    }    //top    for(y=0; y<start_y; y++){        for(x=start_x; x<end_x; x++){            buf[x + y*linesize]= buf[x + start_y*linesize];        }    }    //bottom    for(y=end_y; y<block_h; y++){        for(x=start_x; x<end_x; x++){            buf[x + y*linesize]= buf[x + (end_y-1)*linesize];        }    }    for(y=0; y<block_h; y++){       //left        for(x=0; x<start_x; x++){            buf[x + y*linesize]= buf[start_x + y*linesize];        }       //right        for(x=end_x; x<block_w; x++){            buf[x + y*linesize]= buf[end_x - 1 + y*linesize];        }    }}static void get_pixels_c(DCTELEM *restrict block, const uint8_t *pixels, int line_size){    int i;    /* read the pixels */    for(i=0;i<8;i++) {        block[0] = pixels[0];        block[1] = pixels[1];        block[2] = pixels[2];        block[3] = pixels[3];        block[4] = pixels[4];        block[5] = pixels[5];        block[6] = pixels[6];        block[7] = pixels[7];        pixels += line_size;        block += 8;    }}static void diff_pixels_c(DCTELEM *restrict block, const uint8_t *s1,                          const uint8_t *s2, int stride){    int i;    /* read the pixels */    for(i=0;i<8;i++) {        block[0] = s1[0] - s2[0];        block[1] = s1[1] - s2[1];        block[2] = s1[2] - s2[2];        block[3] = s1[3] - s2[3];        block[4] = s1[4] - s2[4];        block[5] = s1[5] - s2[5];        block[6] = s1[6] - s2[6];        block[7] = s1[7] - s2[7];        s1 += stride;        s2 += stride;        block += 8;    }}static void put_pixels_clamped_c(const DCTELEM *block, uint8_t *restrict pixels,                                 int line_size){    int i;    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;    /* read the pixels */    for(i=0;i<8;i++) {        pixels[0] = cm[block[0]];        pixels[1] = cm[block[1]];        pixels[2] = cm[block[2]];        pixels[3] = cm[block[3]];        pixels[4] = cm[block[4]];        pixels[5] = cm[block[5]];        pixels[6] = cm[block[6]];        pixels[7] = cm[block[7]];        pixels += line_size;        block += 8;    }}static void put_pixels_clamped4_c(const DCTELEM *block, uint8_t *restrict pixels,                                 int line_size){    int i;    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;    /* read the pixels */    for(i=0;i<4;i++) {        pixels[0] = cm[block[0]];        pixels[1] = cm[block[1]];        pixels[2] = cm[block[2]];        pixels[3] = cm[block[3]];        pixels += line_size;        block += 8;    }}static void put_pixels_clamped2_c(const DCTELEM *block, uint8_t *restrict pixels,                                 int line_size){    int i;    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;    /* read the pixels */    for(i=0;i<2;i++) {        pixels[0] = cm[block[0]];        pixels[1] = cm[block[1]];        pixels += line_size;        block += 8;    }}static void put_signed_pixels_clamped_c(const DCTELEM *block,                                        uint8_t *restrict pixels,                                        int line_size){    int i, j;    for (i = 0; i < 8; i++) {        for (j = 0; j < 8; j++) {            if (*block < -128)                *pixels = 0;            else if (*block > 127)                *pixels = 255;            else                *pixels = (uint8_t)(*block + 128);            block++;            pixels++;        }        pixels += (line_size - 8);    }}static void add_pixels_clamped_c(const DCTELEM *block, uint8_t *restrict pixels,                          int line_size){    int i;    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;    /* read the pixels */    for(i=0;i<8;i++) {        pixels[0] = cm[pixels[0] + block[0]];        pixels[1] = cm[pixels[1] + block[1]];        pixels[2] = cm[pixels[2] + block[2]];        pixels[3] = cm[pixels[3] + block[3]];        pixels[4] = cm[pixels[4] + block[4]];        pixels[5] = cm[pixels[5] + block[5]];        pixels[6] = cm[pixels[6] + block[6]];        pixels[7] = cm[pixels[7] + block[7]];        pixels += line_size;        block += 8;    }}static void add_pixels_clamped4_c(const DCTELEM *block, uint8_t *restrict pixels,                          int line_size){    int i;    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;    /* read the pixels */    for(i=0;i<4;i++) {        pixels[0] = cm[pixels[0] + block[0]];        pixels[1] = cm[pixels[1] + block[1]];        pixels[2] = cm[pixels[2] + block[2]];        pixels[3] = cm[pixels[3] + block[3]];        pixels += line_size;        block += 8;    }}static void add_pixels_clamped2_c(const DCTELEM *block, uint8_t *restrict pixels,                          int line_size){    int i;    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;    /* read the pixels */    for(i=0;i<2;i++) {        pixels[0] = cm[pixels[0] + block[0]];        pixels[1] = cm[pixels[1] + block[1]];        pixels += line_size;        block += 8;    }}static void add_pixels8_c(uint8_t *restrict pixels, DCTELEM *block, int line_size){    int i;    for(i=0;i<8;i++) {        pixels[0] += block[0];        pixels[1] += block[1];        pixels[2] += block[2];        pixels[3] += block[3];        pixels[4] += block[4];        pixels[5] += block[5];        pixels[6] += block[6];        pixels[7] += block[7];        pixels += line_size;        block += 8;    }}static void add_pixels4_c(uint8_t *restrict pixels, DCTELEM *block, int line_size){

⌨️ 快捷键说明

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