[vlc-commits] commit: FreeType: use ToCharset() ( Rémi Denis-Courmont )
git at videolan.org
git at videolan.org
Tue Oct 26 20:11:38 CEST 2010
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Oct 26 21:11:13 2010 +0300| [14b3c6a77f635e846aeec2b38d98390c658be26e] | committer: Rémi Denis-Courmont
FreeType: use ToCharset()
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=14b3c6a77f635e846aeec2b38d98390c658be26e
---
modules/misc/freetype.c | 86 ++++++++--------------------------------------
1 files changed, 15 insertions(+), 71 deletions(-)
diff --git a/modules/misc/freetype.c b/modules/misc/freetype.c
index 217a205..acc4256 100644
--- a/modules/misc/freetype.c
+++ b/modules/misc/freetype.c
@@ -1035,9 +1035,8 @@ static int RenderText( filter_t *p_filter, subpicture_region_t *p_region_out,
line_desc_t *p_lines = NULL, *p_line = NULL, *p_next = NULL, *p_prev = NULL;
int i, i_pen_y, i_pen_x, i_error, i_glyph_index, i_previous;
uint32_t *psz_unicode, *psz_unicode_orig = NULL, i_char, *psz_line_start;
- int i_string_length;
+ size_t i_string_length;
char *psz_string;
- vlc_iconv_t iconv_handle = (vlc_iconv_t)(-1);
int i_font_color, i_font_alpha, i_font_size, i_red, i_green, i_blue;
vlc_value_t val;
int i_scale = 1000;
@@ -1079,44 +1078,15 @@ static int RenderText( filter_t *p_filter, subpicture_region_t *p_region_out,
result.x = result.y = 0;
line.xMin = line.xMax = line.yMin = line.yMax = 0;
- psz_unicode = psz_unicode_orig =
- malloc( ( strlen(psz_string) + 1 ) * sizeof(uint32_t) );
- if( psz_unicode == NULL )
- goto error;
#if defined(WORDS_BIGENDIAN)
- iconv_handle = vlc_iconv_open( "UCS-4BE", "UTF-8" );
+ psz_unicode = ToCharset( "UCS-4BE", psz_string, &i_string_length );
#else
- iconv_handle = vlc_iconv_open( "UCS-4LE", "UTF-8" );
+ psz_unicode = ToCharset( "UCS-4LE", psz_string, &i_string_length );
#endif
- if( iconv_handle == (vlc_iconv_t)-1 )
- {
- msg_Warn( p_filter, "unable to do conversion" );
+ if( psz_unicode == NULL )
goto error;
- }
-
- {
- char *p_out_buffer;
- const char *p_in_buffer = psz_string;
- size_t i_in_bytes, i_out_bytes, i_out_bytes_left, i_ret;
- i_in_bytes = strlen( psz_string );
- i_out_bytes = i_in_bytes * sizeof( uint32_t );
- i_out_bytes_left = i_out_bytes;
- p_out_buffer = (char *)psz_unicode;
- i_ret = vlc_iconv( iconv_handle, (const char**)&p_in_buffer,
- &i_in_bytes,
- &p_out_buffer, &i_out_bytes_left );
-
- vlc_iconv_close( iconv_handle );
-
- if( i_in_bytes )
- {
- msg_Warn( p_filter, "failed to convert string to unicode (%m), "
- "bytes left %zu", i_in_bytes );
- goto error;
- }
- *(uint32_t*)p_out_buffer = 0;
- i_string_length = (i_out_bytes - i_out_bytes_left) / sizeof(uint32_t);
- }
+ psz_unicode_orig = psz_unicode;
+ i_string_length /= 4;
#if defined(HAVE_FRIBIDI)
{
@@ -1382,10 +1352,8 @@ static bool StyleEquals( ft_style_t *s1, ft_style_t *s2 )
}
static void IconvText( filter_t *p_filter, const char *psz_string,
- uint32_t *i_string_length, uint32_t **ppsz_unicode )
+ size_t *i_string_length, uint32_t **ppsz_unicode )
{
- vlc_iconv_t iconv_handle = (vlc_iconv_t)(-1);
-
/* If memory hasn't been allocated for our output string, allocate it here
* - the calling function must now be responsible for freeing it.
*/
@@ -1398,41 +1366,17 @@ static void IconvText( filter_t *p_filter, const char *psz_string,
if( *ppsz_unicode )
{
+ *ppsz_unicode =
#if defined(WORDS_BIGENDIAN)
- iconv_handle = vlc_iconv_open( "UCS-4BE", "UTF-8" );
+ ToCharset( "UCS-4BE", psz_string, i_string_length );
#else
- iconv_handle = vlc_iconv_open( "UCS-4LE", "UTF-8" );
+ ToCharset( "UCS-4LE", psz_string, i_string_length );
#endif
- if( iconv_handle != (vlc_iconv_t)-1 )
- {
- char *p_in_buffer, *p_out_buffer;
- size_t i_in_bytes, i_out_bytes, i_out_bytes_left, i_ret;
- i_in_bytes = strlen( psz_string );
- i_out_bytes = i_in_bytes * sizeof( uint32_t );
- i_out_bytes_left = i_out_bytes;
- p_in_buffer = (char *) psz_string;
- p_out_buffer = (char *) *ppsz_unicode;
- i_ret = vlc_iconv( iconv_handle, (const char**)&p_in_buffer,
- &i_in_bytes, &p_out_buffer, &i_out_bytes_left );
-
- vlc_iconv_close( iconv_handle );
-
- if( i_in_bytes )
- {
- msg_Warn( p_filter, "failed to convert string to unicode (%m), "
- "bytes left %u", (unsigned)i_in_bytes );
- }
- else
- {
- *(uint32_t*)p_out_buffer = 0;
- *i_string_length =
- (i_out_bytes - i_out_bytes_left) / sizeof(uint32_t);
- }
- }
+ if( *ppsz_unicode != NULL )
+ *i_string_length /= 4;
else
- {
- msg_Warn( p_filter, "unable to do conversion" );
- }
+ /* FIXME: This is going to fail miserably in the caller */
+ msg_Warn( p_filter, "failed to convert string to unicode (%m)" );
}
}
@@ -1663,7 +1607,7 @@ static void SetupLine( filter_t *p_filter, const char *psz_text_in,
uint32_t **ppi_run_lengths, ft_style_t ***ppp_styles,
ft_style_t *p_style )
{
- uint32_t i_string_length = 0;
+ size_t i_string_length;
IconvText( p_filter, psz_text_in, &i_string_length, psz_text_out );
*psz_text_out += i_string_length;
More information about the vlc-commits
mailing list