]> git.sesse.net Git - vlc/blobdiff - modules/codec/dvbsub.c
Don't print a message a malloc failed.
[vlc] / modules / codec / dvbsub.c
index 45b6efb9bc24dc40d166ef5d1cedf9db3ec545a0..677c4012d00565ffb41df977f54346a4081c4aff 100644 (file)
  * in the subtitle descriptor. Potentially it's designed for widechar
  * (but not for UTF-*) codepages.
  *****************************************************************************/
-#include <vlc/vlc.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_plugin.h>
 #include <vlc_vout.h>
 #include <vlc_codec.h>
 #include <vlc_sout.h>
@@ -65,8 +70,8 @@
 #define ENC_POSY_TEXT N_("Encoding Y coordinate")
 #define ENC_POSY_LONGTEXT N_("Y coordinate of the encoded subtitle" )
 
-static int pi_pos_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
-static const char *ppsz_pos_descriptions[] =
+static const int pi_pos_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
+static const char *const ppsz_pos_descriptions[] =
 { N_("Center"), N_("Left"), N_("Right"), N_("Top"), N_("Bottom"),
   N_("Top-Left"), N_("Top-Right"), N_("Bottom-Left"), N_("Bottom-Right") };
 
@@ -83,29 +88,29 @@ static block_t *Encode  ( encoder_t *, subpicture_t * );
 
 vlc_module_begin();
 #   define DVBSUB_CFG_PREFIX "dvbsub-"
-    set_description( _("DVB subtitles decoder") );
+    set_description( N_("DVB subtitles decoder") );
     set_capability( "decoder", 50 );
     set_category( CAT_INPUT );
     set_subcategory( SUBCAT_INPUT_SCODEC );
     set_callbacks( Open, Close );
 
-    add_integer( DVBSUB_CFG_PREFIX "position", 8, NULL, POS_TEXT, POS_LONGTEXT, VLC_TRUE );
+    add_integer( DVBSUB_CFG_PREFIX "position", 8, NULL, POS_TEXT, POS_LONGTEXT, true );
         change_integer_list( pi_pos_values, ppsz_pos_descriptions, 0 );
-    add_integer( DVBSUB_CFG_PREFIX "x", -1, NULL, POSX_TEXT, POSX_LONGTEXT, VLC_FALSE );
-    add_integer( DVBSUB_CFG_PREFIX "y", -1, NULL, POSY_TEXT, POSY_LONGTEXT, VLC_FALSE );
+    add_integer( DVBSUB_CFG_PREFIX "x", -1, NULL, POSX_TEXT, POSX_LONGTEXT, false );
+    add_integer( DVBSUB_CFG_PREFIX "y", -1, NULL, POSY_TEXT, POSY_LONGTEXT, false );
 
 #   define ENC_CFG_PREFIX "sout-dvbsub-"
     add_submodule();
-    set_description( _("DVB subtitles encoder") );
+    set_description( N_("DVB subtitles encoder") );
     set_capability( "encoder", 100 );
     set_callbacks( OpenEncoder, CloseEncoder );
 
-    add_integer( ENC_CFG_PREFIX "x", -1, NULL, ENC_POSX_TEXT, ENC_POSX_LONGTEXT, VLC_FALSE );
-    add_integer( ENC_CFG_PREFIX "y", -1, NULL, ENC_POSY_TEXT, ENC_POSY_LONGTEXT, VLC_FALSE );
+    add_integer( ENC_CFG_PREFIX "x", -1, NULL, ENC_POSX_TEXT, ENC_POSX_LONGTEXT, false );
+    add_integer( ENC_CFG_PREFIX "y", -1, NULL, ENC_POSY_TEXT, ENC_POSY_LONGTEXT, false );
     add_obsolete_integer( ENC_CFG_PREFIX "timeout" ); /* Suppressed since 0.8.5 */
 vlc_module_end();
 
-static const char *ppsz_enc_options[] = { "x", "y", NULL };
+static const char *const ppsz_enc_options[] = { "x", "y", NULL };
 
 /****************************************************************************
  * Local structures
@@ -145,7 +150,7 @@ typedef struct dvbsub_display_s
     int                     i_width;
     int                     i_height;
 
-    vlc_bool_t              b_windowed;
+    bool              b_windowed;
     int                     i_x;
     int                     i_y;
     int                     i_max_x;
@@ -220,12 +225,12 @@ struct decoder_sys_t
     int             i_ancillary_id;
     mtime_t         i_pts;
 
-    vlc_bool_t      b_absolute;
+    bool      b_absolute;
     int             i_spu_position;
     int             i_spu_x;
     int             i_spu_y;
 
-    vlc_bool_t      b_page;
+    bool      b_page;
     dvbsub_page_t   *p_page;
     dvbsub_region_t *p_regions;
     dvbsub_clut_t   *p_cluts;
@@ -298,10 +303,7 @@ static int Open( vlc_object_t *p_this )
     p_dec->pf_decode_sub = Decode;
     p_sys = p_dec->p_sys = malloc( sizeof(decoder_sys_t) );
     if( !p_sys )
-    {
-        msg_Err( p_dec, "out of memory" );
         return VLC_ENOMEM;
-    }
     memset( p_sys, 0, sizeof(decoder_sys_t) );
 
     p_sys->i_pts          = (mtime_t) 0;
@@ -327,12 +329,12 @@ static int Open( vlc_object_t *p_this )
     i_posy = val.i_int;
 
     /* Check if subpicture position was overridden */
-    p_sys->b_absolute = VLC_FALSE;
+    p_sys->b_absolute = true;
     p_sys->i_spu_x = p_sys->i_spu_y = 0;
 
     if( ( i_posx >= 0 ) && ( i_posy >= 0 ) )
     {
-        p_sys->b_absolute = VLC_TRUE;
+        p_sys->b_absolute = true;
         p_sys->i_spu_x = i_posx;
         p_sys->i_spu_y = i_posy;
     }
@@ -402,10 +404,10 @@ static subpicture_t *Decode( decoder_t *p_dec, block_t **pp_block )
     }
 
 #ifdef DEBUG_DVBSUB
-    msg_Dbg( p_dec, "subtitle packet received: "I64Fd, p_sys->i_pts );
+    msg_Dbg( p_dec, "subtitle packet received: %"PRId64, p_sys->i_pts );
 #endif
 
-    p_sys->b_page = VLC_FALSE;
+    p_sys->b_page = false;
     while( bs_show( &p_sys->bs, 8 ) == 0x0f ) /* Sync byte */
     {
         decode_segment( p_dec, &p_sys->bs );
@@ -629,7 +631,9 @@ static void decode_clut( decoder_t *p_dec, bs_t *s )
 #ifdef DEBUG_DVBSUB
         msg_Dbg( p_dec, "new clut: %i", i_id );
 #endif
-        p_clut = malloc( sizeof(dvbsub_clut_t) );
+        p_clut = malloc( sizeof( dvbsub_clut_t ) );
+        if( !p_clut )
+            return;
         p_clut->p_next = p_sys->p_cluts;
         p_sys->p_cluts = p_clut;
     }
@@ -767,11 +771,13 @@ static void decode_page_composition( decoder_t *p_dec, bs_t *s )
 #endif
         /* Allocate a new page */
         p_sys->p_page = malloc( sizeof(dvbsub_page_t) );
+        if( !p_sys->p_page )
+            return;
     }
 
     p_sys->p_page->i_version = i_version;
     p_sys->p_page->i_timeout = i_timeout;
-    p_sys->b_page = VLC_TRUE;
+    p_sys->b_page = true;
 
     /* Number of regions */
     p_sys->p_page->i_region_defs = (i_segment_length - 2) / 6;
@@ -805,7 +811,7 @@ static void decode_region_composition( decoder_t *p_dec, bs_t *s )
     int i_segment_length, i_processed_length, i_id, i_version;
     int i_width, i_height, i_level_comp, i_depth, i_clut;
     int i_8_bg, i_4_bg, i_2_bg;
-    vlc_bool_t b_fill;
+    bool b_fill;
 
     i_segment_length = bs_read( s, 16 );
     i_id = bs_read( s, 8 );
@@ -864,15 +870,9 @@ static void decode_region_composition( decoder_t *p_dec, bs_t *s )
 
     /* Free old object defs */
     while( p_region->i_object_defs )
-    {
-        int i = p_region->i_object_defs - 1;
-        if( p_region->p_object_defs[i].psz_text )
-            free( p_region->p_object_defs[i].psz_text );
-        if( !i )
-            free( p_region->p_object_defs );
+        free( p_region->p_object_defs[--p_region->i_object_defs].psz_text );
 
-        p_region->i_object_defs--;
-    }
+    free( p_region->p_object_defs );
     p_region->p_object_defs = NULL;
 
     /* Extra sanity checks */
@@ -888,7 +888,7 @@ static void decode_region_composition( decoder_t *p_dec, bs_t *s )
 
         p_region->p_pixbuf = malloc( i_height * i_width );
         p_region->i_depth = 0;
-        b_fill = VLC_TRUE;
+        b_fill = true;
     }
     if( p_region->i_depth &&
         ( ( p_region->i_depth != i_depth ) ||
@@ -995,7 +995,7 @@ static void decode_display_definition( decoder_t *p_dec, bs_t *s )
     }
 
     p_sys->p_display = p_display;
-    if( p_old ) free( p_old );
+    free( p_old );
 
     if( i_processed_length != i_segment_length*8 )
     {
@@ -1023,7 +1023,7 @@ static void decode_object( decoder_t *p_dec, bs_t *s )
     decoder_sys_t *p_sys = p_dec->p_sys;
     dvbsub_region_t *p_region;
     int i_segment_length, i_coding_method, i_version, i_id, i;
-    vlc_bool_t b_non_modify_color;
+    bool b_non_modify_color;
 
     /* ETSI 300-743 paragraph 7.2.4
      * sync_byte, segment_type and page_id have already been processed.
@@ -1218,7 +1218,7 @@ static void dvbsub_render_pdata( decoder_t *p_dec, dvbsub_region_t *p_region,
 
 static void dvbsub_pdata2bpp( bs_t *s, uint8_t *p, int i_width, int *pi_off )
 {
-    vlc_bool_t b_stop = VLC_FALSE;
+    bool b_stop = false;
 
     while( !b_stop && !bs_eof( s ) )
     {
@@ -1243,7 +1243,7 @@ static void dvbsub_pdata2bpp( bs_t *s, uint8_t *p, int i_width, int *pi_off )
                     switch( bs_read( s, 2 ) )     //Switch3
                     {
                     case 0x00:
-                        b_stop = VLC_TRUE;
+                        b_stop = true;
                         break;
                     case 0x01:
                         i_count = 2;
@@ -1284,7 +1284,7 @@ static void dvbsub_pdata2bpp( bs_t *s, uint8_t *p, int i_width, int *pi_off )
 
 static void dvbsub_pdata4bpp( bs_t *s, uint8_t *p, int i_width, int *pi_off )
 {
-    vlc_bool_t b_stop = VLC_FALSE;
+    bool b_stop = false;
 
     while( !b_stop && !bs_eof( s ) )
     {
@@ -1307,7 +1307,7 @@ static void dvbsub_pdata4bpp( bs_t *s, uint8_t *p, int i_width, int *pi_off )
                 else
                 {
                     bs_skip( s, 3 );
-                    b_stop = VLC_TRUE;
+                    b_stop = true;
                 }
             }
             else
@@ -1356,7 +1356,7 @@ static void dvbsub_pdata4bpp( bs_t *s, uint8_t *p, int i_width, int *pi_off )
 
 static void dvbsub_pdata8bpp( bs_t *s, uint8_t *p, int i_width, int *pi_off )
 {
-    vlc_bool_t b_stop = VLC_FALSE;
+    bool b_stop = false;
 
     while( !b_stop && !bs_eof( s ) )
     {
@@ -1379,7 +1379,7 @@ static void dvbsub_pdata8bpp( bs_t *s, uint8_t *p, int i_width, int *pi_off )
                 else
                 {
                     bs_skip( s, 7 );
-                    b_stop = VLC_TRUE;
+                    b_stop = true;
                 }
             }
             else
@@ -1409,7 +1409,7 @@ static void free_all( decoder_t *p_dec )
     dvbsub_region_t *p_reg, *p_reg_next;
     dvbsub_clut_t *p_clut, *p_clut_next;
 
-    if( p_sys->p_display ) free( p_sys->p_display );
+    free( p_sys->p_display );
 
     for( p_clut = p_sys->p_cluts; p_clut != NULL; p_clut = p_clut_next )
     {
@@ -1424,10 +1424,9 @@ static void free_all( decoder_t *p_dec )
 
         p_reg_next = p_reg->p_next;
         for( i = 0; i < p_reg->i_object_defs; i++ )
-            if( p_reg->p_object_defs[i].psz_text )
-                free( p_reg->p_object_defs[i].psz_text );
+            free( p_reg->p_object_defs[i].psz_text );
         if( p_reg->i_object_defs ) free( p_reg->p_object_defs );
-        if( p_reg->p_pixbuf ) free( p_reg->p_pixbuf );
+        free( p_reg->p_pixbuf );
         free( p_reg );
     }
     p_sys->p_regions = NULL;
@@ -1586,14 +1585,13 @@ static subpicture_t *render( decoder_t *p_dec )
     /* Set the pf_render callback */
     p_spu->i_start = (mtime_t) p_sys->i_pts;
     //p_spu->i_stop = (mtime_t) 0;
-    p_spu->b_ephemer = VLC_TRUE;
-    p_spu->b_pausable = VLC_TRUE;
-    //p_spu->b_fade = VLC_TRUE;
+    p_spu->b_ephemer = true;
+    p_spu->b_pausable = true;
+    //p_spu->b_fade = true;
     //p_spu->i_stop = p_spu->i_start + (mtime_t) (i_timeout * 1000000);
 
     /* Correct positioning of SPU */
     p_spu->b_absolute = p_sys->b_absolute;
-    p_spu->i_flags = p_sys->i_spu_position;
     p_spu->i_x = p_sys->i_spu_x;
     p_spu->i_y = p_sys->i_spu_y;
     p_spu->i_original_picture_width = 720;
@@ -1665,10 +1663,7 @@ static int OpenEncoder( vlc_object_t *p_this )
 
     /* Allocate the memory needed to store the decoder's structure */
     if( ( p_sys = (encoder_sys_t *)malloc(sizeof(encoder_sys_t)) ) == NULL )
-    {
-        msg_Err( p_enc, "out of memory" );
         return VLC_ENOMEM;
-    }
     p_enc->p_sys = p_sys;
 
     p_enc->pf_encode_sub = Encode;
@@ -1696,7 +1691,7 @@ static int OpenEncoder( vlc_object_t *p_this )
 /* FIXME: this routine is a hack to convert VLC_FOURCC('Y','U','V','A')
  *        into VLC_FOURCC('Y','U','V','P')
  */
-static subpicture_t *YuvaYuvp( encoder_t *p_enc, subpicture_t *p_subpic )
+static subpicture_t *YuvaYuvp( subpicture_t *p_subpic )
 {
     subpicture_region_t *p_region = NULL;
 
@@ -1751,7 +1746,7 @@ static subpicture_t *YuvaYuvp( encoder_t *p_enc, subpicture_t *p_subpic )
         /* Count colors, build best palette */
         for( i_tolerance = 0; i_tolerance < 128; i_tolerance++ )
         {
-            vlc_bool_t b_success = VLC_TRUE;
+            bool b_success = true;
             p_fmt->p_palette->i_entries = 0;
 
             for( i = 0; i < i_pixels ; )
@@ -1781,7 +1776,7 @@ static subpicture_t *YuvaYuvp( encoder_t *p_enc, subpicture_t *p_subpic )
                 }
                 if( p_fmt->p_palette->i_entries >= i_max_entries )
                 {
-                    b_success = VLC_FALSE;
+                    b_success = false;
                     break;
                 }
                 i += i_iterator;
@@ -1916,7 +1911,7 @@ static block_t *Encode( encoder_t *p_enc, subpicture_t *p_subpic )
     p_region = p_subpic->p_region;
     if( p_region->fmt.i_chroma == VLC_FOURCC('Y','U','V','A') )
     {
-        p_temp = YuvaYuvp( p_enc, p_subpic );
+        p_temp = YuvaYuvp( p_subpic );
         if( !p_temp )
         {
             msg_Err( p_enc, "no picture in subpicture" );
@@ -2027,7 +2022,7 @@ static void encode_page_composition( encoder_t *p_enc, bs_t *s,
 {
     encoder_sys_t *p_sys = p_enc->p_sys;
     subpicture_region_t *p_region;
-    vlc_bool_t b_mode_change = VLC_FALSE;
+    bool b_mode_change = false;
     int i_regions, i_timeout;
 
     bs_write( s, 8, 0x0f ); /* Sync byte */
@@ -2052,7 +2047,7 @@ static void encode_page_composition( encoder_t *p_enc, bs_t *s,
             ( p_sys->p_regions[i_regions].i_width >
               (int)p_region->fmt.i_visible_width ) )
         {
-            b_mode_change = VLC_TRUE;
+            b_mode_change = true;
             msg_Dbg( p_enc, "region %i width change: %i -> %i",
                      i_regions, p_sys->p_regions[i_regions].i_width,
                      p_region->fmt.i_visible_width );
@@ -2062,7 +2057,7 @@ static void encode_page_composition( encoder_t *p_enc, bs_t *s,
         if( p_sys->p_regions[i_regions].i_height <
              (int)p_region->fmt.i_visible_height )
         {
-            b_mode_change = VLC_TRUE;
+            b_mode_change = true;
             msg_Dbg( p_enc, "region %i height change: %i -> %i",
                      i_regions, p_sys->p_regions[i_regions].i_height,
                      p_region->fmt.i_visible_height );
@@ -2167,7 +2162,7 @@ static void encode_region_composition( encoder_t *p_enc, bs_t *s,
          p_region = p_region->p_next, i_region++ )
     {
         int i_entries = 4, i_depth = 0x1, i_bg = 0;
-        vlc_bool_t b_text =
+        bool b_text =
             ( p_region->fmt.i_chroma == VLC_FOURCC('T','E','X','T') );
 
         if( !b_text )
@@ -2229,7 +2224,7 @@ static void encode_region_composition( encoder_t *p_enc, bs_t *s,
 
 static void encode_pixel_data( encoder_t *p_enc, bs_t *s,
                                subpicture_region_t *p_region,
-                               vlc_bool_t b_top );
+                               bool b_top );
 
 static void encode_object( encoder_t *p_enc, bs_t *s, subpicture_t *p_subpic )
 {
@@ -2295,13 +2290,13 @@ static void encode_object( encoder_t *p_enc, bs_t *s, subpicture_t *p_subpic )
 
         /* Top field */
         i_pixel_data_pos = bs_pos( s );
-        encode_pixel_data( p_enc, s, p_region, VLC_TRUE );
+        encode_pixel_data( p_enc, s, p_region, true );
         i_pixel_data_pos = ( bs_pos( s ) - i_pixel_data_pos ) / 8;
         SetWBE( &s->p_start[i_update_pos/8], i_pixel_data_pos );
 
         /* Bottom field */
         i_pixel_data_pos = bs_pos( s );
-        encode_pixel_data( p_enc, s, p_region, VLC_FALSE );
+        encode_pixel_data( p_enc, s, p_region, false );
         i_pixel_data_pos = ( bs_pos( s ) - i_pixel_data_pos ) / 8;
         SetWBE( &s->p_start[i_update_pos/8+2], i_pixel_data_pos );
 
@@ -2314,18 +2309,15 @@ static void encode_object( encoder_t *p_enc, bs_t *s, subpicture_t *p_subpic )
     }
 }
 
-static void encode_pixel_line_2bp( encoder_t *p_enc, bs_t *s,
-                                   subpicture_region_t *p_region,
+static void encode_pixel_line_2bp( bs_t *s, subpicture_region_t *p_region,
                                    int i_line );
-static void encode_pixel_line_4bp( encoder_t *p_enc, bs_t *s,
-                                   subpicture_region_t *p_region,
+static void encode_pixel_line_4bp( bs_t *s, subpicture_region_t *p_region,
                                    int i_line );
-static void encode_pixel_line_8bp( encoder_t *p_enc, bs_t *s,
-                                   subpicture_region_t *p_region,
+static void encode_pixel_line_8bp( bs_t *s, subpicture_region_t *p_region,
                                    int i_line );
 static void encode_pixel_data( encoder_t *p_enc, bs_t *s,
                                subpicture_region_t *p_region,
-                               vlc_bool_t b_top )
+                               bool b_top )
 {
     unsigned int i_line;
 
@@ -2343,17 +2335,17 @@ static void encode_pixel_data( encoder_t *p_enc, bs_t *s,
 
         case 4:
             bs_write( s, 8, 0x10 ); /* 2 bit/pixel code string */
-            encode_pixel_line_2bp( p_enc, s, p_region, i_line );
+            encode_pixel_line_2bp( s, p_region, i_line );
             break;
 
         case 16:
             bs_write( s, 8, 0x11 ); /* 4 bit/pixel code string */
-            encode_pixel_line_4bp( p_enc, s, p_region, i_line );
+            encode_pixel_line_4bp( s, p_region, i_line );
             break;
 
         case 256:
             bs_write( s, 8, 0x12 ); /* 8 bit/pixel code string */
-            encode_pixel_line_8bp( p_enc, s, p_region, i_line );
+            encode_pixel_line_8bp( s, p_region, i_line );
             break;
 
         default:
@@ -2366,8 +2358,7 @@ static void encode_pixel_data( encoder_t *p_enc, bs_t *s,
     }
 }
 
-static void encode_pixel_line_2bp( encoder_t *p_enc, bs_t *s,
-                                   subpicture_region_t *p_region,
+static void encode_pixel_line_2bp( bs_t *s, subpicture_region_t *p_region,
                                    int i_line )
 {
     unsigned int i, i_length = 0;
@@ -2458,8 +2449,7 @@ static void encode_pixel_line_2bp( encoder_t *p_enc, bs_t *s,
     bs_align_0( s );
 }
 
-static void encode_pixel_line_4bp( encoder_t *p_enc, bs_t *s,
-                                   subpicture_region_t *p_region,
+static void encode_pixel_line_4bp( bs_t *s, subpicture_region_t *p_region,
                                    int i_line )
 {
     unsigned int i, i_length = 0;
@@ -2557,8 +2547,7 @@ static void encode_pixel_line_4bp( encoder_t *p_enc, bs_t *s,
     bs_align_0( s );
 }
 
-static void encode_pixel_line_8bp( encoder_t *p_enc, bs_t *s,
-                                   subpicture_region_t *p_region,
+static void encode_pixel_line_8bp( bs_t *s, subpicture_region_t *p_region,
                                    int i_line )
 {
     unsigned int i, i_length = 0;