private void EncodeAndWritePacket()
        {
            byte[] frameBuffer = new byte[FrameSize];
            m_buffer.Read(frameBuffer, 0, frameBuffer.Length);

            fixed(byte *pcmSamples = frameBuffer)
            {
                if (m_disposed)
                {
                    throw new ObjectDisposedException(this.ToString());
                }

                AVPacket outPacket = new AVPacket();

                FFmpeg.av_init_packet(ref outPacket);

                byte[] buffer = new byte[FFmpeg.FF_MIN_BUFFER_SIZE];
                fixed(byte *encodedData = buffer)
                {
                    try
                    {
                        outPacket.size         = FFmpeg.avcodec_encode_audio(ref m_avCodecCtx, encodedData, FFmpeg.FF_MIN_BUFFER_SIZE, (short *)pcmSamples);
                        outPacket.pts          = m_avCodecCtx.coded_frame->pts;
                        outPacket.flags       |= FFmpeg.PKT_FLAG_KEY;
                        outPacket.stream_index = m_avStream.index;
                        outPacket.data         = (IntPtr)encodedData;

                        if (outPacket.size > 0)
                        {
                            if (FFmpeg.av_write_frame(ref m_avFormatCtx, ref outPacket) != 0)
                            {
                                throw new IOException("Error while writing encoded audio frame to file");
                            }
                        }
                    }
                    finally
                    {
                        FFmpeg.av_free_packet(ref outPacket);
                    }
                }
            }
        }