demux: xiph: improve old ffmpeg xiph extradata test
authorFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 29 Jul 2019 12:03:46 +0000 (14:03 +0200)
committerHugo Beauzée-Luyssen <hugo@beauzee.fr>
Wed, 14 Aug 2019 12:03:49 +0000 (14:03 +0200)
Signed-off-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
modules/codec/opus_header.c
modules/demux/xiph.h
modules/mux/ogg.c

index 08dd5db..a19d9c7 100644 (file)
@@ -35,6 +35,7 @@
 #include <stdlib.h>
 
 #include <vlc_common.h>
+#include <vlc_codec.h>
 #include "../demux/xiph.h"
 
 /* Header contents:
index 34917ab..c0b2ec8 100644 (file)
 #define XIPH_MAX_HEADER_COUNT (256)
 
 /* Temp ffmpeg vorbis format */
-static inline bool xiph_IsLavcFormat(const void *extra, unsigned i_extra)
+static inline bool xiph_IsLavcFormat(const void *extra, unsigned i_extra,
+                                     vlc_fourcc_t i_codec)
 {
-    return (i_extra >= 6 && GetWBE(extra) == 30);
+    switch(i_codec)
+    {
+        case VLC_CODEC_VORBIS:
+            return i_extra >= 6 && GetWBE(extra) == 30;
+        case VLC_CODEC_THEORA:
+            return i_extra >= 6 && GetWBE(extra) == 42;
+        default:
+            return false;
+    }
 }
 
 static inline unsigned xiph_CountLavcHeaders(const void *p_extra, unsigned i_extra)
@@ -58,9 +67,10 @@ static inline unsigned xiph_CountHeaders(const void *p_extra, unsigned i_extra)
     return *p + 1;
 }
 
-static inline unsigned xiph_CountUnknownHeaders(const void *p_extra, unsigned i_extra)
+static inline unsigned xiph_CountUnknownHeaders(const void *p_extra, unsigned i_extra,
+                                                vlc_fourcc_t i_codec)
 {
-    if (xiph_IsLavcFormat(p_extra, i_extra))
+    if (xiph_IsLavcFormat(p_extra, i_extra, i_codec))
         return xiph_CountLavcHeaders(p_extra, i_extra);
     else
         return xiph_CountHeaders(p_extra, i_extra);
index 41e2507..82e5e90 100644 (file)
@@ -840,7 +840,8 @@ static void OggGetSkeletonFisbone( uint8_t **pp_buffer, long *pi_size,
     if ( p_input->p_fmt->p_extra )
         SetDWLE( &(*pp_buffer)[44],
                 xiph_CountUnknownHeaders( p_input->p_fmt->p_extra,
-                                          p_input->p_fmt->i_extra ) );
+                                          p_input->p_fmt->i_extra,
+                                          p_input->p_fmt->i_codec ) );
 
     if ( headers.i_size > 0 )
     {