//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
/ /
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
/ /
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
/ /
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
namespace BDInfo
{
public abstract class TSCodecLPCM
{
public static void Scan (
TSAudioStream stream ,
TSStreamBuffer buffer ,
ref string tag )
{
if ( stream . IsInitialized ) return ;
byte [ ] header = buffer . ReadBytes ( 4 ) ;
int flags = ( header [ 2 ] < < 8 ) + header [ 3 ] ;
switch ( ( flags & 0xF000 ) > > 12 )
{
case 1 : // 1/0/0
stream . ChannelCount = 1 ;
stream . LFE = 0 ;
break ;
case 3 : // 2/0/0
stream . ChannelCount = 2 ;
stream . LFE = 0 ;
break ;
case 4 : // 3/0/0
stream . ChannelCount = 3 ;
stream . LFE = 0 ;
break ;
case 5 : // 2/1/0
stream . ChannelCount = 3 ;
stream . LFE = 0 ;
break ;
case 6 : // 3/1/0
stream . ChannelCount = 4 ;
stream . LFE = 0 ;
break ;
case 7 : // 2/2/0
stream . ChannelCount = 4 ;
stream . LFE = 0 ;
break ;
case 8 : // 3/2/0
stream . ChannelCount = 5 ;
stream . LFE = 0 ;
break ;
case 9 : // 3/2/1
stream . ChannelCount = 5 ;
stream . LFE = 1 ;
break ;
case 10 : // 3/4/0
stream . ChannelCount = 7 ;
stream . LFE = 0 ;
break ;
case 11 : // 3/4/1
stream . ChannelCount = 7 ;
stream . LFE = 1 ;
break ;
default :
stream . ChannelCount = 0 ;
stream . LFE = 0 ;
break ;
}
switch ( ( flags & 0xC0 ) > > 6 )
{
case 1 :
stream . BitDepth = 16 ;
break ;
case 2 :
stream . BitDepth = 20 ;
break ;
case 3 :
stream . BitDepth = 24 ;
break ;
default :
stream . BitDepth = 0 ;
break ;
}
switch ( ( flags & 0xF00 ) > > 8 )
{
case 1 :
stream . SampleRate = 48000 ;
break ;
case 4 :
stream . SampleRate = 96000 ;
break ;
case 5 :
stream . SampleRate = 192000 ;
break ;
default :
stream . SampleRate = 0 ;
break ;
}
stream . BitRate = ( uint )
( stream . SampleRate * stream . BitDepth *
( stream . ChannelCount + stream . LFE ) ) ;
stream . IsVBR = false ;
stream . IsInitialized = true ;
}
}
}