Exemplo n.º 1
0
        private static string BuildCodecPrivateData(AacFrameHeader aacFrameHeader)
        {
            Func <AacFrameHeader, string> privateDataFactory = AacDecoderSettings.Parameters.CodecPrivateDataFactory;

            if (null != privateDataFactory)
            {
                return(privateDataFactory(aacFrameHeader));
            }

            AacDecoderParameters.WaveFormatEx configurationFormat = AacDecoderSettings.Parameters.ConfigurationFormat;
            WaveFormatEx waveFormatEx;

            switch (configurationFormat)
            {
            case AacDecoderParameters.WaveFormatEx.RawAac:
                if (!AacDecoderSettings.Parameters.UseRawAac)
                {
                    throw new NotSupportedException("AacDecoderSettings.Parameters.UseRawAac must be enabled when using AacDecoderParameters.WaveFormatEx.RawAac");
                }

                RawAacWaveInfo rawAacWaveInfo1 = new RawAacWaveInfo();
                rawAacWaveInfo1.nChannels      = aacFrameHeader.ChannelConfig;
                rawAacWaveInfo1.nSamplesPerSec = (uint)aacFrameHeader.SamplingFrequency;
                RawAacWaveInfo rawAacWaveInfo2 = rawAacWaveInfo1;
                TimeSpan       duration        = aacFrameHeader.Duration;

                double num1;
                if (duration.TotalSeconds > 0.0)
                {
                    double num2 = (double)aacFrameHeader.FrameLength;
                    duration = aacFrameHeader.Duration;
                    double totalSeconds = duration.TotalSeconds;
                    num1 = num2 / totalSeconds;
                }
                else
                {
                    num1 = 0.0;
                }

                int num3 = (int)(uint)num1;
                rawAacWaveInfo2.nAvgBytesPerSec       = (uint)num3;
                rawAacWaveInfo1.pbAudioSpecificConfig = aacFrameHeader.AudioSpecificConfig;
                waveFormatEx = rawAacWaveInfo1;
                break;

            case AacDecoderParameters.WaveFormatEx.HeAac:
                HeAacWaveInfo heAacWaveInfo = new HeAacWaveInfo();
                heAacWaveInfo.wPayloadType          = AacDecoderSettings.Parameters.UseRawAac ? (ushort)0 : (ushort)1;
                heAacWaveInfo.nChannels             = aacFrameHeader.ChannelConfig;
                heAacWaveInfo.nSamplesPerSec        = (uint)aacFrameHeader.SamplingFrequency;
                heAacWaveInfo.pbAudioSpecificConfig = aacFrameHeader.AudioSpecificConfig;
                waveFormatEx = heAacWaveInfo;
                break;

            default:
                throw new NotSupportedException("Unknown WaveFormatEx type: " + (object)configurationFormat);
            }

            return(WaveFormatExExtensions.ToCodecPrivateData(waveFormatEx));
        }
Exemplo n.º 2
0
        public void Configure(IAudioFrameHeader frameHeader)
        {
            AacFrameHeader aacFrameHeader = (AacFrameHeader)frameHeader;

            CodecPrivateData  = AacConfigurator.BuildCodecPrivateData(aacFrameHeader);
            Name              = frameHeader.Name;
            Channels          = aacFrameHeader.ChannelConfig;
            SamplingFrequency = frameHeader.SamplingFrequency;
            SetConfigured();
        }
Exemplo n.º 3
0
        public static byte[] DefaultAudioSpecificConfigFactory(AacFrameHeader aacFrameHeader)
        {
            int num = aacFrameHeader.Profile + 1;

            if (1 == num && AacAudioSpecificConfig.RemapObjectType1.HasValue)
            {
                num = AacAudioSpecificConfig.RemapObjectType1.Value;
                Debug.WriteLine("AacConfigurator.AudioSpecificConfig: Changing AAC object type from 1 to {0}.", (object)num);
            }
            return(new byte[2]
            {
                (byte)(num << 3 | aacFrameHeader.FrequencyIndex >> 1 & 7),
                (byte)(aacFrameHeader.FrequencyIndex << 7 | (int)aacFrameHeader.ChannelConfig << 3)
            });
        }