X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fosd%2Fosd_text.c;h=da24083b283fa0dc242e43717338543ea5d9509f;hb=04ddc68f796e87980bb5f41c1990fe947d3a60b4;hp=95ce8bd051cc072ca955564b7806c277823b61d8;hpb=df61d33b06e2b3cbbe746b2f5a9bea5b370c24ff;p=vlc diff --git a/src/osd/osd_text.c b/src/osd/osd_text.c index 95ce8bd051..da24083b28 100644 --- a/src/osd/osd_text.c +++ b/src/osd/osd_text.c @@ -24,7 +24,7 @@ # include "config.h" #endif -#include +#include #include #include #include @@ -35,14 +35,14 @@ * \param p_spu pointer to the subpicture queue the text is to be showed on * \param i_channel Subpicture channel * \param psz_string The text to be shown - * \param p_style Pointer to a struct with text style info + * \param p_style Pointer to a struct with text style info (it is duplicated) * \param i_flags flags for alignment and such * \param i_hmargin horizontal margin in pixels * \param i_vmargin vertical margin in pixels * \param i_duration Amount of time the text is to be shown. */ int osd_ShowTextRelative( spu_t *p_spu, int i_channel, - char *psz_string, text_style_t *p_style, + const char *psz_string, const text_style_t *p_style, int i_flags, int i_hmargin, int i_vmargin, mtime_t i_duration ) { @@ -58,7 +58,7 @@ int osd_ShowTextRelative( spu_t *p_spu, int i_channel, * \param p_spu pointer to the subpicture queue the text is to be showed on * \param i_channel Subpicture channel * \param psz_string The text to be shown - * \param p_style Pointer to a struct with text style info + * \param p_style Pointer to a struct with text style info (it is duplicated) * \param i_flags flags for alignment and such * \param i_hmargin horizontal margin in pixels * \param i_vmargin vertical margin in pixels @@ -68,7 +68,7 @@ int osd_ShowTextRelative( spu_t *p_spu, int i_channel, * is about to be shown */ int osd_ShowTextAbsolute( spu_t *p_spu_channel, int i_channel, - char *psz_string, text_style_t *p_style, + const char *psz_string, const text_style_t *p_style, int i_flags, int i_hmargin, int i_vmargin, mtime_t i_start, mtime_t i_stop ) { @@ -78,34 +78,33 @@ int osd_ShowTextAbsolute( spu_t *p_spu_channel, int i_channel, if( !psz_string ) return VLC_EGENERIC; - p_spu = spu_CreateSubpicture( p_spu_channel ); - if( !p_spu ) return VLC_EGENERIC; + p_spu = subpicture_New( NULL ); + 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; /* Create a new subpicture region */ memset( &fmt, 0, sizeof(video_format_t) ); - fmt.i_chroma = VLC_FOURCC('T','E','X','T'); - fmt.i_aspect = 0; + fmt.i_chroma = VLC_CODEC_TEXT; 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_spu_channel), &fmt ); + p_spu->p_region = subpicture_region_New( &fmt ); if( !p_spu->p_region ) { msg_Err( p_spu_channel, "cannot allocate SPU region" ); - spu_DestroySubpicture( p_spu_channel, p_spu ); + subpicture_Delete( p_spu ); return VLC_EGENERIC; } p_spu->p_region->psz_text = strdup( psz_string ); p_spu->p_region->i_align = i_flags & SUBPICTURE_ALIGN_MASK; - p_spu->i_start = i_start; - p_spu->i_stop = i_stop; - p_spu->b_ephemer = true; - p_spu->b_absolute = false; - - p_spu->i_x = i_hmargin; - p_spu->i_y = i_vmargin; - p_spu->i_flags = i_flags & ~SUBPICTURE_ALIGN_MASK; - p_spu->i_channel = i_channel; + p_spu->p_region->i_x = i_hmargin; + p_spu->p_region->i_y = i_vmargin; spu_DisplaySubpicture( p_spu_channel, p_spu ); @@ -123,18 +122,19 @@ int osd_ShowTextAbsolute( spu_t *p_spu_channel, int i_channel, void osd_Message( spu_t *p_spu, int i_channel, char *psz_format, ... ) { - char *psz_string; va_list args; if( p_spu ) { + char *psz_string; va_start( args, psz_format ); - vasprintf( &psz_string, psz_format, args ); - - osd_ShowTextRelative( p_spu, i_channel, psz_string, NULL, - OSD_ALIGN_TOP|OSD_ALIGN_RIGHT, 30,20,1000000 ); + if( vasprintf( &psz_string, psz_format, args ) != -1 ) + { + osd_ShowTextRelative( p_spu, i_channel, psz_string, NULL, + SUBPICTURE_ALIGN_TOP|SUBPICTURE_ALIGN_RIGHT, 30,20,1000000 ); - free( psz_string ); + free( psz_string ); + } va_end( args ); } }