12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #include "AACFrame.h"
- #include "api__in_mp3.h"
- #include "resource.h"
- #include "in2.h"
- extern In_Module mod;
- void AACFrame::ReadBuffer( unsigned __int8 *buffer )
- {
- syncword = ( buffer[ 0 ] << 4 ) | ( buffer[ 1 ] >> 4 );
- id = ( buffer[ 1 ] >> 3 ) & 1;
- layer = ( buffer[ 1 ] >> 1 ) & 3;
- protection = ( buffer[ 1 ] ) & 1;
- profile = ( buffer[ 2 ] >> 6 ) & 3;
- sampleRateIndex = ( buffer[ 2 ] >> 2 ) & 0xF;
- privateBit = ( buffer[ 2 ] >> 1 ) & 1;
- channelConfiguration = ( ( buffer[ 2 ] & 1 ) << 2 ) | ( ( buffer[ 3 ] >> 6 ) & 3 );
- original = ( buffer[ 3 ] >> 5 ) & 1;
- home = ( buffer[ 3 ] >> 4 ) & 1;
- //copyright_identification_bit = (buffer[3] >> 3) & 1;
- //copyright_identification_start = (buffer[3] >> 2) & 1;
- frameLength = ( ( buffer[ 3 ] & 3 ) << 11 ) | ( buffer[ 4 ] << 3 ) | ( ( buffer[ 5 ] >> 5 ) & 7 );
- bufferFullness = ( ( buffer[ 5 ] & 0xF8 ) << 5 ) | ( ( buffer[ 6 ] >> 2 ) & 0x3F );
- numDataBlocks = buffer[ 6 ] & 3;
- }
- bool AACFrame::OK()
- {
- if (syncword == SYNC
- && layer == 0
- && sampleRateIndex < 13
- //&& profile != LTP // TODO: can coding technologies decoder do LTP?
- )
- return true;
- else
- return false;
- }
- static const unsigned int aac_sratetab[] =
- {
- 96000,
- 88200,
- 64000,
- 48000,
- 44100,
- 32000,
- 24000,
- 22050,
- 16000,
- 12000,
- 11025,
- 8000,
- 7350,
- };
- int AACFrame::GetSampleRate()
- {
- return aac_sratetab[sampleRateIndex];
- }
- static const wchar_t *aac_profiletab[] = {L"Main", L"LC", L"SSR", L"LTP"};
- const wchar_t *AACFrame::GetProfileName()
- {
- return aac_profiletab[profile];
- }
- //static const char *aac_channels[] = {"Custom", "Mono", "Stereo", "3 channel", "4 channel", "surround", "5.1", "7.1"};
- static wchar_t aac_channels_str[64];
- static int aac_channels_id[] = {IDS_CUSTOM, IDS_MONO, IDS_STEREO, IDS_3_CHANNEL, IDS_4_CHANNEL, IDS_SURROUND, IDS_5_1, IDS_7_1};
- const wchar_t *AACFrame::GetChannelConfigurationName()
- {
- return WASABI_API_LNGSTRINGW_BUF(aac_channels_id[channelConfiguration],aac_channels_str,64);
- }
- int AACFrame::GetNumChannels()
- {
- switch(channelConfiguration)
- {
- case 7:
- return 8;
- default:
- return channelConfiguration;
- }
- }
- int AACFrame::GetMPEGVersion()
- {
- if (id == 0)
- return 2;
- else
- return 4;
- }
|