📄 extract.c
字号:
*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 + -