From 773363e09c71bef8c0101590d5b24a9335addd2c Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Sun, 8 Mar 2009 13:36:29 +0100 Subject: [PATCH] Added a vout_GetSnapshot to retreive snapshot from vout. It will allows to remove libvlc hack. --- include/vlc_vout.h | 17 +++++++++++++ src/libvlccore.sym | 1 + src/video_output/vout_intf.c | 46 ++++++++++++++++++++---------------- 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/include/vlc_vout.h b/include/vlc_vout.h index 71fae395f1..46369460ec 100644 --- a/include/vlc_vout.h +++ b/include/vlc_vout.h @@ -683,6 +683,23 @@ static inline void vout_CloseAndRelease( vout_thread_t *p_vout ) vlc_object_release( p_vout ); } +/** + * This function will handle a snapshot request. + * + * pp_image, pp_picture and p_fmt can be NULL otherwise they will be + * set with returned value in case of success. + * + * pp_image will hold an encoded picture in psz_format format. + * + * i_timeout specifies the time the function will wait for a snapshot to be + * available. + * + */ +VLC_EXPORT( int, vout_GetSnapshot, ( vout_thread_t *p_vout, + block_t **pp_image, picture_t **pp_picture, + video_format_t *p_fmt, + const char *psz_format, mtime_t i_timeout ) ); + /* */ VLC_EXPORT( int, vout_ChromaCmp, ( uint32_t, uint32_t ) ); diff --git a/src/libvlccore.sym b/src/libvlccore.sym index ef489e36ff..0a61bbde31 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -513,6 +513,7 @@ vout_CreatePicture vout_DestroyPicture vout_DisplayPicture vout_EnableFilter +vout_GetSnapshot vout_InitFormat __vout_InitPicture vout_LinkPicture diff --git a/src/video_output/vout_intf.c b/src/video_output/vout_intf.c index 2ca11b63d5..b764532f8a 100644 --- a/src/video_output/vout_intf.c +++ b/src/video_output/vout_intf.c @@ -745,13 +745,12 @@ static void VoutOsdSnapshot( vout_thread_t *p_vout, picture_t *p_pic, const char msg_Warn( p_vout, "Failed to display snapshot" ); } } -/** - * This function will retreive a snapshot from vout - */ -static int VoutGetSnapshot( vout_thread_t *p_vout, - block_t **pp_image, picture_t **pp_picture, - video_format_t *p_fmt, - const char *psz_format, mtime_t i_timeout ) + +/* */ +int vout_GetSnapshot( vout_thread_t *p_vout, + block_t **pp_image, picture_t **pp_picture, + video_format_t *p_fmt, + const char *psz_format, mtime_t i_timeout ) { vout_thread_sys_t *p_sys = p_vout->p; @@ -779,22 +778,27 @@ static int VoutGetSnapshot( vout_thread_t *p_vout, return VLC_EGENERIC; } - vlc_fourcc_t i_format = VLC_FOURCC('p','n','g',' '); - if( psz_format && image_Ext2Fourcc( psz_format ) ) - i_format = image_Ext2Fourcc( psz_format ); + if( pp_image ) + { + vlc_fourcc_t i_format = VLC_FOURCC('p','n','g',' '); + if( psz_format && image_Ext2Fourcc( psz_format ) ) + i_format = image_Ext2Fourcc( psz_format ); - const int i_override_width = var_GetInteger( p_vout, "snapshot-width" ); - const int i_override_height = var_GetInteger( p_vout, "snapshot-height" ); + const int i_override_width = var_GetInteger( p_vout, "snapshot-width" ); + const int i_override_height = var_GetInteger( p_vout, "snapshot-height" ); - if( picture_Export( VLC_OBJECT(p_vout), pp_image, p_fmt, - p_picture, i_format, i_override_width, i_override_height ) ) - { - msg_Err( p_vout, "Failed to convert image for snapshot" ); - picture_Release( p_picture ); - return VLC_EGENERIC; + if( picture_Export( VLC_OBJECT(p_vout), pp_image, p_fmt, + p_picture, i_format, i_override_width, i_override_height ) ) + { + msg_Err( p_vout, "Failed to convert image for snapshot" ); + picture_Release( p_picture ); + return VLC_EGENERIC; + } } - - *pp_picture = p_picture; + if( pp_picture ) + *pp_picture = p_picture; + else + picture_Release( p_picture ); return VLC_SUCCESS; } @@ -817,7 +821,7 @@ static void VoutSaveSnapshot( vout_thread_t *p_vout ) /* 500ms timeout * XXX it will cause trouble with low fps video (< 2fps) */ - if( VoutGetSnapshot( p_vout, &p_image, &p_picture, &fmt, psz_format, 500*1000 ) ) + if( vout_GetSnapshot( p_vout, &p_image, &p_picture, &fmt, psz_format, 500*1000 ) ) { if( b_embedded ) VoutMemorySnapshot( p_vout, p_obj, NULL, NULL ); -- 2.39.2