예제 #1
0
        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);
            }
        }
예제 #2
0
        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));
            }
        }