Changeset 858
- Timestamp:
- 04/20/08 17:42:32 (4 weeks ago)
- Files:
-
- trunk/bitstream_info.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/bitstream_info.c
r842 r858 27 27 #include "parser.h" 28 28 #include "golomb.h" 29 30 #include "CodecIDs.h" 29 31 30 32 int inline MININT(int a, int b) … … 55 57 56 58 static const uint16_t ac3_freqs[3] = { 48000, 44100, 32000 }; 59 static const uint16_t ac3_bitratetab[] = {32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 512, 576, 640}; 60 static const uint8_t ac3_halfrate[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3}; 57 61 58 62 /* From: http://svn.mplayerhq.hu/ac3/ (LGPL) … … 116 120 117 121 /* This is a valid frame!!! */ 118 // uint8_t bitrate = ac3_bitratetab[frmsizecod >> 1]; 119 int sample_rate = ac3_freqs[fscod]; 122 uint16_t bitrate = ac3_bitratetab[frmsizecod >> 1]; 123 uint8_t half = ac3_halfrate[bsid]; 124 int sample_rate = ac3_freqs[fscod] >> half; 125 int framesize; 126 switch (fscod) { 127 case 0: 128 framesize = 4 * bitrate; 129 break; 130 case 1: 131 framesize = (320 * bitrate / 147 + (frmsizecod & 1 ? 1 : 0)) * 2; 132 break; 133 case 2: 134 framesize = 6 * bitrate; 135 break; 136 default: 137 break; 138 } 120 139 121 140 shift = 0; … … 126 145 memset(asbd, 0, sizeof(AudioStreamBasicDescription)); 127 146 asbd->mSampleRate = sample_rate >> shift; 128 asbd->mFormatID = kAudioFormatAC3; 147 if(offset == 0 && buff_size == framesize) 148 asbd->mFormatID = kAudioFormatAC3; 149 else 150 asbd->mFormatID = kAudioFormatAC3MS; 129 151 asbd->mFramesPerPacket = 1; 130 152 asbd->mChannelsPerFrame = nfchans_tbl[acmod] + lfe;
