[vlc-commits] mux: mp4: remove custom AnnexB -> AVC

Francois Cartegnie git at videolan.org
Wed Oct 5 14:19:48 CEST 2016


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Oct  5 14:10:40 2016 +0200| [936bbb0275f5dd3648e723d5f5d02aea61442f35] | committer: Francois Cartegnie

mux: mp4: remove custom AnnexB -> AVC

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

 modules/mux/Makefile.am |  3 +-
 modules/mux/mp4/mp4.c   | 79 ++-----------------------------------------------
 2 files changed, 4 insertions(+), 78 deletions(-)

diff --git a/modules/mux/Makefile.am b/modules/mux/Makefile.am
index 7cdfde9..ae26902 100644
--- a/modules/mux/Makefile.am
+++ b/modules/mux/Makefile.am
@@ -6,7 +6,8 @@ libmux_asf_plugin_la_SOURCES = mux/asf.c demux/asf/libasf_guid.h
 libmux_avi_plugin_la_SOURCES = mux/avi.c
 libmux_mp4_plugin_la_SOURCES = mux/mp4/mp4.c \
 	mux/mp4/libmp4mux.c mux/mp4/libmp4mux.h \
-	packetizer/hxxx_nal.h demux/mp4/libmp4.h \
+       demux/mp4/libmp4.h \
+	packetizer/hxxx_nal.c packetizer/hxxx_nal.h \
         packetizer/h264_nal.c packetizer/h264_nal.h
 libmux_mpjpeg_plugin_la_SOURCES = mux/mpjpeg.c
 libmux_ps_plugin_la_SOURCES = \
diff --git a/modules/mux/mp4/mp4.c b/modules/mux/mp4/mp4.c
index 354b5f0..7f89dd5 100644
--- a/modules/mux/mp4/mp4.c
+++ b/modules/mux/mp4/mp4.c
@@ -42,6 +42,7 @@
 
 #include "../demux/mp4/libmp4.h"
 #include "libmp4mux.h"
+#include "../packetizer/hxxx_nal.h"
 
 /*****************************************************************************
  * Module descriptor
@@ -176,13 +177,9 @@ static void box_send(sout_mux_t *p_mux,  bo_t *box);
 static bo_t *BuildMoov(sout_mux_t *p_mux);
 
 static block_t *ConvertSUBT(block_t *);
-static block_t *ConvertFromAnnexB(block_t *);
 static bool CreateCurrentEdit(mp4_stream_t *, mtime_t, bool);
 static void DebugEdits(sout_mux_t *, const mp4_stream_t *);
 
-static const char avc1_short_start_code[3] = { 0, 0, 1 };
-static const char avc1_start_code[4] = { 0, 0, 0, 1 };
-
 /*****************************************************************************
  * Open:
  *****************************************************************************/
@@ -564,7 +561,7 @@ static block_t * BlockDequeue(sout_input_t *p_input, mp4_stream_t *p_stream)
     {
         case VLC_CODEC_H264:
         case VLC_CODEC_HEVC:
-            p_block = ConvertFromAnnexB(p_block);
+            p_block = hxxx_AnnexB_to_xVC(p_block, 4);
             break;
         case VLC_CODEC_SUBT:
             p_block = ConvertSUBT(p_block);
@@ -772,78 +769,6 @@ static block_t *ConvertSUBT(block_t *p_block)
     return p_block;
 }
 
-static block_t *ConvertFromAnnexB(block_t *p_block)
-{
-    if(p_block->i_buffer < 4)
-    {
-        block_Release(p_block);
-        return NULL;
-    }
-
-    if(memcmp(p_block->p_buffer, avc1_start_code, 4))
-    {
-        if(!memcmp(p_block->p_buffer, avc1_short_start_code, 3))
-        {
-            p_block = block_Realloc(p_block, 1, p_block->i_buffer);
-            if( !p_block )
-                return NULL;
-        }
-        else /* No startcode on start */
-        {
-            block_Release(p_block);
-            return NULL;
-        }
-    }
-
-    uint8_t *last = p_block->p_buffer;
-    uint8_t *dat  = &p_block->p_buffer[4];
-    uint8_t *end = &p_block->p_buffer[p_block->i_buffer];
-
-    /* Replace the 4 bytes start code with 4 bytes size */
-    while (dat < end) {
-        while (dat < end - 4) {
-            if (!memcmp(dat, avc1_start_code, 4))
-            {
-                break;
-            }
-            else if(!memcmp(dat, avc1_short_start_code, 3))
-            {
-                /* save offsets as we don't know if realloc will replace buffer */
-                size_t i_last = last - p_block->p_buffer;
-                size_t i_dat = dat - p_block->p_buffer;
-                size_t i_end = end - p_block->p_buffer;
-
-                p_block = block_Realloc(p_block, 0, p_block->i_buffer + 1);
-                if( !p_block )
-                    return NULL;
-
-                /* restore offsets */
-                last = &p_block->p_buffer[i_last];
-                dat = &p_block->p_buffer[i_dat];
-                end = &p_block->p_buffer[i_end];
-
-                /* Shift data */
-                memmove(&dat[4], &dat[3], end - &dat[3]);
-                end++;
-                break;
-            }
-            dat++;
-        }
-        if (dat >= end - 4)
-            dat = end;
-
-        /* Fix size */
-        SetDWBE(last, dat - &last[4]);
-
-        /* Skip blocks with SPS/PPS */
-        //if ((last[4]&0x1f) == 7 || (last[4]&0x1f) == 8)
-        //    ; // FIXME Find a way to skip dat without frelling everything
-        last = dat;
-        dat += 4;
-    }
-    return p_block;
-}
-
 static void box_send(sout_mux_t *p_mux,  bo_t *box)
 {
     assert(box != NULL);



More information about the vlc-commits mailing list