]> git.sesse.net Git - vlc/blobdiff - modules/codec/kate.c
Fixed rawvideo packetizer.
[vlc] / modules / codec / kate.c
index 8eece1ebceb85f0a3a7571ea7c37bacdc82c2c41..ced41c9cc1396b37a968705befca78d73248703e 100644 (file)
@@ -108,28 +108,28 @@ static void ParseKateComments( decoder_t * );
 #endif
 
 
-vlc_module_begin();
-    set_shortname( N_("Kate"));
-    set_description( N_("Kate text subtitles decoder") );
-    set_capability( "decoder", 50 );
-    set_callbacks( OpenDecoder, CloseDecoder );
-    set_category( CAT_INPUT );
-    set_subcategory( SUBCAT_INPUT_SCODEC );
-    add_shortcut( "kate" );
+vlc_module_begin ()
+    set_shortname( N_("Kate"))
+    set_description( N_("Kate text subtitles decoder") )
+    set_capability( "decoder", 50 )
+    set_callbacks( OpenDecoder, CloseDecoder )
+    set_category( CAT_INPUT )
+    set_subcategory( SUBCAT_INPUT_SCODEC )
+    add_shortcut( "kate" )
 
 #ifdef ENABLE_PACKETIZER
-    add_submodule();
-    set_description( N_("Kate text subtitles packetizer") );
-    set_capability( "packetizer", 100 );
-    set_callbacks( OpenPacketizer, CloseDecoder );
-    add_shortcut( "kate" );
+    add_submodule ()
+    set_description( N_("Kate text subtitles packetizer") )
+    set_capability( "packetizer", 100 )
+    set_callbacks( OpenPacketizer, CloseDecoder )
+    add_shortcut( "kate" )
 #endif
 
 #ifdef ENABLE_FORMATTING
     add_bool( "kate-formatted", true, NULL, FORMAT_TEXT, FORMAT_LONGTEXT,
               true );
 #endif
-vlc_module_end();
+vlc_module_end ()
 
 /*****************************************************************************
  * OpenDecoder: probe the decoder and return score
@@ -473,7 +473,7 @@ static void GetVideoSize( decoder_t *p_dec, int *w, int *h )
 
 #ifdef ENABLE_BITMAPS
 
-static void CreateBitmap( picture_t *pic, const kate_bitmap *bitmap )
+static void CreateKateBitmap( picture_t *pic, const kate_bitmap *bitmap )
 {
     size_t y;
 
@@ -485,7 +485,7 @@ static void CreateBitmap( picture_t *pic, const kate_bitmap *bitmap )
     }
 }
 
-static void CreatePalette( video_palette_t *fmt_palette, const kate_palette *palette )
+static void CreateKatePalette( video_palette_t *fmt_palette, const kate_palette *palette )
 {
     size_t n;
 
@@ -552,6 +552,7 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, kate_packet *p_kp, block_t
     subpicture_region_t *p_bitmap_region = NULL;
     int ret;
     video_format_t fmt;
+    video_format_t palette;
     kate_tracker kin;
     bool tracker_valid = false;
 
@@ -577,15 +578,13 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, kate_packet *p_kp, block_t
     /* we have an event */
 
     /* Get a new spu */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu )
     {
         msg_Err( p_dec, "Failed to allocate spu buffer" );
         return NULL;
     }
 
-    p_spu->b_pausable = true;
-
     /* these may be 0 for "not specified" */
     p_spu->i_original_picture_width = p_sys->ki.original_canvas_width;
     p_spu->i_original_picture_height = p_sys->ki.original_canvas_height;
@@ -622,6 +621,7 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, kate_packet *p_kp, block_t
 
 #ifdef ENABLE_BITMAPS
     if (ev->bitmap && ev->bitmap->type==kate_bitmap_type_paletted && ev->palette) {
+
         /* create a separate region for the bitmap */
         memset( &fmt, 0, sizeof(video_format_t) );
         fmt.i_chroma = VLC_FOURCC('Y','U','V','P');
@@ -629,20 +629,19 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, kate_packet *p_kp, block_t
         fmt.i_width = fmt.i_visible_width = ev->bitmap->width;
         fmt.i_height = fmt.i_visible_height = ev->bitmap->height;
         fmt.i_x_offset = fmt.i_y_offset = 0;
+        fmt.p_palette = &palette;
+        CreateKatePalette( fmt.p_palette, ev->palette );
 
-        p_bitmap_region = p_spu->pf_create_region( VLC_OBJECT(p_dec), &fmt );
+        p_bitmap_region = subpicture_region_New( &fmt );
         if( !p_bitmap_region )
         {
             msg_Err( p_dec, "cannot allocate SPU region" );
-            p_dec->pf_spu_buffer_del( p_dec, p_spu );
+            decoder_DeleteSubpicture( p_dec, p_spu );
             return NULL;
         }
 
-        /* create the palette */
-        CreatePalette( fmt.p_palette, ev->palette );
-
         /* create the bitmap */
-        CreateBitmap( &p_bitmap_region->picture, ev->bitmap );
+        CreateKateBitmap( p_bitmap_region->p_picture, ev->bitmap );
 
         msg_Dbg(p_dec, "Created bitmap, %zux%zu, %zu colors\n", ev->bitmap->width, ev->bitmap->height, ev->palette->ncolors);
     }
@@ -653,11 +652,11 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, kate_packet *p_kp, block_t
     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_dec), &fmt );
+    p_spu->p_region = subpicture_region_New( &fmt );
     if( !p_spu->p_region )
     {
         msg_Err( p_dec, "cannot allocate SPU region" );
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         return NULL;
     }
 
@@ -674,17 +673,16 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, kate_packet *p_kp, block_t
     {
         p_bitmap_region->i_align = SUBPICTURE_ALIGN_BOTTOM;
     }
-    p_spu->i_x = 0;
-    p_spu->i_y = 10;
+    p_spu->p_region->i_x = 0;
+    p_spu->p_region->i_y = 10;
 
     /* override if tracker info present */
     if (tracker_valid)
     {
-        p_spu->i_flags = 0;
         if (kin.has.region)
         {
-            p_spu->i_x = kin.region_x;
-            p_spu->i_y = kin.region_y;
+            p_spu->p_region->i_x = kin.region_x;
+            p_spu->p_region->i_y = kin.region_y;
             p_spu->b_absolute = true;
         }
 
@@ -718,10 +716,7 @@ static void ParseKateComments( decoder_t *p_dec )
     {
         psz_comment = strdup( p_dec->p_sys->kc.user_comments[i] );
         if( !psz_comment )
-        {
-            msg_Warn( p_dec, "out of memory" );
             break;
-        }
         psz_name = psz_comment;
         psz_value = strchr( psz_comment, '=' );
         if( psz_value )