[vlc-commits] PS: detect AC-3 from E-AC-3

Jean-Baptiste Kempf git at videolan.org
Sun Aug 10 08:54:03 CEST 2014


vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Sun Aug 10 08:17:35 2014 +0200| [8736551ffc57068b389b6dd583c0640f64035cfd] | committer: Jean-Baptiste Kempf

PS: detect AC-3 from E-AC-3

We must look inside the packet to see this info

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

 modules/demux/ps.h |   16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/modules/demux/ps.h b/modules/demux/ps.h
index 618c25b..2a0018d 100644
--- a/modules/demux/ps.h
+++ b/modules/demux/ps.h
@@ -93,7 +93,21 @@ static inline int ps_track_fill( ps_track_t *tk, ps_psm_t *p_psm, int i_id, bloc
         else if( ( i_id&0xf8 ) == 0x80 || /* 0x80 -> 0x87 */
                  ( i_id&0xf0 ) == 0xc0 )  /* 0xc0 -> 0xcf AC-3, Can also be DD+/E-AC3 in evob */
         {
-            es_format_Init( &tk->fmt, AUDIO_ES, VLC_CODEC_A52 );
+            bool b_eac3 = false;
+            if( ( i_id&0xf0 ) == 0xc0 && p_pkt && p_pkt->i_buffer > 8 )
+            {
+                unsigned i_start = 9 + p_pkt->p_buffer[8];
+                /* AC-3 marking, see vlc_a52_header_Parse */
+                if( p_pkt->p_buffer[i_start + 4] == 0x0b ||
+                    p_pkt->p_buffer[i_start + 5] == 0x77 )
+                {
+                    int bsid = p_pkt->p_buffer[i_start + 9] >> 3;
+                    if( bsid > 10 )
+                        b_eac3 = true;
+                }
+            }
+
+            es_format_Init( &tk->fmt, AUDIO_ES, b_eac3 ? VLC_CODEC_EAC3 : VLC_CODEC_A52 );
             tk->i_skip = 4;
         }
         else if( ( i_id&0xfc ) == 0x00 ) /* 0x00 -> 0x03 */



More information about the vlc-commits mailing list