protected override void Dispose(bool disposing) { if (disposing) { resampler?.Dispose(); resampler = null; } base.Dispose(disposing); }
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; } }