X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fvideo_output%2Fvideo_text.c;h=d0e7a0ac3c7ca4e8faea8c94bf2f1891c5a2aa94;hb=352cbd7c4f1750641c7daa3308631b74029449e7;hp=76b5677e85a655f3fc6c71020fa83743b1f81a0f;hpb=06b63706fe03f64001693f529aafe3725f79d2cb;p=vlc diff --git a/src/video_output/video_text.c b/src/video_output/video_text.c index 76b5677e85..d0e7a0ac3c 100644 --- a/src/video_output/video_text.c +++ b/src/video_output/video_text.c @@ -1,10 +1,10 @@ /***************************************************************************** * video_text.c : text manipulation functions ***************************************************************************** - * Copyright (C) 1999-2004 VideoLAN + * Copyright (C) 1999-2007 the VideoLAN team * $Id$ * - * Author: Sigmund Augdal + * Author: Sigmund Augdal Helberg * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,12 +18,18 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#include -#include "vlc_block.h" -#include "vlc_filter.h" -#include "osd.h" + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include /** * \brief Show text on the video for some time @@ -63,17 +69,28 @@ int vout_ShowTextRelative( vout_thread_t *p_vout, int i_channel, * is about to be shown */ int vout_ShowTextAbsolute( vout_thread_t *p_vout, int i_channel, - char *psz_string, text_style_t *p_style, + const char *psz_string, text_style_t *p_style, int i_flags, int i_hmargin, int i_vmargin, mtime_t i_start, mtime_t i_stop ) { + (void)p_style; subpicture_t *p_spu; video_format_t fmt; + /* (void)p_style; FIXME: <-- why ask for this if it's unused?!? */ if( !psz_string ) return VLC_EGENERIC; - p_spu = vout_CreateSubPicture( p_vout, !DEFAULT_CHAN, MEMORY_SUBPICTURE ); - if( !p_spu ) return VLC_EGENERIC; + p_spu = subpicture_New(); + if( !p_spu ) + return VLC_EGENERIC; + + p_spu->i_channel = i_channel; + p_spu->i_start = i_start; + p_spu->i_stop = i_stop; + p_spu->b_ephemer = true; + p_spu->b_absolute = false; + p_spu->b_fade = true; + /* Create a new subpicture region */ memset( &fmt, 0, sizeof(video_format_t) ); @@ -81,26 +98,20 @@ int vout_ShowTextAbsolute( vout_thread_t *p_vout, int i_channel, fmt.i_aspect = 0; fmt.i_width = fmt.i_height = 0; fmt.i_x_offset = fmt.i_y_offset = 0; - p_spu->p_region = p_spu->pf_create_region( VLC_OBJECT(p_vout), &fmt ); + p_spu->p_region = subpicture_region_New( &fmt ); if( !p_spu->p_region ) { msg_Err( p_vout, "cannot allocate SPU region" ); - vout_DestroySubPicture( p_vout, p_spu ); + subpicture_Delete( p_spu ); return VLC_EGENERIC; } p_spu->p_region->psz_text = strdup( psz_string ); - p_spu->i_start = i_start; - p_spu->i_stop = i_stop; - p_spu->b_ephemer = 0; - p_spu->b_absolute = VLC_FALSE; - - p_spu->i_x = i_hmargin; - p_spu->i_y = i_vmargin; - p_spu->i_flags = i_flags; - p_spu->i_channel = i_channel; + p_spu->p_region->i_align = i_flags & SUBPICTURE_ALIGN_MASK; + p_spu->p_region->i_x = i_hmargin; + p_spu->p_region->i_y = i_vmargin; - vout_DisplaySubPicture( p_vout, p_spu ); + spu_DisplaySubpicture( p_vout->p_spu, p_spu ); return VLC_SUCCESS; } @@ -114,26 +125,29 @@ int vout_ShowTextAbsolute( vout_thread_t *p_vout, int i_channel, * \param psz_format printf style formatting **/ void __vout_OSDMessage( vlc_object_t *p_caller, int i_channel, - char *psz_format, ... ) + const char *psz_format, ... ) { vout_thread_t *p_vout; - char *psz_string; + char *psz_string = NULL; va_list args; if( !config_GetInt( p_caller, "osd" ) ) return; p_vout = vlc_object_find( p_caller, VLC_OBJECT_VOUT, FIND_ANYWHERE ); - if( p_vout ) { va_start( args, psz_format ); - vasprintf( &psz_string, psz_format, args ); - - vout_ShowTextRelative( p_vout, i_channel, psz_string, NULL, - OSD_ALIGN_TOP|OSD_ALIGN_RIGHT, 30,20,1000000 ); - + if( vasprintf( &psz_string, psz_format, args ) != -1 ) + { + vout_ShowTextRelative( p_vout, i_channel, psz_string, NULL, + OSD_ALIGN_TOP|OSD_ALIGN_RIGHT, + 30 + p_vout->fmt_in.i_width + - p_vout->fmt_in.i_visible_width + - p_vout->fmt_in.i_x_offset, + 20 + p_vout->fmt_in.i_y_offset, 1000000 ); + free( psz_string ); + } vlc_object_release( p_vout ); - free( psz_string ); va_end( args ); } }