Exemple #1
0
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                resampler?.Dispose();
                resampler = null;
            }

            base.Dispose(disposing);
        }
Exemple #2
0
        private void Init(VideoEncoderParameters encoderParams)
        {
            var pixelFormats = GetSupportedPixelFormats(codec);

            if (pixelFormats != null && !pixelFormats.Contains(InFormat.PixelFormat))
            {
                outFormat = new VideoFormat(InFormat.Width, InFormat.Height, pixelFormats[0]);
                resampler = new VideoResampler(InFormat, OutFormat, encoderParams.ResampleFlags);
                tempFrame = new VideoFrame();
            }
            else
            {
                outFormat = InFormat;
            }

            framePerSecond = encoderParams.FrameRate;

            try {
                codecContext->PixFmt    = OutFormat.PixelFormat;
                codecContext->Width     = OutFormat.Width;
                codecContext->Height    = OutFormat.Height;
                codecContext->BitRate   = encoderParams.BitRate.Value;
                codecContext->TimeBase  = encoderParams.FrameRate.Reciprocal;
                codecContext->Framerate = encoderParams.FrameRate;
                if (encoderParams.GopSize != 0)
                {
                    codecContext->GopSize = encoderParams.GopSize;
                }
                if (encoderParams.MaxBFrames != 0)
                {
                    codecContext->MaxBFrames = encoderParams.MaxBFrames;
                }
                if (encoderParams.MbDecision != 0)
                {
                    codecContext->MbDecision = encoderParams.MbDecision;
                }
                if (encoderParams.Qmin != 0)
                {
                    codecContext->Qmin = encoderParams.Qmin;
                }
                if (encoderParams.Qmax != 0)
                {
                    codecContext->Qmax = encoderParams.Qmax;
                }

                var result = FF.avcodec_open2(codecContext, codec, null);
                if (result < 0)
                {
                    throw new CSharp.FFmpegException(result);
                }
            } catch {
                Dispose();
                throw;
            }
        }