[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