protected override RefCounted <IEncoderContext> CreateAndOpenContextRef(EncoderSetup setup) { lock (this) { var same = _versions.All(s => setup.EqualsExceptBitrate(s.ContextSetup)); bool replace = same && _versions.Count > 0; if (!replace) { DisposeVersions(); } else { foreach (var version in _versions) { version.Context.RemoveRef(); version.Context = null; } } var result = new RefCounted <IEncoderContext>(CreateAndOpenContext(setup)); if (replace) { foreach (var version in _versions) { version.Context = result.AddRef(); } } return(result); } }
public RefCounted <DirectXResource> Render(DirectXContext dx, VideoFilterChainDescriptor filterChain, DeviceContext ctx, RefCounted <DirectXResource> input) { var res = Render(dx, filterChain, ctx, input.Instance); if (ReferenceEquals(res, input.Instance)) { return(input.AddRef()); } else { return(new RefCounted <DirectXResource>(res)); } }