From: Laurent Aimar Date: Sat, 30 May 2009 21:07:10 +0000 (+0200) Subject: Added a subpicture_NewFromPicture helper. X-Git-Tag: 1.1.0-ff~5679 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=07b05122054dbec9c31932419ed4778d3f8193d6;p=vlc Added a subpicture_NewFromPicture helper. --- diff --git a/include/vlc_subpicture.h b/include/vlc_subpicture.h index 26f0cf6caf..bdb09fdf40 100644 --- a/include/vlc_subpicture.h +++ b/include/vlc_subpicture.h @@ -176,6 +176,15 @@ VLC_EXPORT( subpicture_t *, subpicture_New, ( void ) ); */ VLC_EXPORT( void, subpicture_Delete, ( subpicture_t *p_subpic ) ); +/** + * This function will create a subpicture having one region in the requested + * chroma showing the given picture. + * + * The picture_t given is not released nor used inside the + * returned subpicture_t. + */ +VLC_EXPORT( subpicture_t *, subpicture_NewFromPicture, ( vlc_object_t *, picture_t *, vlc_fourcc_t i_chroma ) ); + /**@}*/ #endif /* _VLC_VIDEO_H */ diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 69eddaca04..f9b8c087fc 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -371,6 +371,7 @@ __str_format_meta str_format_time subpicture_Delete subpicture_New +subpicture_NewFromPicture subpicture_region_ChainDelete subpicture_region_Delete subpicture_region_New diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c index 84ac9996fe..415e8c6557 100644 --- a/src/video_output/vout_subpictures.c +++ b/src/video_output/vout_subpictures.c @@ -37,6 +37,7 @@ #include #include "../libvlc.h" #include "vout_internal.h" +#include #include #include @@ -719,6 +720,56 @@ static void SubpictureChain( subpicture_t **pp_head, subpicture_t *p_subpic ) *pp_head = p_subpic; } +subpicture_t *subpicture_NewFromPicture( vlc_object_t *p_obj, + picture_t *p_picture, vlc_fourcc_t i_chroma ) +{ + /* */ + video_format_t fmt_in = p_picture->format; + + /* */ + video_format_t fmt_out; + fmt_out = fmt_in; + fmt_out.i_chroma = i_chroma; + + /* */ + image_handler_t *p_image = image_HandlerCreate( p_obj ); + if( !p_image ) + return NULL; + + picture_t *p_pip = image_Convert( p_image, p_picture, &fmt_in, &fmt_out ); + + image_HandlerDelete( p_image ); + + if( !p_pip ) + return NULL; + + subpicture_t *p_subpic = subpicture_New(); + if( !p_subpic ) + { + picture_Release( p_pip ); + return NULL; + } + + p_subpic->i_original_picture_width = fmt_out.i_width; + p_subpic->i_original_picture_height = fmt_out.i_height; + + fmt_out.i_aspect = 0; + fmt_out.i_sar_num = + fmt_out.i_sar_den = 0; + + p_subpic->p_region = subpicture_region_New( &fmt_out ); + if( p_subpic->p_region ) + { + picture_Release( p_subpic->p_region->p_picture ); + p_subpic->p_region->p_picture = p_pip; + } + else + { + picture_Release( p_pip ); + } + return p_subpic; +} + /***************************************************************************** * subpicture_region_t allocation *****************************************************************************/