📄 i422_yuy2.c
字号:
} p_y += i_source_margin; p_u += i_source_margin_c; p_v += i_source_margin_c; p_line += i_dest_margin; } } else { /* use slower SSE2 unaligned fetch and store */ for( i_y = p_filter->fmt_in.video.i_height ; i_y-- ; ) { for( i_x = p_filter->fmt_in.video.i_width / 16 ; i_x-- ; ) { SSE2_CALL( SSE2_YUV422_YVYU_UNALIGNED ); } for( i_x = ( p_filter->fmt_in.video.i_width % 16 ) / 2; i_x-- ; ) { C_YUV422_YVYU( p_line, p_y, p_u, p_v ); } p_y += i_source_margin; p_u += i_source_margin_c; p_v += i_source_margin_c; p_line += i_dest_margin; } } SSE2_END;#else for( i_y = p_filter->fmt_in.video.i_height ; i_y-- ; ) { for( i_x = p_filter->fmt_in.video.i_width / 8 ; i_x-- ; ) {#if defined (MODULE_NAME_IS_i422_yuy2) C_YUV422_YVYU( p_line, p_y, p_u, p_v ); C_YUV422_YVYU( p_line, p_y, p_u, p_v ); C_YUV422_YVYU( p_line, p_y, p_u, p_v ); C_YUV422_YVYU( p_line, p_y, p_u, p_v );#elif defined (MODULE_NAME_IS_i422_yuy2_mmx) MMX_CALL( MMX_YUV422_YVYU );#endif } for( i_x = ( p_filter->fmt_in.video.i_width % 8 ) / 2; i_x-- ; ) { C_YUV422_YVYU( p_line, p_y, p_u, p_v ); } p_y += i_source_margin; p_u += i_source_margin_c; p_v += i_source_margin_c; p_line += i_dest_margin; }#if defined (MODULE_NAME_IS_i422_yuy2_mmx) MMX_END;#endif#endif}/***************************************************************************** * I422_UYVY: planar YUV 4:2:2 to packed UYVY 4:2:2 *****************************************************************************/static void I422_UYVY( filter_t *p_filter, picture_t *p_source, picture_t *p_dest ){ uint8_t *p_line = p_dest->p->p_pixels; uint8_t *p_y = p_source->Y_PIXELS; uint8_t *p_u = p_source->U_PIXELS; uint8_t *p_v = p_source->V_PIXELS; int i_x, i_y; const int i_source_margin = p_source->p[0].i_pitch - p_source->p[0].i_visible_pitch; const int i_source_margin_c = p_source->p[1].i_pitch - p_source->p[1].i_visible_pitch; const int i_dest_margin = p_dest->p->i_pitch - p_dest->p->i_visible_pitch;#if defined (MODULE_NAME_IS_i422_yuy2_sse2) if( 0 == (15 & (p_source->p[Y_PLANE].i_pitch|p_dest->p->i_pitch| ((intptr_t)p_line|(intptr_t)p_y))) ) { /* use faster SSE2 aligned fetch and store */ for( i_y = p_filter->fmt_in.video.i_height ; i_y-- ; ) { for( i_x = p_filter->fmt_in.video.i_width / 16 ; i_x-- ; ) { SSE2_CALL( SSE2_YUV422_UYVY_ALIGNED ); } for( i_x = ( p_filter->fmt_in.video.i_width % 16 ) / 2; i_x-- ; ) { C_YUV422_UYVY( p_line, p_y, p_u, p_v ); } p_y += i_source_margin; p_u += i_source_margin_c; p_v += i_source_margin_c; p_line += i_dest_margin; } } else { /* use slower SSE2 unaligned fetch and store */ for( i_y = p_filter->fmt_in.video.i_height ; i_y-- ; ) { for( i_x = p_filter->fmt_in.video.i_width / 16 ; i_x-- ; ) { SSE2_CALL( SSE2_YUV422_UYVY_UNALIGNED ); } for( i_x = ( p_filter->fmt_in.video.i_width % 16 ) / 2; i_x-- ; ) { C_YUV422_UYVY( p_line, p_y, p_u, p_v ); } p_y += i_source_margin; p_u += i_source_margin_c; p_v += i_source_margin_c; p_line += i_dest_margin; } } SSE2_END;#else for( i_y = p_filter->fmt_in.video.i_height ; i_y-- ; ) { for( i_x = p_filter->fmt_in.video.i_width / 8 ; i_x-- ; ) {#if defined (MODULE_NAME_IS_i422_yuy2) C_YUV422_UYVY( p_line, p_y, p_u, p_v ); C_YUV422_UYVY( p_line, p_y, p_u, p_v ); C_YUV422_UYVY( p_line, p_y, p_u, p_v ); C_YUV422_UYVY( p_line, p_y, p_u, p_v );#elif defined (MODULE_NAME_IS_i422_yuy2_mmx) MMX_CALL( MMX_YUV422_UYVY );#endif } for( i_x = ( p_filter->fmt_in.video.i_width % 8 ) / 2; i_x-- ; ) { C_YUV422_UYVY( p_line, p_y, p_u, p_v ); } p_y += i_source_margin; p_u += i_source_margin_c; p_v += i_source_margin_c; p_line += i_dest_margin; }#if defined (MODULE_NAME_IS_i422_yuy2_mmx) MMX_END;#endif#endif}/***************************************************************************** * I422_IUYV: planar YUV 4:2:2 to interleaved packed IUYV 4:2:2 *****************************************************************************/static void I422_IUYV( filter_t *p_filter, picture_t *p_source, picture_t *p_dest ){ VLC_UNUSED(p_source); VLC_UNUSED(p_dest); /* FIXME: TODO ! */ msg_Err( p_filter, "I422_IUYV unimplemented, please harass <sam@zoy.org>" );}/***************************************************************************** * I422_cyuv: planar YUV 4:2:2 to upside-down packed UYVY 4:2:2 *****************************************************************************/static void I422_cyuv( filter_t *p_filter, picture_t *p_source, picture_t *p_dest ){ uint8_t *p_line = p_dest->p->p_pixels + p_dest->p->i_visible_lines * p_dest->p->i_pitch; uint8_t *p_y = p_source->Y_PIXELS; uint8_t *p_u = p_source->U_PIXELS; uint8_t *p_v = p_source->V_PIXELS; int i_x, i_y; const int i_source_margin = p_source->p[0].i_pitch - p_source->p[0].i_visible_pitch; const int i_source_margin_c = p_source->p[1].i_pitch - p_source->p[1].i_visible_pitch; const int i_dest_margin = p_dest->p->i_pitch - p_dest->p->i_visible_pitch;#if defined (MODULE_NAME_IS_i422_yuy2_sse2) if( 0 == (15 & (p_source->p[Y_PLANE].i_pitch|p_dest->p->i_pitch| ((intptr_t)p_line|(intptr_t)p_y))) ) { /* use faster SSE2 aligned fetch and store */ for( i_y = p_filter->fmt_in.video.i_height ; i_y-- ; ) { p_line -= 2 * p_dest->p->i_pitch; for( i_x = p_filter->fmt_in.video.i_width / 16 ; i_x-- ; ) { SSE2_CALL( SSE2_YUV422_UYVY_ALIGNED ); } for( i_x = ( p_filter->fmt_in.video.i_width % 16 ) / 2; i_x-- ; ) { C_YUV422_UYVY( p_line, p_y, p_u, p_v ); } p_y += i_source_margin; p_u += i_source_margin_c; p_v += i_source_margin_c; p_line += i_dest_margin; } } else { /* use slower SSE2 unaligned fetch and store */ for( i_y = p_filter->fmt_in.video.i_height ; i_y-- ; ) { p_line -= 2 * p_dest->p->i_pitch; for( i_x = p_filter->fmt_in.video.i_width / 16 ; i_x-- ; ) { SSE2_CALL( SSE2_YUV422_UYVY_UNALIGNED ); } for( i_x = ( p_filter->fmt_in.video.i_width % 16 ) / 2; i_x-- ; ) { C_YUV422_UYVY( p_line, p_y, p_u, p_v ); } p_y += i_source_margin; p_u += i_source_margin_c; p_v += i_source_margin_c; p_line += i_dest_margin; } } SSE2_END;#else for( i_y = p_filter->fmt_in.video.i_height ; i_y-- ; ) { for( i_x = p_filter->fmt_in.video.i_width / 8 ; i_x-- ; ) { p_line -= 2 * p_dest->p->i_pitch;#if defined (MODULE_NAME_IS_i422_yuy2) C_YUV422_UYVY( p_line, p_y, p_u, p_v ); C_YUV422_UYVY( p_line, p_y, p_u, p_v ); C_YUV422_UYVY( p_line, p_y, p_u, p_v ); C_YUV422_UYVY( p_line, p_y, p_u, p_v );#elif defined (MODULE_NAME_IS_i422_yuy2_mmx) MMX_CALL( MMX_YUV422_UYVY );#endif } p_y += i_source_margin; p_u += i_source_margin_c; p_v += i_source_margin_c; p_line += i_dest_margin; }#if defined (MODULE_NAME_IS_i422_yuy2_mmx) MMX_END;#elif defined (MODULE_NAME_IS_i422_yuy2_sse2) SSE2_END;#endif#endif}/***************************************************************************** * I422_Y211: planar YUV 4:2:2 to packed YUYV 2:1:1 *****************************************************************************/#if defined (MODULE_NAME_IS_i422_yuy2)static void I422_Y211( filter_t *p_filter, picture_t *p_source, picture_t *p_dest ){ uint8_t *p_line = p_dest->p->p_pixels + p_dest->p->i_visible_lines * p_dest->p->i_pitch; uint8_t *p_y = p_source->Y_PIXELS; uint8_t *p_u = p_source->U_PIXELS; uint8_t *p_v = p_source->V_PIXELS; int i_x, i_y; for( i_y = p_filter->fmt_in.video.i_height ; i_y-- ; ) { for( i_x = p_filter->fmt_in.video.i_width / 8 ; i_x-- ; ) { C_YUV422_Y211( p_line, p_y, p_u, p_v ); C_YUV422_Y211( p_line, p_y, p_u, p_v ); } }}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -