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

📄 extract.c

📁 VLC Player Source Code
💻 C
📖 第 1 页 / 共 2 页
字号:
            *vout++ = crop( (*y1in * m[6] + (*uin-U) * m[7] + (*vin-V) * m[8])                      / 65536 + V );            *y1out++ = crop( (*y1in++ * m[0] + (*uin-U) * m[1] + (*vin-V) * m[2])                       / 65536 );            *y1out++ = crop( (*y1in++ * m[0] + (*uin++ -U) * m[1] + (*vin++ -V) * m[2])                       / 65536 );        }        y1in  += i_pitch - i_visible_pitch;        y1out += i_pitch - i_visible_pitch;        uin   += i_uv_pitch - i_uv_visible_pitch;        uout  += i_uv_pitch - i_uv_visible_pitch;        vin   += i_uv_pitch - i_uv_visible_pitch;        vout  += i_uv_pitch - i_uv_visible_pitch;    }}static void get_custom_from_packedyuv422( picture_t *p_inpic,                                          picture_t *p_outpic,                                          int *m ){    int i_y_offset, i_u_offset, i_v_offset;    if( GetPackedYuvOffsets( p_inpic->format.i_chroma, &i_y_offset,                         &i_u_offset, &i_v_offset ) != VLC_SUCCESS )        return;    uint8_t *yin = p_inpic->p->p_pixels + i_y_offset;    uint8_t *uin = p_inpic->p->p_pixels + i_u_offset;    uint8_t *vin = p_inpic->p->p_pixels + i_v_offset;    uint8_t *yout = p_outpic->p->p_pixels + i_y_offset;    uint8_t *uout = p_outpic->p->p_pixels + i_u_offset;    uint8_t *vout = p_outpic->p->p_pixels + i_v_offset;    const int i_pitch = p_inpic->p->i_pitch;    const int i_visible_pitch = p_inpic->p->i_visible_pitch;    const int i_visible_lines = p_inpic->p->i_visible_lines;    const uint8_t *yend = yin + i_visible_lines * i_pitch;    while( yin < yend )    {        const uint8_t *ylend = yin + i_visible_pitch;        while( yin < ylend )        {            *uout = crop( (*yin * m[3] + (*uin-U) * m[4] + (*vin-V) * m[5])                      / 65536 + U );            uout += 4;            *vout = crop( (*yin * m[6] + (*uin-U) * m[7] + (*vin-V) * m[8])                     / 65536 + V );            vout += 4;            *yout = crop( (*yin * m[0] + (*uin-U) * m[1] + (*vin-V) * m[2])                       / 65536 );            yin  += 2;            yout += 2;            *yout = crop( (*yin * m[0] + (*uin-U) * m[1] + (*vin-V) * m[2])                       / 65536 );            yin  += 2;            yout += 2;            uin  += 4;            vin  += 4;        }        yin  += i_pitch - i_visible_pitch;        yout += i_pitch - i_visible_pitch;        uin  += i_pitch - i_visible_pitch;        uout += i_pitch - i_visible_pitch;        vin  += i_pitch - i_visible_pitch;        vout += i_pitch - i_visible_pitch;    }}static void get_red_from_yuv420( picture_t *p_inpic, picture_t *p_outpic,                                 int yp, int up, int vp ){    uint8_t *y1in = p_inpic->p[yp].p_pixels;    uint8_t *y2in;    uint8_t *vin  = p_inpic->p[vp].p_pixels;    uint8_t *y1out = p_outpic->p[yp].p_pixels;    uint8_t *y2out;    uint8_t *uout  = p_outpic->p[up].p_pixels;    uint8_t *vout  = p_outpic->p[vp].p_pixels;    const int i_pitch = p_inpic->p[yp].i_pitch;    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;    const int i_uv_pitch = p_inpic->p[up].i_pitch;    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;    const uint8_t *yend = y1in + i_visible_lines * i_pitch;    while( y1in < yend )    {        const uint8_t *y1end = y1in + i_visible_pitch;        y2in  = y1in + i_pitch;        y2out = y1out + i_pitch;        while( y1in < y1end )        {/*19595   0   27473-11058  0   -1550432768   0   45941*/            *uout++ = crop( (*y1in * -11058 + (*vin - V) * -15504)                      / 65536 + U );            *vout++ = crop( (*y1in * 32768 + (*vin - V) * 45941)                      / 65536 + V );            *y1out++ = crop( (*y1in++ * 19595 + (*vin - V) * 27473)                       / 65536 );            *y1out++ = crop( (*y1in++ * 19595 + (*vin - V) * 27473)                       / 65536 );            *y2out++ = crop( (*y2in++ * 19594 + (*vin - V) * 27473)                       / 65536 );            *y2out++ = crop( (*y2in++ * 19594 + (*vin++ - V) * 27473)                       / 65536 );        }        y1in  += 2*i_pitch - i_visible_pitch;        y1out += 2*i_pitch - i_visible_pitch;        uout  += i_uv_pitch - i_uv_visible_pitch;        vin   += i_uv_pitch - i_uv_visible_pitch;        vout  += i_uv_pitch - i_uv_visible_pitch;    }}static void get_green_from_yuv420( picture_t *p_inpic, picture_t *p_outpic,                                 int yp, int up, int vp ){    uint8_t *y1in = p_inpic->p[yp].p_pixels;    uint8_t *y2in;    uint8_t *uin  = p_inpic->p[up].p_pixels;    uint8_t *vin  = p_inpic->p[vp].p_pixels;    uint8_t *y1out = p_outpic->p[yp].p_pixels;    uint8_t *y2out;    uint8_t *uout  = p_outpic->p[up].p_pixels;    uint8_t *vout  = p_outpic->p[vp].p_pixels;    const int i_pitch = p_inpic->p[yp].i_pitch;    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;    const int i_uv_pitch = p_inpic->p[up].i_pitch;    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;    const uint8_t *yend = y1in + i_visible_lines * i_pitch;    while( y1in < yend )    {        const uint8_t *y1end = y1in + i_visible_pitch;        y2in  = y1in + i_pitch;        y2out = y1out + i_pitch;        while( y1in < y1end )        {/*38470   -13239  -27473-21710  7471    15504-27439  9443    19595*/            *uout++ = crop( (*y1in * -21710 + (*uin-U) * 7471 + (*vin-V) * 15504)                      / 65536 + U );            *vout++ = crop( (*y1in * -27439 + (*uin-U) * 9443 + (*vin-V) * 19595)                      / 65536 + V );            *y1out++ = crop( (*y1in++ * 38470 + (*uin-U) * -13239 + (*vin-V) * -27473)                       / 65536 );            *y1out++ = crop( (*y1in++ * 38470 + (*uin-U) * -13239 + (*vin-V) * -27473)                       / 65536 );            *y2out++ = crop( (*y2in++ * 38470 + (*uin-U) * -13239 + (*vin-V) * -27473)                       / 65536 );            *y2out++ = crop( (*y2in++ * 38470 + (*uin++ - U) * -13239 + (*vin++ -V) * -27473)                       / 65536 );        }        y1in  += 2*i_pitch - i_visible_pitch;        y1out += 2*i_pitch - i_visible_pitch;        uin   += i_uv_pitch - i_uv_visible_pitch;        uout  += i_uv_pitch - i_uv_visible_pitch;        vin   += i_uv_pitch - i_uv_visible_pitch;        vout  += i_uv_pitch - i_uv_visible_pitch;    }}static void get_blue_from_yuv420( picture_t *p_inpic, picture_t *p_outpic,                                 int yp, int up, int vp ){    uint8_t *y1in = p_inpic->p[yp].p_pixels;    uint8_t *y2in;    uint8_t *uin  = p_inpic->p[up].p_pixels;    uint8_t *y1out = p_outpic->p[yp].p_pixels;    uint8_t *y2out;    uint8_t *uout  = p_outpic->p[up].p_pixels;    uint8_t *vout  = p_outpic->p[vp].p_pixels;    const int i_pitch = p_inpic->p[yp].i_pitch;    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;    const int i_uv_pitch = p_inpic->p[up].i_pitch;    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;    const uint8_t *yend = y1in + i_visible_lines * i_pitch;    while( y1in < yend )    {        const uint8_t *y1end = y1in + i_visible_pitch;        y2in  = y1in + i_pitch;        y2out = y1out + i_pitch;        while( y1in < y1end )        {/*7471    13239   032768   58065   0-5329   -9443   0*/            *uout++ = crop( (*y1in* 32768 + (*uin - U) * 58065 )                      / 65536 + U );            *vout++ = crop( (*y1in * -5329 + (*uin - U) * -9443 )                      / 65536 + V );            *y1out++ = crop( (*y1in++ * 7471 + (*uin - U) * 13239 )                       / 65536 );            *y1out++ = crop( (*y1in++ * 7471 + (*uin - U) * 13239 )                       / 65536 );            *y2out++ = crop( (*y2in++ * 7471 + (*uin - U) * 13239 )                       / 65536 );            *y2out++ = crop( (*y2in++ * 7471 + (*uin++ - U) * 13239 )                       / 65536 );        }        y1in  += 2*i_pitch - i_visible_pitch;        y1out += 2*i_pitch - i_visible_pitch;        uin   += i_uv_pitch - i_uv_visible_pitch;        uout  += i_uv_pitch - i_uv_visible_pitch;        vout  += i_uv_pitch - i_uv_visible_pitch;    }}static void get_red_from_yuv422( picture_t *p_inpic, picture_t *p_outpic,                                 int yp, int up, int vp ){    uint8_t *y1in = p_inpic->p[yp].p_pixels;    uint8_t *vin  = p_inpic->p[vp].p_pixels;    uint8_t *y1out = p_outpic->p[yp].p_pixels;    uint8_t *uout  = p_outpic->p[up].p_pixels;    uint8_t *vout  = p_outpic->p[vp].p_pixels;    const int i_pitch = p_inpic->p[yp].i_pitch;    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;    const int i_uv_pitch = p_inpic->p[up].i_pitch;    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;    const uint8_t *yend = y1in + i_visible_lines * i_pitch;    while( y1in < yend )    {        const uint8_t *y1end = y1in + i_visible_pitch;        while( y1in < y1end )        {/*19595   0   27473-11058  0   -1550432768   0   45941*/            *uout++ = crop( (*y1in * -11058 + (*vin - V) * -15504)                      / 65536 + U );            *vout++ = crop( (*y1in * 32768 + (*vin - V) * 45941)                      / 65536 + V );            *y1out++ = crop( (*y1in++ * 19595 + (*vin - V) * 27473)                       / 65536 );            *y1out++ = crop( (*y1in++ * 19595 + (*vin++ - V) * 27473)                       / 65536 );        }        y1in  += i_pitch - i_visible_pitch;        y1out += i_pitch - i_visible_pitch;        uout  += i_uv_pitch - i_uv_visible_pitch;        vin   += i_uv_pitch - i_uv_visible_pitch;        vout  += i_uv_pitch - i_uv_visible_pitch;    }}static void get_green_from_yuv422( picture_t *p_inpic, picture_t *p_outpic,                                   int yp, int up, int vp ){    uint8_t *y1in = p_inpic->p[yp].p_pixels;    uint8_t *uin  = p_inpic->p[up].p_pixels;    uint8_t *vin  = p_inpic->p[vp].p_pixels;    uint8_t *y1out = p_outpic->p[yp].p_pixels;    uint8_t *uout  = p_outpic->p[up].p_pixels;    uint8_t *vout  = p_outpic->p[vp].p_pixels;    const int i_pitch = p_inpic->p[yp].i_pitch;    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;    const int i_uv_pitch = p_inpic->p[up].i_pitch;    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;    const uint8_t *yend = y1in + i_visible_lines * i_pitch;    while( y1in < yend )    {        const uint8_t *y1end = y1in + i_visible_pitch;        while( y1in < y1end )        {/*38470   -13239  -27473-21710  7471    15504-27439  9443    19595*/            *uout++ = crop( (*y1in * -21710 + (*uin-U) * 7471 + (*vin-V) * 15504)                      / 65536 + U );            *vout++ = crop( (*y1in * -27439 + (*uin-U) * 9443 + (*vin-V) * 19595)                      / 65536 + V );            *y1out++ = crop( (*y1in++ * 38470 + (*uin-U) * -13239 + (*vin-V) * -27473)                       / 65536 );            *y1out++ = crop( (*y1in++ * 38470 + (*uin++-U) * -13239 + (*vin++-V) * -27473)                       / 65536 );        }        y1in  += i_pitch - i_visible_pitch;        y1out += i_pitch - i_visible_pitch;        uin   += i_uv_pitch - i_uv_visible_pitch;        uout  += i_uv_pitch - i_uv_visible_pitch;        vin   += i_uv_pitch - i_uv_visible_pitch;        vout  += i_uv_pitch - i_uv_visible_pitch;    }}static void get_blue_from_yuv422( picture_t *p_inpic, picture_t *p_outpic,                                 int yp, int up, int vp ){    uint8_t *y1in = p_inpic->p[yp].p_pixels;    uint8_t *uin  = p_inpic->p[up].p_pixels;    uint8_t *y1out = p_outpic->p[yp].p_pixels;    uint8_t *uout  = p_outpic->p[up].p_pixels;    uint8_t *vout  = p_outpic->p[vp].p_pixels;    const int i_pitch = p_inpic->p[yp].i_pitch;    const int i_visible_pitch = p_inpic->p[yp].i_visible_pitch;    const int i_visible_lines = p_inpic->p[yp].i_visible_lines;    const int i_uv_pitch = p_inpic->p[up].i_pitch;    const int i_uv_visible_pitch = p_inpic->p[up].i_visible_pitch;    const uint8_t *yend = y1in + i_visible_lines * i_pitch;    while( y1in < yend )    {        const uint8_t *y1end = y1in + i_visible_pitch;        while( y1in < y1end )        {/*7471    13239   032768   58065   0-5329   -9443   0*/            *uout++ = crop( (*y1in* 32768 + (*uin - U) * 58065 )                      / 65536 + U );            *vout++ = crop( (*y1in * -5329 + (*uin - U) * -9443 )                      / 65536 + V );            *y1out++ = crop( (*y1in++ * 7471 + (*uin - U) * 13239 )                       / 65536 );            *y1out++ = crop( (*y1in++ * 7471 + (*uin++ - U) * 13239 )                       / 65536 );        }        y1in  += i_pitch - i_visible_pitch;        y1out += i_pitch - i_visible_pitch;        uin   += i_uv_pitch - i_uv_visible_pitch;        uout  += i_uv_pitch - i_uv_visible_pitch;        vout  += i_uv_pitch - i_uv_visible_pitch;    }}static int ExtractCallback( vlc_object_t *p_this, char const *psz_var,                            vlc_value_t oldval, vlc_value_t newval,                            void *p_data ){    VLC_UNUSED(oldval);    filter_sys_t *p_sys = (filter_sys_t *)p_data;    if( !strcmp( psz_var, FILTER_PREFIX "component" ) )    {        p_sys->i_color = newval.i_int;        /* Matrix won't be used for RED, GREEN or BLUE in planar formats */        make_projection_matrix( (filter_t *)p_this, p_sys->i_color,                                p_sys->projection_matrix );    }    else    {        msg_Warn( p_this, "Unknown callback command." );    }    return VLC_SUCCESS;}

⌨️ 快捷键说明

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