From: Antoine Cellerier Date: Sun, 24 Aug 2008 13:35:09 +0000 (+0200) Subject: Export function to copy pixels between 2 plane_t structures. X-Git-Tag: 0.9.0~32 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=bd83a7c2c6407df668eee8e028cca62a081cd0e0;p=vlc Export function to copy pixels between 2 plane_t structures. --- diff --git a/include/vlc_vout.h b/include/vlc_vout.h index 47fc3fd0a8..74e0db17e2 100644 --- a/include/vlc_vout.h +++ b/include/vlc_vout.h @@ -176,6 +176,7 @@ static inline void picture_CopyProperties( picture_t *p_dst, const picture_t *p_ * only the compatible(smaller) part will be copied. */ VLC_EXPORT( void, picture_CopyPixels, ( picture_t *p_dst, const picture_t *p_src ) ); +VLC_EXPORT( void, plane_CopyPixels, ( plane_t *p_dst, const plane_t *p_src ) ); /** * This function will copy both picture dynamic properties and pixels. diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 5790f974d7..05acc07484 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -259,6 +259,7 @@ path_sanitize picture_CopyPixels picture_Delete picture_New +plane_CopyPixels playlist_Add playlist_AddExt playlist_AddInput diff --git a/src/video_output/vout_pictures.c b/src/video_output/vout_pictures.c index da603e7329..f49bb571b5 100644 --- a/src/video_output/vout_pictures.c +++ b/src/video_output/vout_pictures.c @@ -1053,34 +1053,37 @@ void picture_CopyPixels( picture_t *p_dst, const picture_t *p_src ) int i; for( i = 0; i < p_src->i_planes ; i++ ) - { - const unsigned i_width = __MIN( p_dst->p[i].i_visible_pitch, - p_src->p[i].i_visible_pitch ); - const unsigned i_height = __MIN( p_dst->p[i].i_visible_lines, - p_src->p[i].i_visible_lines ); + plane_CopyPixels( p_dst->p+i, p_src->p+i ); +} - if( p_src->p[i].i_pitch == p_dst->p[i].i_pitch ) - { - /* There are margins, but with the same width : perfect ! */ - vlc_memcpy( p_dst->p[i].p_pixels, p_src->p[i].p_pixels, - p_src->p[i].i_pitch * i_height ); - } - else - { - /* We need to proceed line by line */ - uint8_t *p_in = p_src->p[i].p_pixels; - uint8_t *p_out = p_dst->p[i].p_pixels; - int i_line; +void plane_CopyPixels( plane_t *p_dst, const plane_t *p_src ) +{ + const unsigned i_width = __MIN( p_dst->i_visible_pitch, + p_src->i_visible_pitch ); + const unsigned i_height = __MIN( p_dst->i_visible_lines, + p_src->i_visible_lines ); - assert( p_in ); - assert( p_out ); + if( p_src->i_pitch == p_dst->i_pitch ) + { + /* There are margins, but with the same width : perfect ! */ + vlc_memcpy( p_dst->p_pixels, p_src->p_pixels, + p_src->i_pitch * i_height ); + } + else + { + /* We need to proceed line by line */ + uint8_t *p_in = p_src->p_pixels; + uint8_t *p_out = p_dst->p_pixels; + int i_line; - for( i_line = i_height; i_line--; ) - { - vlc_memcpy( p_out, p_in, i_width ); - p_in += p_src->p[i].i_pitch; - p_out += p_dst->p[i].i_pitch; - } + assert( p_in ); + assert( p_out ); + + for( i_line = i_height; i_line--; ) + { + vlc_memcpy( p_out, p_in, i_width ); + p_in += p_src->i_pitch; + p_out += p_dst->i_pitch; } } }