packetizer: hxxx: add missing drain for non annexb content
authorFrançois Cartegnie <fcvlcdev@free.fr>
Thu, 27 Jun 2024 11:24:03 +0000 (18:24 +0700)
committerSebastian Ramacher <sramacher@debian.org>
Tue, 14 Jan 2025 22:09:47 +0000 (23:09 +0100)
(cherry picked from commit 4f0a39ada1bd9314601e80d7f48855462524d1fc)

Gbp-Pq: Name 0022-packetizer-hxxx-add-missing-drain-for-non-annexb-con.patch

modules/packetizer/h264.c
modules/packetizer/hevc.c
modules/packetizer/hxxx_common.c
modules/packetizer/hxxx_common.h

index b015079dd6d87366d7474d90f25c6228aeb8dff9..5a4a5196d49fc11433c374bce1ddb0c90e6dc754 100644 (file)
@@ -536,7 +536,7 @@ static block_t *PacketizeAVC1( decoder_t *p_dec, block_t **pp_block )
 
     return PacketizeXXC1( p_dec, VLC_OBJECT(p_dec),
                           p_sys->i_avcC_length_size, pp_block,
-                          ParseNALBlockW );
+                          ParseNALBlockW, PacketizeDrain );
 }
 
 /*****************************************************************************
index dc8877aa3b949a86757f5b5f2b824d1db223a5e9..e63023b9c986cee55829697310975f87fe6bbc0b 100644 (file)
@@ -303,7 +303,7 @@ static block_t *PacketizeHVC1(decoder_t *p_dec, block_t **pp_block)
 
     return PacketizeXXC1( p_dec, VLC_OBJECT(p_dec),
                           p_sys->i_nal_length_size, pp_block,
-                          ParseNALBlockW );
+                          ParseNALBlockW, PacketizeDrain );
 }
 
 static block_t *PacketizeAnnexB(decoder_t *p_dec, block_t **pp_block)
index 043dc38ba09af7daf4f94b0f5d4a3df76407f983..386d49b57ee33936aac0d119b6c785b4ac04403c 100644 (file)
@@ -112,13 +112,17 @@ block_t * cc_storage_get_current( cc_storage_t *p_ccs, decoder_cc_desc_t *p_desc
  ****************************************************************************/
 block_t *PacketizeXXC1( void *p_private, vlc_object_t *p_obj,
                         uint8_t i_nal_length_size, block_t **pp_block,
-                        pf_annexb_nal_parse pf_nal_parser )
+                        pf_annexb_nal_parse pf_nal_parser,
+                        pf_annexb_nal_drain pf_nal_drain )
 {
     block_t       *p_block;
     block_t       *p_ret = NULL;
     uint8_t       *p;
 
-    if( !pp_block || !*pp_block )
+    if( !pp_block )
+        return pf_nal_drain ? pf_nal_drain( p_private ) : NULL;
+
+    if( !*pp_block )
         return NULL;
     if( (*pp_block)->i_flags&(BLOCK_FLAG_CORRUPTED) )
     {
index c2a6df00cdd71ad184c2948d0d9bc0cd2d3d95b4..1c8241e05d5047bd5c6b46985ba23a9c4b50ba09 100644 (file)
@@ -38,9 +38,10 @@ block_t * cc_storage_get_current( cc_storage_t *p_ccs, decoder_cc_desc_t * );
 /* */
 
 typedef block_t * (*pf_annexb_nal_parse)(void *, bool *, block_t *);
+typedef block_t * (*pf_annexb_nal_drain)(void *);
 block_t *PacketizeXXC1( void *, vlc_object_t *obj,
                        uint8_t, block_t **,
-                       pf_annexb_nal_parse );
+                       pf_annexb_nal_parse, pf_annexb_nal_drain );
 
 #endif // HXXX_COMMON_H