Ejemplo n.º 1
0
        internal DirectXResource Render(DirectXContext dx, VideoFilterChainDescriptor filterChain, DeviceContext ctx, DirectXResource texture)
        {
            DirectXResource current = texture;

            try
            {
                if (dx != _dx || !Equals(filterChain, _filterChain))
                {
                    TearDown();
                    _dx          = dx;
                    _filterChain = filterChain;
                    Setup(dx, filterChain);
                }

                foreach (var stage in _stages)
                {
                    var next = stage.Render(ctx, current);
                    if (current != next && current != texture)
                    {
                        dx.Pool.Back(current);
                    }
                    current = next;
                    dx.Flush(ctx, "Filter stage");
                }
            }
            catch (SharpDXException e)
            {
                _dx.Broken(e);
            }

            return(current);
        }
Ejemplo n.º 2
0
        public static FilterPixelFormat GetFilterPixelFormat(VideoFilterChainDescriptor chain)
        {
            if (chain == null || chain.Filters == null || chain.Filters.Length == 0)
            {
                return(FilterPixelFormat.NoFilter);
            }

            var last = chain.Filters[chain.Filters.Length - 1].Type;

            switch (last)
            {
            case VideoFilterType.Warm:
            case VideoFilterType.Cold:
            case VideoFilterType.Dark:
            case VideoFilterType.Light:
            case VideoFilterType.Vintage:
            case VideoFilterType.Sepia:
                return(FilterPixelFormat.Rgb);

            case VideoFilterType.Grayscale:
            case VideoFilterType.Contrast:
            case VideoFilterType.Brightness:
            case VideoFilterType.Saturation:
            case VideoFilterType.Gamma:
                return(FilterPixelFormat.Yuv);

            default:
                return(FilterPixelFormat.NoFilter);
            }
        }
Ejemplo n.º 3
0
 public static string GetFFMpegFilterString(VideoFilterChainDescriptor filterChain)
 {
     if (filterChain != null)
     {
         var res = string.Join(",", filterChain.Filters.Select(s => GetFFMpegFilterString(s)).Concat(new[] { GetEqFFMpegFilterString(filterChain.Filters) }).Where(s => s != null));
         if (!string.IsNullOrWhiteSpace(res))
         {
             return(res);
         }
     }
     return("null");
 }
Ejemplo n.º 4
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));
            }
        }
Ejemplo n.º 5
0
 private void Setup(DirectXContext dx, VideoFilterChainDescriptor filterChain)
 {
     if (filterChain != null)
     {
         foreach (var chain in filterChain.Filters)
         {
             var stage = Create(chain);
             if (stage != null)
             {
                 _stages.Add(stage);
             }
         }
     }
 }