[vlc-devel] commit: Added a vout_GetSnapshot to retreive snapshot from vout. ( Laurent Aimar )
git version control
git at videolan.org
Sun Mar 8 14:18:09 CET 2009
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Sun Mar 8 13:36:29 2009 +0100| [773363e09c71bef8c0101590d5b24a9335addd2c] | committer: Laurent Aimar
Added a vout_GetSnapshot to retreive snapshot from vout.
It will allows to remove libvlc hack.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=773363e09c71bef8c0101590d5b24a9335addd2c
---
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 71fae39..4636946 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 ef489e3..0a61bbd 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 2ca11b6..b764532 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 );
More information about the vlc-devel
mailing list