Beispiel #1
0
        public void StoreFrameFromDecoder(AudioDecoder decoder, Resampler resampler = null)
        {
            AVFrame *         inputFrame      = null;
            AudioSampleBuffer buffer          = null;
            AudioSampleBuffer resampledBuffer = null;

            try
            {
                Util.InitInputFrame(&inputFrame);
                if (decoder.GetNextAudioFrame(inputFrame))
                {
                    buffer = new AudioSampleBuffer(inputFrame);
                    if (resampler != null)
                    {
                        resampler.Resample(buffer, out resampledBuffer, inputFrame->nb_samples);
                        AddSamples(resampledBuffer, inputFrame->nb_samples);
                    }
                    else
                    {
                        AddSamples(buffer, inputFrame->nb_samples);
                    }
                }
            }
            finally
            {
                if (buffer != null)
                {
                    buffer.Dispose();
                }
                if (resampledBuffer != null)
                {
                    resampledBuffer.Dispose();
                }
                ffmpeg.av_frame_free(&inputFrame);
            }
        }