[vlc-commits] Demux: Correctly differenciate MLP and THD raw samples

Jean-Baptiste Kempf git at videolan.org
Tue Jul 23 10:19:42 CEST 2013


vlc/vlc-2.1 | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Mon Jul 22 20:33:54 2013 +0200| [89e87a0273f3305660808eaa0e4af76e774377af] | committer: Jean-Baptiste Kempf

Demux: Correctly differenciate MLP and THD raw samples

Ref #8850

(cherry picked from commit 449bf4a7605bdc3038a39031099f09733a5101e2)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.1.git/?a=commit;h=89e87a0273f3305660808eaa0e4af76e774377af
---

 modules/demux/mpeg/es.c |   25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/modules/demux/mpeg/es.c b/modules/demux/mpeg/es.c
index 32bfe48..8b4b7d2 100644
--- a/modules/demux/mpeg/es.c
+++ b/modules/demux/mpeg/es.c
@@ -141,6 +141,7 @@ static int DtsProbe( demux_t *p_demux, int64_t *pi_offset );
 static int DtsInit( demux_t *p_demux );
 
 static int MlpProbe( demux_t *p_demux, int64_t *pi_offset );
+static int ThdProbe( demux_t *p_demux, int64_t *pi_offset );
 static int MlpInit( demux_t *p_demux );
 
 static bool Parse( demux_t *p_demux, block_t **pp_output );
@@ -152,6 +153,7 @@ static const codec_t p_codecs[] = {
     { VLC_CODEC_EAC3, true,  "eac3 audio", EA52Probe, A52Init },
     { VLC_CODEC_DTS, false, "dts audio",  DtsProbe,  DtsInit },
     { VLC_CODEC_MLP, false, "mlp audio",  MlpProbe,  MlpInit },
+    { VLC_CODEC_TRUEHD, false, "TrueHD audio",  ThdProbe,  MlpInit },
 
     { 0, false, NULL, NULL, NULL }
 };
@@ -969,7 +971,19 @@ static int MlpCheckSync( const uint8_t *p_peek, int *pi_samples )
     if( p_peek[4+0] != 0xf8 || p_peek[4+1] != 0x72 || p_peek[4+2] != 0x6f )
         return -1;
 
-    if( p_peek[4+3] != 0xba && p_peek[4+3] != 0xbb )
+    if( p_peek[4+3] != 0xbb )
+        return -1;
+
+    /* TODO checksum and real size for robustness */
+    VLC_UNUSED(pi_samples);
+    return 0;
+}
+static int ThdCheckSync( const uint8_t *p_peek, int *pi_samples )
+{
+    if( p_peek[4+0] != 0xf8 || p_peek[4+1] != 0x72 || p_peek[4+2] != 0x6f )
+        return -1;
+
+    if( p_peek[4+3] != 0xba )
         return -1;
 
     /* TODO checksum and real size for robustness */
@@ -978,11 +992,18 @@ static int MlpCheckSync( const uint8_t *p_peek, int *pi_samples )
 }
 static int MlpProbe( demux_t *p_demux, int64_t *pi_offset )
 {
-    const char *ppsz_name[] = { "mlp", "thd", NULL };
+    const char *ppsz_name[] = { "mlp", NULL };
     const int pi_wav[] = { WAVE_FORMAT_PCM, WAVE_FORMAT_UNKNOWN };
 
     return GenericProbe( p_demux, pi_offset, ppsz_name, MlpCheckSync, 4+28+16*4, pi_wav );
 }
+static int ThdProbe( demux_t *p_demux, int64_t *pi_offset )
+{
+    const char *ppsz_name[] = { "thd", NULL };
+    const int pi_wav[] = { WAVE_FORMAT_PCM, WAVE_FORMAT_UNKNOWN };
+
+    return GenericProbe( p_demux, pi_offset, ppsz_name, ThdCheckSync, 4+28+16*4, pi_wav );
+}
 static int MlpInit( demux_t *p_demux )
 
 {



More information about the vlc-commits mailing list