Exemplo n.º 1
0
                #pragma warning restore 0169

        public void Configure(CaptureSettings settings, IntPtr window_handle)
        {
            IntPtr            err    = IntPtr.Zero;
            EncodingQuality   qual   = settings.EncodingSettings.EncodingQuality;
            Device            device = settings.Device;
            DeviceVideoFormat format = settings.Format;
            EncodingProfile   enc;
            VideoStandard     std;
            IntPtr            outFile, sourceElement, deviceID;

            enc = settings.EncodingSettings.EncodingProfile;
            std = settings.EncodingSettings.VideoStandard;

            outFile       = Marshaller.StringToPtrGStrdup(settings.EncodingSettings.OutputFile);
            sourceElement = Marshaller.StringToPtrGStrdup(device.SourceElement);
            deviceID      = Marshaller.StringToPtrGStrdup(device.ID);

            gst_camera_capturer_configure(Handle, outFile, (int)settings.Device.DeviceType,
                                          sourceElement, deviceID,
                                          format.width, format.height, format.fps_n, format.fps_d,
                                          (int)enc.VideoEncoder, (int)enc.AudioEncoder,
                                          (int)enc.Muxer, qual.VideoQuality,
                                          qual.AudioQuality,
                                          settings.EncodingSettings.EnableAudio,
                                          std.Width, std.Height, window_handle,
                                          out err);
            Marshaller.Free(outFile);
            Marshaller.Free(sourceElement);
            Marshaller.Free(deviceID);
            if (err != IntPtr.Zero)
            {
                throw new GLib.GException(err);
            }
        }
Exemplo n.º 2
0
 public ConfigState()
 {
     /* Set default values */
     fastTagging             = false;
     currentDatabase         = Constants.DEFAULT_DB_NAME;
     lang                    = null;
     autoSave                = false;
     captureVideoStandard    = VideoStandards.P480_16_9.Clone();
     captureEncodingProfile  = EncodingProfiles.MP4.Clone();
     captureEncodingQuality  = EncodingQualities.Medium.Clone();
     renderVideoStandard     = VideoStandards.P720_16_9.Clone();
     renderEncodingProfile   = EncodingProfiles.MP4.Clone();
     renderEncodingQuality   = EncodingQualities.High.Clone();
     overlayTitle            = true;
     enableAudio             = false;
     fps_n                   = 25;
     fps_d                   = 1;
     autorender              = false;
     autorenderDir           = null;
     lastRenderDir           = null;
     lastDir                 = null;
     reviewPlaysInSameWindow = true;
     defaultTemplate         = null;
     hotkeys                 = new Hotkeys();
     projectSortMethod       = ProjectSortMethod.Date;
     ignoreUpdaterVersion    = null;
 }
Exemplo n.º 3
0
        private Bc4Block EncodeBlock(RawBlock4X4Rgba32 block, EncodingQuality quality)
        {
            Bc4Block output = new Bc4Block();

            byte[] colors = new byte[16];
            var    pixels = block.AsSpan;

            for (int i = 0; i < 16; i++)
            {
                if (luminanceAsRed)
                {
                    colors[i] = (byte)(new ColorYCbCr(pixels[i]).y * 255);
                }
                else
                {
                    colors[i] = pixels[i].R;
                }
            }
            switch (quality)
            {
            case EncodingQuality.Fast:
                return(FindRedValues(output, colors, 3));

            case EncodingQuality.Balanced:
                return(FindRedValues(output, colors, 4));

            case EncodingQuality.BestQuality:
                return(FindRedValues(output, colors, 8));

            default:
                throw new ArgumentOutOfRangeException(nameof(quality), quality, null);
            }
        }
Exemplo n.º 4
0
        private static Bc7Block EncodeBlock(RawBlock4X4Rgba32 rawBlock, EncodingQuality quality)
        {
            switch (quality)
            {
            case EncodingQuality.Fast:
                return(Bc7EncoderFast.EncodeBlock(rawBlock));

            case EncodingQuality.Balanced:
                return(Bc7EncoderBalanced.EncodeBlock(rawBlock));

            case EncodingQuality.BestQuality:
                return(Bc7EncoderBestQuality.EncodeBlock(rawBlock));

            default:
                throw new ArgumentOutOfRangeException(nameof(quality), quality, null);
            }
        }
Exemplo n.º 5
0
        public static ListStore FillQuality(ComboBox qualityBox, EncodingQuality def)
        {
            ListStore qualityStore;
            int       index = 0, active = 0;

            qualityStore = new ListStore(typeof(string), typeof(EncodingQuality));
            foreach (EncodingQuality qual in EncodingQualities.All)
            {
                qualityStore.AppendValues(qual.Name, qual);
                if (qual.Equals(def))
                {
                    active = index;
                }
                index++;
            }
            qualityBox.Model  = qualityStore;
            qualityBox.Active = active;
            return(qualityStore);
        }
Exemplo n.º 6
0
 public ConfigState()
 {
     /* Set default values */
     fastTagging             = false;
     currentDatabase         = Constants.DEFAULT_DB_NAME;
     lang                    = null;
     autoSave                = false;
     captureVideoStandard    = VideoStandards.P480_16_9;
     captureEncodingProfile  = EncodingProfiles.MP4;
     captureEncodingQuality  = EncodingQualities.Medium;
     renderVideoStandard     = VideoStandards.P720_16_9;
     renderEncodingProfile   = EncodingProfiles.MP4;
     renderEncodingQuality   = EncodingQualities.High;
     overlayTitle            = true;
     enableAudio             = false;
     fps_n                   = 25;
     fps_d                   = 1;
     autorender              = false;
     autorenderDir           = null;
     reviewPlaysInSameWindow = true;
 }
Exemplo n.º 7
0
        public byte[] Encode(RawBlock4X4Rgba32[] blocks, int blockWidth, int blockHeight, EncodingQuality quality, bool parallel)
        {
            byte[]          outputData   = new byte[blockWidth * blockHeight * Marshal.SizeOf <Bc7Block>()];
            Span <Bc7Block> outputBlocks = MemoryMarshal.Cast <byte, Bc7Block>(outputData);


            if (parallel)
            {
                Parallel.For(0, blocks.Length, i =>
                {
                    Span <Bc7Block> outputBlocks = MemoryMarshal.Cast <byte, Bc7Block>(outputData);
                    outputBlocks[i] = EncodeBlock(blocks[i], quality);
                });
            }
            else
            {
                for (int i = 0; i < blocks.Length; i++)
                {
                    outputBlocks[i] = EncodeBlock(blocks[i], quality);
                }
            }


            return(outputData);
        }
Exemplo n.º 8
0
        public static void ExecuteEncodingTest(Image <Rgba32> image, CompressionFormat format, EncodingQuality quality, string filename, ITestOutputHelper output)
        {
            BcEncoder encoder = new BcEncoder();

            encoder.OutputOptions.quality         = quality;
            encoder.OutputOptions.generateMipMaps = true;
            encoder.OutputOptions.format          = format;

            using FileStream fs = File.OpenWrite(filename);
            encoder.Encode(image, fs);
            fs.Close();
            var psnr = TestHelper.DecodeCheckPSNR(filename, image);

            output.WriteLine("RGBA PSNR: " + psnr + "db");
            if (quality == EncodingQuality.Fast)
            {
                Assert.True(psnr > 25);
            }
            else
            {
                Assert.True(psnr > 30);
            }
        }
Exemplo n.º 9
0
        private Bc5Block EncodeBlock(RawBlock4X4Rgba32 block, EncodingQuality quality)
        {
            Bc5Block output = new Bc5Block();

            byte[] reds   = new byte[16];
            byte[] greens = new byte[16];
            var    pixels = block.AsSpan;

            for (int i = 0; i < 16; i++)
            {
                reds[i]   = pixels[i].R;
                greens[i] = pixels[i].G;
            }

            int variations     = 0;
            int errorThreshold = 0;

            switch (quality)
            {
            case EncodingQuality.Fast:
                variations     = 3;
                errorThreshold = 5;
                break;

            case EncodingQuality.Balanced:
                variations     = 5;
                errorThreshold = 1;
                break;

            case EncodingQuality.BestQuality:
                variations     = 8;
                errorThreshold = 0;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(quality), quality, null);
            }


            output = FindValues(output, reds, variations, errorThreshold,
                                (block, i, idx) => {
                block.SetRedIndex(i, idx);
                return(block);
            },
                                (block, col) => {
                block.Red0 = col;
                return(block);
            },
                                (block, col) => {
                block.Red1 = col;
                return(block);
            },
                                (block) => {
                return(block.Red0);
            },
                                (block) => {
                return(block.Red1);
            }
                                );
            output = FindValues(output, greens, variations, errorThreshold,
                                (block, i, idx) => {
                block.SetGreenIndex(i, idx);
                return(block);
            },
                                (block, col) => {
                block.Green0 = col;
                return(block);
            },
                                (block, col) => {
                block.Green1 = col;
                return(block);
            },
                                (block) => {
                return(block.Green0);
            },
                                (block) => {
                return(block.Green1);
            });
            return(output);
        }