]> git.sesse.net Git - vlc/commitdiff
Added decoder_NewSubpicture/decoder_DeleteSubpicture helpers.
authorLaurent Aimar <fenrir@videolan.org>
Thu, 23 Oct 2008 19:08:16 +0000 (21:08 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Thu, 23 Oct 2008 19:08:53 +0000 (21:08 +0200)
16 files changed:
include/vlc_codec.h
modules/codec/cc.c
modules/codec/cmml/cmml.c
modules/codec/csri.c
modules/codec/cvdsub.c
modules/codec/dvbsub.c
modules/codec/kate.c
modules/codec/libass.c
modules/codec/spudec/parse.c
modules/codec/subtitles/subsdec.c
modules/codec/subtitles/subsusf.c
modules/codec/svcdsub.c
modules/codec/telx.c
modules/codec/zvbi.c
src/input/decoder.c
src/libvlccore.sym

index a60bc3bcf5ab9038f6bf9f07577cd5bae2a1ffbf..41cf66bdb42a6845a2d9fc8936025a537c827cc5 100644 (file)
@@ -95,14 +95,15 @@ struct decoder_t
     void            ( * pf_picture_link)    ( decoder_t *, picture_t * );
     void            ( * pf_picture_unlink)  ( decoder_t *, picture_t * );
 
-    /* SPU output callbacks */
-    subpicture_t *  ( * pf_spu_buffer_new) ( decoder_t * );
-    void            ( * pf_spu_buffer_del) ( decoder_t *, subpicture_t * );
-
     /*
      * Owner fields
      */
 
+    /* SPU output callbacks
+     * XXX use decoder_NewSubpicture and decoder_DeleteSubpicture */
+    subpicture_t   *(*pf_spu_buffer_new) ( decoder_t * );
+    void            (*pf_spu_buffer_del) ( decoder_t *, subpicture_t * );
+
     /* Input attachments
      * XXX use decoder_GetInputAttachments */
     int             (*pf_get_attachments)( decoder_t *p_dec, input_attachment_t ***ppp_attachment, int *pi_attachment );
@@ -163,12 +164,24 @@ struct encoder_t
  * @}
  */
 
+/**
+ * This function will return a new subpicture usable by a decoder as an output
+ * buffer. You have to release it using decoder_DeleteSubpicture or by returning
+ * it to the caller as a pf_decode_sub return value.
+ */
+VLC_EXPORT( subpicture_t *, decoder_NewSubpicture, ( decoder_t * ) );
+
+/**
+ * This function will release a subpicture create by decoder_NewSubicture.
+ */
+VLC_EXPORT( void, decoder_DeleteSubpicture, ( decoder_t *, subpicture_t *p_subpicture ) );
+
 /**
  * This function gives all input attachments at once.
  *
  * You MUST release the returned values
  */
-VLC_EXPORT( int, decoder_GetInputAttachments, ( decoder_t *p_dec, input_attachment_t ***ppp_attachment, int *pi_attachment ) );
+VLC_EXPORT( int, decoder_GetInputAttachments, ( decoder_t *, input_attachment_t ***ppp_attachment, int *pi_attachment ) );
 
 /**
  * This function converts a decoder timestamp into a display date comparable
index 76024b96eac07054d748efc0f3bedaf047702dfd..4db6b31a7f476d30102bb50bbe7713a0eb16ee2a 100644 (file)
@@ -329,7 +329,7 @@ static subpicture_t *Subtitle( decoder_t *p_dec, char *psz_subtitle, char *psz_h
         EnsureUTF8( psz_html );
 
     /* Create the subpicture unit */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu )
     {
         msg_Warn( p_dec, "can't get spu buffer" );
@@ -350,7 +350,7 @@ static subpicture_t *Subtitle( decoder_t *p_dec, char *psz_subtitle, char *psz_h
         msg_Err( p_dec, "cannot allocate SPU region" );
         free( psz_subtitle );
         free( psz_html );
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         return NULL;
     }
 
index 2e5109efcea5c622b55395004ce62890a1fd5516..14fe347a0db4a3f534781e9d7a6a69abe10c895a 100644 (file)
@@ -159,7 +159,7 @@ static subpicture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
      * displaying is done in the DisplayAnchor function in intf.c (called from
      * DisplayPendingAnchor, which in turn is called from the main RunIntf
      * loop). */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu )
     {
         msg_Dbg( p_dec, "couldn't allocate new subpicture" );
index 61ae9f4cffb98928c131ec4ad9ca84e9f0b8611b..f1f6de07a7e2a8bdf7a1a77fb0d684e760ca8e92 100644 (file)
@@ -174,7 +174,7 @@ static subpicture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
         return NULL;
     }
 
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu )
     {
         msg_Warn( p_dec, "can't get spu buffer" );
@@ -185,7 +185,7 @@ static subpicture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
     p_spu->p_sys = malloc( sizeof( subpicture_sys_t ));
     if( !p_spu->p_sys )
     {
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         block_Release( p_block );
         return NULL;
     }
@@ -196,7 +196,7 @@ static subpicture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
     if( !p_spu->p_sys->p_subs_data )
     {
         free( p_spu->p_sys );
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         block_Release( p_block );
         return NULL;
     }
index e5f31496b523847a2e0b774135c3a8a492cc31cb..a2d1a76d86560b3964bf7f7dacac8576105a4fd0 100644 (file)
@@ -502,7 +502,7 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, block_t *p_data )
     int i;
 
     /* Allocate the subpicture internal data. */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu ) return NULL;
 
     p_spu->i_start = p_data->i_pts;
@@ -530,7 +530,7 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, block_t *p_data )
     if( !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;
     }
 
index 9658c89512f6a2048771545ab4cdce1a2f96208f..0310fa4441fe32f69c2c0fcc60f971d5c51f63cf 100644 (file)
@@ -1449,7 +1449,7 @@ static subpicture_t *render( decoder_t *p_dec )
     int i_base_y;
 
     /* Allocate the subpicture internal data. */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu )
         return NULL;
 
index 2ce29bf976a738af2bb2482681516f64a9838be7..20090c1a47058542705997ff25ef1e121f5f9393 100644 (file)
@@ -578,7 +578,7 @@ 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" );
@@ -636,7 +636,7 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, kate_packet *p_kp, block_t
         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;
         }
 
@@ -656,7 +656,7 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, kate_packet *p_kp, block_t
     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;
     }
 
index 6efe21cfabc22d816535b8deb9162b48013bd100..0fa34ce7621f3ae09b4a34b0128879d74e8ab6b5 100644 (file)
@@ -231,7 +231,7 @@ static subpicture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
         return NULL;
     }
 
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu )
     {
         msg_Warn( p_dec, "can't get spu buffer" );
@@ -242,7 +242,7 @@ static subpicture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
     p_spu->p_sys = malloc( sizeof( subpicture_sys_t ));
     if( !p_spu->p_sys )
     {
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         block_Release( p_block );
         return NULL;
     }
@@ -252,7 +252,7 @@ static subpicture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
     if( !p_spu->p_sys->p_subs_data )
     {
         free( p_spu->p_sys );
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         block_Release( p_block );
         return NULL;
     }
index 5a2ee513301f521cc765557759a4591df2240940..88968f10b7eb6262e9e85194380b1847b1b1f52a 100644 (file)
@@ -85,7 +85,7 @@ subpicture_t * ParsePacket( decoder_t *p_dec )
     spu_properties_t spu_properties;
 
     /* Allocate the subpicture internal data. */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu ) return NULL;
 
     /* Rationale for the "p_spudec->i_rle_size * 4": we are going to
@@ -118,7 +118,7 @@ subpicture_t * ParsePacket( decoder_t *p_dec )
     if( ParseControlSeq( p_dec, p_spu, p_spu_data, &spu_properties ) )
     {
         /* There was a parse error, delete the subpicture */
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         return NULL;
     }
 
@@ -126,7 +126,7 @@ subpicture_t * ParsePacket( decoder_t *p_dec )
     if( ParseRLE( p_dec, p_spu_data, &spu_properties ) )
     {
         /* There was a parse error, delete the subpicture */
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         return NULL;
     }
 
index 359944c37dc3424f7cfa8033aa6708cd8e4e0ce0..24b9021dfb5b61b4e0574520680c74ddb4bcc83e 100644 (file)
@@ -402,7 +402,7 @@ static subpicture_t *ParseText( decoder_t *p_dec, block_t *p_block )
     }
 
     /* Create the subpicture unit */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu )
     {
         msg_Warn( p_dec, "can't get spu buffer" );
@@ -421,7 +421,7 @@ static subpicture_t *ParseText( decoder_t *p_dec, block_t *p_block )
     {
         msg_Err( p_dec, "cannot allocate SPU region" );
         free( psz_subtitle );
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         return NULL;
     }
 
index c088b3d226d14ed39ea6e049b75ccbdf2862d123..b2467efe193232d2a611d0d6087544a2a761d455 100644 (file)
@@ -208,7 +208,7 @@ static subpicture_t *ParseText( decoder_t *p_dec, block_t *p_block )
     }
 
     /* Create the subpicture unit */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu )
     {
         msg_Warn( p_dec, "can't get spu buffer" );
index b0fdfb81357c32ec0bda20fb4334464fac0cc6b6..d5e5e9dac7b4a0a3f5ff20ad77ea6f24c094c878 100644 (file)
@@ -471,7 +471,7 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, block_t *p_data )
     int i;
 
     /* Allocate the subpicture internal data. */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu ) return NULL;
 
     p_spu->i_start = p_data->i_pts;
@@ -509,7 +509,7 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, block_t *p_data )
     if( !p_region )
     {
         msg_Err( p_dec, "cannot allocate SVCD subtitle region" );
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         return NULL;
     }
 
index 9c6978f0fdb153fc3433023d4508ae18a56c818e..1cc96d538158a69fc13310fd114b3056e0ebd51e 100644 (file)
@@ -692,7 +692,7 @@ static subpicture_t *Decode( decoder_t *p_dec, block_t **pp_block )
     strcpy( p_sys->psz_prev_text, psz_text );
 
     /* Create the subpicture unit */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu )
     {
         msg_Warn( p_dec, "can't get spu buffer" );
@@ -730,7 +730,7 @@ static subpicture_t *Decode( decoder_t *p_dec, block_t **pp_block )
 error:
     if ( p_spu != NULL )
     {
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         p_spu = NULL;
     }
 
index e716f90f1a9ea80675c6f8fdaf052caf2f13fc61..833c88684502144ff928d3f3737f9f4b4bbafa4b 100644 (file)
@@ -441,7 +441,7 @@ error:
     vbi_unref_page( &p_page );
     if( p_spu != NULL )
     {
-        p_dec->pf_spu_buffer_del( p_dec, p_spu );
+        decoder_DeleteSubpicture( p_dec, p_spu );
         p_spu = NULL;
     }
 
@@ -459,7 +459,7 @@ static subpicture_t *Subpicture( decoder_t *p_dec, video_format_t *p_fmt,
 
     /* If there is a page or sub to render, then we do that here */
     /* Create the subpicture unit */
-    p_spu = p_dec->pf_spu_buffer_new( p_dec );
+    p_spu = decoder_NewSubpicture( p_dec );
     if( !p_spu )
     {
         msg_Warn( p_dec, "can't get spu buffer" );
@@ -487,7 +487,7 @@ static subpicture_t *Subpicture( decoder_t *p_dec, video_format_t *p_fmt,
     if( p_spu->p_region == NULL )
     {
         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;
     }
 
index 7043b4c6ce2b5845295fb5f2c038060ad0dda0a7..c7e300a42bafece15c64f9bf90a2786d9b5fadf6 100644 (file)
@@ -161,6 +161,17 @@ struct decoder_owner_sys_t
 /*****************************************************************************
  * Public functions
  *****************************************************************************/
+subpicture_t *decoder_NewSubpicture( decoder_t *p_decoder )
+{
+    subpicture_t *p_subpicture = p_decoder->pf_spu_buffer_new( p_decoder );
+    if( !p_subpicture )
+        msg_Warn( p_decoder, "can't get output subpicture" );
+    return p_subpicture;
+}
+void decoder_DeleteSubpicture( decoder_t *p_decoder, subpicture_t *p_subpicture )
+{
+    p_decoder->pf_spu_buffer_del( p_decoder, p_subpicture );
+}
 
 /* decoder_GetInputAttachments:
  */
index ef6e2f79e3a9b5de20273a1a6c60d286726e413d..bf4f18ed917fee5944e2854543f360ca2b72945a 100644 (file)
@@ -77,9 +77,11 @@ date_Increment
 date_Init
 date_Move
 date_Set
+decoder_DeleteSubpicture
 decoder_GetDisplayDate
 decoder_GetDisplayRate
 decoder_GetInputAttachments
+decoder_NewSubpicture
 decoder_SynchroChoose
 decoder_SynchroDate
 decoder_SynchroDecode