François Cartegnie pushed to branch master at VideoLAN / VLC


Commits:
a20f72c6 by François Cartegnie at 2024-03-05T18:54:43+00:00
packetizer: hevc: fix xps insertion on recovery point

Was not inserted if there's no pre-frame NAL units

- - - - -


1 changed file:

- modules/packetizer/hevc.c


Changes:

=====================================
modules/packetizer/hevc.c
=====================================
@@ -134,30 +134,37 @@ static inline void InitQueue( block_t **pp_head, block_t 
***ppp_tail )
 static block_t * OutputQueues(decoder_sys_t *p_sys, bool b_valid)
 {
     block_t *p_output = NULL;
+    block_t *p_xps = NULL;
     block_t **pp_output_last = &p_output;
     uint32_t i_flags = 0; /* Because block_ChainGather does not merge flags or 
times */
 
+    if(p_sys->b_recovery_point && p_sys->sets != SENT)
+        p_xps = GetXPSCopy(p_sys);
+
     if(p_sys->pre.p_chain)
     {
         i_flags |= p_sys->pre.p_chain->i_flags;
-        if(p_sys->b_recovery_point && p_sys->sets != SENT)
+
+        if(p_sys->pre.p_chain->i_buffer >= 5 &&
+            hevc_getNALType(&p_sys->pre.p_chain->p_buffer[4]) == HEVC_NAL_AUD)
         {
-            if(p_sys->pre.p_chain->i_buffer >= 5 &&
-               hevc_getNALType(&p_sys->pre.p_chain->p_buffer[4]) == 
HEVC_NAL_AUD)
-            {
-                block_t *p_au = p_sys->pre.p_chain;
-                p_sys->pre.p_chain = p_sys->pre.p_chain->p_next;
-                p_au->p_next = NULL;
-                block_ChainLastAppend(&pp_output_last, p_au);
-            }
-            block_t *p_xps = GetXPSCopy(p_sys);
-            if(p_xps)
-                block_ChainLastAppend(&pp_output_last, p_xps);
+            block_t *p_au = p_sys->pre.p_chain;
+            p_sys->pre.p_chain = p_sys->pre.p_chain->p_next;
+            p_au->p_next = NULL;
+            block_ChainLastAppend(&pp_output_last, p_au);
         }
+
+        if(p_xps)
+            block_ChainLastAppend(&pp_output_last, p_xps);
+
         if(p_sys->pre.p_chain)
             block_ChainLastAppend(&pp_output_last, p_sys->pre.p_chain);
         INITQ(pre);
     }
+    else if(p_xps)
+    {
+        block_ChainLastAppend(&pp_output_last, p_xps);
+    }
 
     if(p_sys->frame.p_chain)
     {



View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/commit/a20f72c674c1c0c9b012790ed8b149c0532881c7

-- 
View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/commit/a20f72c674c1c0c9b012790ed8b149c0532881c7
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance
_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to