vlc | branch: master | Francois Cartegnie <[email protected]> | Mon Dec 18 
17:33:33 2017 +0100| [37fe8eabf10bc850036d787d8677a85046e737b7] | committer: 
Francois Cartegnie

codec: avcodec: drop DVB spu frame header/trailer

and set expected extradata.
maps to avcodec expected format

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=37fe8eabf10bc850036d787d8677a85046e737b7
---

 modules/codec/avcodec/subtitle.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/modules/codec/avcodec/subtitle.c b/modules/codec/avcodec/subtitle.c
index 5cac6339d6..b03dd648d0 100644
--- a/modules/codec/avcodec/subtitle.c
+++ b/modules/codec/avcodec/subtitle.c
@@ -90,6 +90,29 @@ int InitSubtitleDec(vlc_object_t *obj)
     context->extradata_size = 0;
     context->extradata = NULL;
 
+    if( codec->id == AV_CODEC_ID_DVB_SUBTITLE )
+    {
+        if( dec->fmt_in.i_extra > 3 )
+        {
+            context->extradata = malloc( dec->fmt_in.i_extra );
+            if( context->extradata )
+            {
+                context->extradata_size = dec->fmt_in.i_extra;
+                memcpy( context->extradata, dec->fmt_in.p_extra, 
dec->fmt_in.i_extra );
+            }
+        }
+        else
+        {
+            context->extradata = malloc( 4 );
+            if( context->extradata )
+            {
+                context->extradata_size = 4;
+                SetWBE( &context->extradata[0], dec->fmt_in.subs.dvb.i_id & 
0xFFFF );
+                SetWBE( &context->extradata[2], dec->fmt_in.subs.dvb.i_id >> 
16 );
+            }
+        }
+    }
+
 #if LIBAVFORMAT_VERSION_MICRO >= 100
     av_codec_set_pkt_timebase(context, AV_TIME_BASE_Q);
 #endif
@@ -182,6 +205,12 @@ static subpicture_t *DecodeBlock(decoder_t *dec, block_t 
**block_ptr)
     block->i_buffer -= FF_INPUT_BUFFER_PADDING_SIZE;
     memset(&block->p_buffer[block->i_buffer], 0, FF_INPUT_BUFFER_PADDING_SIZE);
 
+    if( sys->p_codec->id == AV_CODEC_ID_DVB_SUBTITLE && block->i_buffer > 3 )
+    {
+        block->p_buffer += 2; /* drop data identifier / stream id */
+        block->i_buffer -= 3; /* drop 0x3F/FF */
+    }
+
     /* */
     AVSubtitle subtitle;
     memset(&subtitle, 0, sizeof(subtitle));

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to