Пример #1
0
            public PlanarPipelineContext(PixelSource sourceY, PixelSource sourceCb, PixelSource sourceCr)
            {
                if (sourceY.Format.FormatGuid != Consts.GUID_WICPixelFormat8bppY)
                {
                    throw new ArgumentException("Invalid pixel format", nameof(sourceY));
                }
                if (sourceCb.Format.FormatGuid != Consts.GUID_WICPixelFormat8bppCb)
                {
                    throw new ArgumentException("Invalid pixel format", nameof(sourceCb));
                }
                if (sourceCr.Format.FormatGuid != Consts.GUID_WICPixelFormat8bppCr)
                {
                    throw new ArgumentException("Invalid pixel format", nameof(sourceCr));
                }

                SourceY  = sourceY;
                SourceCb = sourceCb;
                SourceCr = sourceCr;

                ChromaSubsampling =
                    sourceCb.Width < sourceY.Width && sourceCb.Height < sourceY.Height ? ChromaSubsampleMode.Subsample420 :
                    sourceCb.Width < sourceY.Width ? ChromaSubsampleMode.Subsample422 :
                    sourceCb.Height < sourceY.Height ? ChromaSubsampleMode.Subsample440 :
                    ChromaSubsampleMode.Subsample444;
            }
Пример #2
0
        public static void AddPlanarHighQualityScaler(PipelineContext ctx, ChromaSubsampleMode subsample)
        {
            Debug.Assert(ctx.PlanarContext is not null);

            AddHighQualityScaler(ctx);
            ctx.PlanarContext.SourceY = ctx.Source;
            ctx.Source = ctx.PlanarContext.SourceCb;

            if (subsample.IsSubsampledX())
            {
                ctx.Settings.InnerSize.Width = MathUtil.DivCeiling(ctx.Settings.InnerSize.Width, 2);
            }
            if (subsample.IsSubsampledY())
            {
                ctx.Settings.InnerSize.Height = MathUtil.DivCeiling(ctx.Settings.InnerSize.Height, 2);
            }

            AddHighQualityScaler(ctx);
            ctx.PlanarContext.SourceCb = ctx.Source;
            ctx.Source = ctx.PlanarContext.SourceCr;

            AddHighQualityScaler(ctx);
            ctx.PlanarContext.SourceCr = ctx.Source;
            ctx.Source = ctx.PlanarContext.SourceY;
        }
Пример #3
0
 public static bool IsSubsampledY(this ChromaSubsampleMode o) => IsSubsampledY((WICJpegYCrCbSubsamplingOption)o);
Пример #4
0
 public static bool IsSubsampledY(this ChromaSubsampleMode o) => o == ChromaSubsampleMode.Subsample420 || o == ChromaSubsampleMode.Subsample440;