int *pi_underline_offset;
uint16_t *pi_underline_thickness;
- int i_height;
int i_width;
+ int i_height;
+
int i_alpha;
line_desc_t *p_next;
return VLC_EGENERIC;
p_sys->i_font_attachments = 0;
- p_sys->pp_font_attachments = malloc( i_attachments_cnt * sizeof( input_attachment_t * ));
+ p_sys->pp_font_attachments = malloc( i_attachments_cnt * sizeof(*p_sys->pp_font_attachments));
if( !p_sys->pp_font_attachments )
return VLC_ENOMEM;
i_pitch = p_region->p_picture->A_PITCH;
/* Initialize the region pixels */
+ memset( p_dst_y, 0x00, i_pitch * p_region->fmt.i_height );
+ memset( p_dst_u, 0x80, i_pitch * p_region->fmt.i_height );
+ memset( p_dst_v, 0x80, i_pitch * p_region->fmt.i_height );
+
if( p_filter->p_sys->i_effect != EFFECT_BACKGROUND )
- {
- memset( p_dst_y, 0x00, i_pitch * p_region->fmt.i_height );
- memset( p_dst_u, 0x80, i_pitch * p_region->fmt.i_height );
- memset( p_dst_v, 0x80, i_pitch * p_region->fmt.i_height );
- memset( p_dst_a, 0, i_pitch * p_region->fmt.i_height );
- }
+ memset( p_dst_a, 0x00, i_pitch * p_region->fmt.i_height );
else
- {
- memset( p_dst_y, 0x0, i_pitch * p_region->fmt.i_height );
- memset( p_dst_u, 0x80, i_pitch * p_region->fmt.i_height );
- memset( p_dst_v, 0x80, i_pitch * p_region->fmt.i_height );
memset( p_dst_a, 0x80, i_pitch * p_region->fmt.i_height );
- }
+
if( p_filter->p_sys->i_effect == EFFECT_OUTLINE ||
p_filter->p_sys->i_effect == EFFECT_OUTLINE_FAT )
{
static text_style_t *CreateStyle( char *psz_fontname, int i_font_size,
uint32_t i_font_color, uint32_t i_karaoke_bg_color,
- bool b_bold, bool b_italic, bool b_uline, bool b_through )
+ int i_style_flags )
{
text_style_t *p_style = text_style_New();
if( !p_style )
p_style->i_font_alpha = (i_font_color & 0xff000000) >> 24;
p_style->i_karaoke_background_color = (i_karaoke_bg_color & 0x00ffffff) >> 0;
p_style->i_karaoke_background_alpha = (i_karaoke_bg_color & 0xff000000) >> 24;
- if( b_bold )
- p_style->i_style_flags |= STYLE_BOLD;
- if( b_italic )
- p_style->i_style_flags |= STYLE_ITALIC;
- if( b_uline )
- p_style->i_style_flags |= STYLE_UNDERLINE;
- if( b_through )
- p_style->i_style_flags |= STYLE_STRIKEOUT;
-
+ p_style->i_style_flags |= i_style_flags;
return p_style;
}
static int PushFont( font_stack_t **p_font, const char *psz_name, int i_size,
uint32_t i_color, uint32_t i_karaoke_bg_color )
{
- font_stack_t *p_new;
-
if( !p_font )
return VLC_EGENERIC;
- p_new = malloc( sizeof( font_stack_t ) );
- if( ! p_new )
+ font_stack_t *p_new = malloc( sizeof(*p_new) );
+ if( !p_new )
return VLC_ENOMEM;
p_new->p_next = NULL;
if( *ppi_k_durations )
{
*ppi_k_durations = realloc_or_free( *ppi_k_durations,
- *pi_k_runs * sizeof( uint32_t ) );
+ *pi_k_runs * sizeof(**ppi_k_durations) );
}
else if( *pi_k_runs == 1 )
{
- *ppi_k_durations = (uint32_t *)
- malloc( *pi_k_runs * sizeof( uint32_t ) );
+ *ppi_k_durations = malloc( *pi_k_runs * sizeof(**ppi_k_durations) );
}
if( *ppi_k_run_lengths )
{
*ppi_k_run_lengths = realloc_or_free( *ppi_k_run_lengths,
- *pi_k_runs * sizeof( uint32_t ) );
+ *pi_k_runs * sizeof(**ppi_k_run_lengths) );
}
else if( *pi_k_runs == 1 )
{
- *ppi_k_run_lengths = (uint32_t *)
- malloc( *pi_k_runs * sizeof( uint32_t ) );
+ *ppi_k_run_lengths = malloc( *pi_k_runs * sizeof(**ppi_k_run_lengths) );
}
if( *ppi_k_durations )
(*ppi_k_durations)[ *pi_k_runs - 1 ] = atoi( value );
static text_style_t *GetStyleFromFontStack( filter_sys_t *p_sys,
font_stack_t **p_fonts,
- bool b_bold, bool b_italic,
- bool b_uline, bool b_through )
+ int i_style_flags )
{
char *psz_fontname = NULL;
uint32_t i_font_color = p_sys->i_font_color & 0x00ffffff;
return NULL;
return CreateStyle( psz_fontname, i_font_size, i_font_color,
- i_karaoke_bg_color, b_bold, b_italic, b_uline, b_through );
+ i_karaoke_bg_color,
+ i_style_flags );
}
static int RenderTag( filter_t *p_filter, FT_Face p_face,
if( *ppp_styles )
{
*ppp_styles = realloc_or_free( *ppp_styles,
- *pi_runs * sizeof( text_style_t * ) );
+ *pi_runs * sizeof(**ppp_styles) );
}
else if( *pi_runs == 1 )
{
- *ppp_styles = malloc( *pi_runs * sizeof( text_style_t * ) );
+ *ppp_styles = malloc( *pi_runs * sizeof(**ppp_styles) );
}
/* We have just malloc'ed this memory successfully -
if( *ppi_run_lengths )
{
*ppi_run_lengths = realloc_or_free( *ppi_run_lengths,
- *pi_runs * sizeof( uint32_t ) );
+ *pi_runs * sizeof(**ppi_run_lengths) );
}
else if( *pi_runs == 1 )
{
- *ppi_run_lengths = (uint32_t *)
- malloc( *pi_runs * sizeof( uint32_t ) );
+ *ppi_run_lengths = malloc( *pi_runs * sizeof(**ppi_run_lengths) );
}
/* same remarks here */
{
if( p_face )
{
- bool match = !strcasecmp( p_face->family_name,
- p_style->psz_fontname );
-
- if( p_face->style_flags & FT_STYLE_FLAG_BOLD )
- match &= (p_style->i_style_flags & STYLE_BOLD) != 0;
- else
- match &= (p_style->i_style_flags & STYLE_BOLD) == 0;
-
- if( p_face->style_flags & FT_STYLE_FLAG_ITALIC )
- match &= (p_style->i_style_flags & STYLE_ITALIC) != 0;
- else
- match &= (p_style->i_style_flags & STYLE_ITALIC) == 0;
-
- if( match )
+ int i_style_received = ((p_face->style_flags & FT_STYLE_FLAG_BOLD) ? STYLE_BOLD : 0) |
+ ((p_face->style_flags & FT_STYLE_FLAG_ITALIC ) ? STYLE_ITALIC : 0);
+ if( !strcasecmp( p_face->family_name, p_style->psz_fontname ) &&
+ (p_style->i_style_flags & (STYLE_BOLD | STYLE_BOLD)) == i_style_received )
{
*pp_face = p_face;
return VLC_SUCCESS;
}
-
FT_Done_Face( p_face );
}
i_font_idx++;
uint32_t *psz_text_orig = psz_text;
font_stack_t *p_fonts = NULL;
- bool b_italic = false;
- bool b_bold = false;
- bool b_uline = false;
- bool b_through = false;
+ int i_style_flags = 0;
if( p_font_style )
{
(p_font_style->i_karaoke_background_color & 0xffffff) |
((p_font_style->i_karaoke_background_alpha & 0xff) << 24));
- if( p_font_style->i_style_flags & STYLE_BOLD )
- b_bold = true;
- if( p_font_style->i_style_flags & STYLE_ITALIC )
- b_italic = true;
- if( p_font_style->i_style_flags & STYLE_UNDERLINE )
- b_uline = true;
- if( p_font_style->i_style_flags & STYLE_STRIKEOUT )
- b_through = true;
+ i_style_flags = p_font_style->i_style_flags & (STYLE_BOLD |
+ STYLE_ITALIC |
+ STYLE_UNDERLINE |
+ STYLE_STRIKEOUT);
}
#ifdef HAVE_STYLES
else
if( !strcasecmp( "font", node ) )
PopFont( &p_fonts );
else if( !strcasecmp( "b", node ) )
- b_bold = false;
+ i_style_flags &= ~STYLE_BOLD;
else if( !strcasecmp( "i", node ) )
- b_italic = false;
+ i_style_flags &= ~STYLE_ITALIC;
else if( !strcasecmp( "u", node ) )
- b_uline = false;
+ i_style_flags &= ~STYLE_UNDERLINE;
else if( !strcasecmp( "s", node ) )
- b_through = false;
+ i_style_flags &= ~STYLE_STRIKEOUT;
break;
case XML_READER_STARTELEM:
if( !strcasecmp( "font", node ) )
rv = HandleFontAttributes( p_xml_reader, &p_fonts );
else if( !strcasecmp( "b", node ) )
- b_bold = true;
+ i_style_flags |= STYLE_BOLD;
else if( !strcasecmp( "i", node ) )
- b_italic = true;
+ i_style_flags |= STYLE_ITALIC;
else if( !strcasecmp( "u", node ) )
- b_uline = true;
+ i_style_flags |= STYLE_UNDERLINE;
else if( !strcasecmp( "s", node ) )
- b_through = true;
+ i_style_flags |= STYLE_STRIKEOUT;
else if( !strcasecmp( "br", node ) )
{
SetupLine( p_filter, "\n", &psz_text,
pi_runs, ppi_run_lengths, ppp_styles,
GetStyleFromFontStack( p_sys,
&p_fonts,
- b_bold,
- b_italic,
- b_uline,
- b_through) );
+ i_style_flags ) );
}
else if( !strcasecmp( "k", node ) )
{
pi_runs, ppi_run_lengths, ppp_styles,
GetStyleFromFontStack( p_sys,
&p_fonts,
- b_bold,
- b_italic,
- b_uline,
- b_through) );
+ i_style_flags ) );
free( psz_node );
break;
}
static void FreeLine( line_desc_t *p_line )
{
- unsigned int i;
- for( i = 0; p_line->pp_glyphs[ i ] != NULL; i++ )
- {
- FT_Done_Glyph( (FT_Glyph)p_line->pp_glyphs[ i ] );
- }
+ for( int i = 0; p_line->pp_glyphs && p_line->pp_glyphs[i] != NULL; i++ )
+ FT_Done_Glyph( (FT_Glyph)p_line->pp_glyphs[i] );
+
free( p_line->pp_glyphs );
free( p_line->p_glyph_pos );
free( p_line->p_fg_rgb );
static void FreeLines( line_desc_t *p_lines )
{
- line_desc_t *p_line, *p_next;
-
- if( !p_lines ) return;
-
- for( p_line = p_lines; p_line != NULL; p_line = p_next )
+ for( line_desc_t *p_line = p_lines; p_line != NULL; )
{
- p_next = p_line->p_next;
+ line_desc_t *p_next = p_line->p_next;
FreeLine( p_line );
+ p_line = p_next;
}
}
static line_desc_t *NewLine( int i_count )
{
- line_desc_t *p_line = malloc( sizeof(line_desc_t) );
+ line_desc_t *p_line = malloc( sizeof(*p_line) );
+
+ if( !p_line )
+ return NULL;
- if( !p_line ) return NULL;
- p_line->i_height = 0;
p_line->i_width = 0;
+ p_line->i_height = 0;
+ p_line->i_alpha = 0xff;
+
p_line->p_next = NULL;
- p_line->pp_glyphs = malloc( sizeof(FT_BitmapGlyph) * ( i_count + 1 ) );
- p_line->p_glyph_pos = malloc( sizeof( FT_Vector ) * ( i_count + 1 ) );
- p_line->p_fg_rgb = malloc( sizeof( uint32_t ) * ( i_count + 1 ) );
- p_line->p_bg_rgb = malloc( sizeof( uint32_t ) * ( i_count + 1 ) );
- p_line->p_fg_bg_ratio = calloc( i_count + 1, sizeof( uint8_t ) );
- p_line->pi_underline_offset = calloc( i_count + 1, sizeof( int ) );
- p_line->pi_underline_thickness = calloc( i_count + 1, sizeof( uint16_t ) );
- if( ( p_line->pp_glyphs == NULL ) ||
- ( p_line->p_glyph_pos == NULL ) ||
- ( p_line->p_fg_rgb == NULL ) ||
- ( p_line->p_bg_rgb == NULL ) ||
- ( p_line->p_fg_bg_ratio == NULL ) ||
- ( p_line->pi_underline_offset == NULL ) ||
- ( p_line->pi_underline_thickness == NULL ) )
+ p_line->pp_glyphs = calloc( i_count + 1, sizeof(*p_line->pp_glyphs) );
+ p_line->p_glyph_pos = calloc( i_count + 1, sizeof(*p_line->p_glyph_pos) );
+ p_line->p_fg_rgb = calloc( i_count + 1, sizeof(*p_line->p_fg_rgb) );
+ p_line->p_bg_rgb = calloc( i_count + 1, sizeof(*p_line->p_bg_rgb) );
+ p_line->p_fg_bg_ratio = calloc( i_count + 1, sizeof(*p_line->p_fg_bg_ratio) );
+ p_line->pi_underline_offset = calloc( i_count + 1, sizeof(*p_line->pi_underline_offset) );
+ p_line->pi_underline_thickness = calloc( i_count + 1, sizeof(*p_line->pi_underline_thickness) );
+
+ if( !p_line->pp_glyphs || !p_line->p_glyph_pos ||
+ !p_line->p_fg_rgb || !p_line->p_bg_rgb || !p_line->p_fg_bg_ratio ||
+ !p_line->pi_underline_offset || !p_line->pi_underline_thickness )
{
- free( p_line->pi_underline_thickness );
- free( p_line->pi_underline_offset );
- free( p_line->p_fg_rgb );
- free( p_line->p_bg_rgb );
- free( p_line->p_fg_bg_ratio );
- free( p_line->p_glyph_pos );
- free( p_line->pp_glyphs );
- free( p_line );
+ FreeLine( p_line );
return NULL;
}
p_line->pp_glyphs[0] = NULL;
-
return p_line;
}
* after the characters have been shuffled around by Fribidi, we can re-apply
* the styles, and to simplify the calculation of runs within a line.
*/
- pp_char_styles = (text_style_t **) malloc( i_len * sizeof( text_style_t * ));
+ pp_char_styles = malloc( i_len * sizeof(*pp_char_styles));
if( !pp_char_styles )
return VLC_ENOMEM;
if( b_karaoke )
{
- pi_karaoke_bar = (uint8_t *) malloc( i_len * sizeof( uint8_t ));
+ pi_karaoke_bar = malloc( i_len * sizeof(*pi_karaoke_bar));
/* If we can't allocate sufficient memory for karaoke, continue anyway -
* we just won't be able to display the progress bar; at least we'll
* get the text.
uint32_t *p_fribidi_string;
int start_pos, pos = 0;
- pp_char_styles_new = (text_style_t **)malloc( i_len * sizeof( text_style_t * ));
+ pp_char_styles_new = malloc( i_len * sizeof(*pp_char_styles_new));
- p_fribidi_string = (uint32_t *)
- malloc( (i_len + 1) * sizeof(uint32_t) );
- p_old_positions = (int *)
- malloc( (i_len + 1) * sizeof( int ) );
- p_new_positions = (int *)
- malloc( (i_len + 1) * sizeof( int ) );
- p_levels = (int8_t *)
- malloc( (i_len + 1) * sizeof( int8_t ) );
+ p_fribidi_string = malloc( (i_len + 1) * sizeof(*p_fribidi_string) );
+ p_old_positions = malloc( (i_len + 1) * sizeof(*p_old_positions) );
+ p_new_positions = malloc( (i_len + 1) * sizeof(*p_new_positions) );
+ p_levels = malloc( (i_len + 1) * sizeof(*p_levels) );
if( ! pp_char_styles_new ||
! p_fribidi_string ||
FT_HAS_KERNING( ( p_face ? p_face : p_sys->p_face ) );
- uint32_t *psz_unicode = (uint32_t *)
- malloc( (k - i_prev + 1) * sizeof( uint32_t ));
+ uint32_t *psz_unicode = malloc( (k - i_prev + 1) * sizeof(*psz_unicode) );
if( !psz_unicode )
{
if( p_face ) FT_Done_Face( p_face );
return VLC_ENOMEM;
}
p_line->i_alpha = p_style->i_font_alpha & 0xff;
- p_line->p_next = NULL;
i_pen_x = 0;
i_pen_y += tmp_result.y;
tmp_result.x = 0;
(p_region_in->p_style->i_font_color & 0xffffff) |
((p_region_in->p_style->i_font_alpha & 0xff) << 24),
0x00ffffff,
- p_region_in->p_style->i_style_flags & STYLE_BOLD,
- p_region_in->p_style->i_style_flags & STYLE_ITALIC,
- p_region_in->p_style->i_style_flags & STYLE_UNDERLINE,
- p_region_in->p_style->i_style_flags & STYLE_STRIKEOUT);
+ p_region_in->p_style->i_style_flags & (STYLE_BOLD |
+ STYLE_ITALIC |
+ STYLE_UNDERLINE |
+ STYLE_STRIKEOUT) );
else
p_style = CreateStyle( p_sys->psz_fontfamily,
p_sys->i_font_size,
(p_sys->i_font_color & 0xffffff) |
(((255-p_sys->i_font_opacity) & 0xff) << 24),
- 0x00ffffff,
- false, false, false, false );
+ 0x00ffffff, 0);
uint32_t i_run_length = i_text_length;
rv = ProcessLines( p_filter, psz_text, i_text_length,
int i_error = 0, fontindex = 0;
/* Allocate structure */
- p_filter->p_sys = p_sys = malloc( sizeof( filter_sys_t ) );
+ p_filter->p_sys = p_sys = malloc( sizeof(*p_sys) );
if( !p_sys )
return VLC_ENOMEM;