Browse Source

demux: xiph: improve old ffmpeg xiph extradata test

Signed-off-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
(cherry picked from commit 1f073245f0)
Signed-off-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
pull/135/head
Francois Cartegnie 7 years ago
committed by Hugo Beauzée-Luyssen
parent
commit
2af81284cd
  1. 1
      modules/codec/opus_header.c
  2. 18
      modules/demux/xiph.h
  3. 3
      modules/mux/ogg.c

1
modules/codec/opus_header.c

@ -35,6 +35,7 @@
#include <stdlib.h>
#include <vlc_common.h>
#include <vlc_codec.h>
#include "../demux/xiph.h"
/* Header contents:

18
modules/demux/xiph.h

@ -26,9 +26,18 @@
#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)
@ -59,9 +68,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);

3
modules/mux/ogg.c

@ -842,7 +842,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 )
{

Loading…
Cancel
Save