An experimental gif encoder for Windows 10.

Overview

giffun

An experimental gif encoder for Windows 10.

recording

Resources

Based on "Techniques for GPU-based Color Quantization" (2019) by Matthias Trapp, Sebastian Pasewaldt, and Jürgen Döllner.

Comments
  • Frame diffing

    Frame diffing

    Currently an entire frame is submitted each time, which still results in fairly chunky gifs. One solution could be to use a compute shader to determine a naive single update region.

    enhancement 
    opened by robmikh 2
  • Support window and full-display capture

    Support window and full-display capture

    A couple things have to happen to support this:

    • [x] Ensure image size is even
    • [x] Copy only what's within the content size for each Direct3D11CaptureFrame
    • [x] CLI to specify which window/display to capture
    enhancement 
    opened by robmikh 1
  • Artifacts on window resize

    Artifacts on window resize

    Resizing a window when recording will result in artifacts: recording

    We could fix this with an intermediate texture that is cleared before copying the content size of the Direct3D11CaptureFrame to the texture. Both the quantizer and the differ would run off of this new intermediate texture.

    bug 
    opened by robmikh 0
  • Pauses at the end of gifs don't get recorded

    Pauses at the end of gifs don't get recorded

    Because of the differ, we never end up recording the last frame of a gif if it contains a pause at the end. When the recording ends, we need to submit the last frame again with the last candidate frame's timestamp.

    bug 
    opened by robmikh 0
  • Eliminate wasteful copy

    Eliminate wasteful copy

    Currently we copy the entire frame and then run the differ, and then make another copy of only the changed contents. Theoretically, we could run both the quantizer and the differ and only copy out the parts that have changed.

    enhancement 
    opened by robmikh 0
  • ARM64 encoding issues

    ARM64 encoding issues

    The encoder behaves strangely on ARM64 devices (tested with a first gen Surface Pro X): recording

    Ignoring the strange colors in the initial frame (which would be fixed by a better default palette #4), subsequent frames are encoded as mostly white for some reason. I'm not sure if this is a bug in giffun or in the Qualcomm GPU driver...

    This is where I really wish PIX would be able to resolve the shader symbols ☹️

    bug 
    opened by robmikh 1
  • Better error messages for unsupported hardware or Windows version

    Better error messages for unsupported hardware or Windows version

    This project uses newer D3D11 features, we should detect unsupported hardware and provide an error message. Same for older versions of Windows that don't support all the Windows.Graphics.Capture features required.

    enhancement 
    opened by robmikh 0
Releases(v0.1.0-alpha)
Owner
Robert Mikhayelyan
Developer on the Windows Composition team. Loves all things Rust, C++, DirectX, C#, XAML, and of course, Composition.
Robert Mikhayelyan
A Rust encoder/decoder for Dominic Szablewski's QOI format for fast, lossless image compression.

QOI - The “Quite OK Image” format This is a Rust encoder and decoder for Dominic Szablewski's QOI format for fast, lossless image compression. See the

Chevy Ray Johnston 62 Nov 29, 2022
mico (minimalistic config file format) encoder and decoder

mico This library implements a parser and emitter for mico (minimalistic config file format). Format example: Name: mico Description: minimalistic con

null 1 Jan 30, 2022
Fast encoder/decoder for the lossless DTM 16 bit image format

DTM Image Format Fast encoder/decoder for the DTM image format. The DTM image format is a 16-bit lossless image format supporting one to four channels

Kurt Kühnert 4 Oct 15, 2022
Experimental vectorized-raster image editor

Sverg Sverg is an experimental image editor that leverages the power of modern hardware so that you can create images as if they were raster images (e

sdfgeoff 3 Jan 25, 2022
Screen-capturer: A cross-platform screenshots library for MacOS、Windows、Linux(X11).

Screen-capturer: A cross-platform screenshots library for MacOS、Windows、Linux(X11).

nashaofu 49 Dec 12, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
Get the first frame of a Gif image.

Gif First Frame Use wasm to capture the first frame of a Gif image.

lijialiang 3 Apr 8, 2022
A no_std GIF library for embedded applications(embedded-graphics)

tinygif A tiny gif decoder written in no_std Rust. This crate requires about 20kB of memory to decode a gif. basic decoding frame iterator interlace s

Andelf 12 Jun 15, 2023
Use Git installed in Bash on Windows/Windows Subsystem for Linux (WSL) from Windows and Visual Studio Code (VSCode)

WSLGit This project provides a small executable that forwards all arguments to git running inside Bash on Windows/Windows Subsystem for Linux (WSL). T

A. R. S. 1.1k Jan 3, 2023
The fastest and safest AV1 encoder.

rav1e The fastest and safest AV1 encoder. Table of Content Overview Features Documentation Releases Building Dependency: NASM Release binary Unstable

Xiph.Org Foundation 3k Jan 3, 2023
A binary encoder / decoder implementation in Rust.

Bincode A compact encoder / decoder pair that uses a binary zero-fluff encoding scheme. The size of the encoded object will be the same or smaller tha

Bincode 1.9k Jan 2, 2023
A DHCP parser and encoder for DHCPv4/DHCPv6

dhcproto A DHCP parser and encoder for DHCPv4/DHCPv6. dhcproto aims to be a functionally complete DHCP implementation. Many common option types are im

BlueCat Engineering 80 Dec 11, 2022
A Rust encoder/decoder for Dominic Szablewski's QOI format for fast, lossless image compression.

QOI - The “Quite OK Image” format This is a Rust encoder and decoder for Dominic Szablewski's QOI format for fast, lossless image compression. See the

Chevy Ray Johnston 62 Nov 29, 2022
mico (minimalistic config file format) encoder and decoder

mico This library implements a parser and emitter for mico (minimalistic config file format). Format example: Name: mico Description: minimalistic con

null 1 Jan 30, 2022
A binary encoder / decoder implementation in Rust.

Bincode A compact encoder / decoder pair that uses a binary zero-fluff encoding scheme. The size of the encoded object will be the same or smaller tha

Bincode 1.9k Dec 29, 2022
A basic rust QOI decoder/encoder

libqoi A basic rust QOI decoder/encoder. Why QOI QOI is a lossless image format with a one page specification. It can achieve better compression than

null 2 May 21, 2022
Entropy Encoding notebook. Simple implementations of the "tANS" encoder/decoder.

EntropyEncoding Experiments This repository contains my Entropy Encoding notebook. Entropy encoding is an efficient lossless data compression scheme.

Nadav Rotem 4 Dec 21, 2022
Fast encoder/decoder for the lossless DTM 16 bit image format

DTM Image Format Fast encoder/decoder for the DTM image format. The DTM image format is a 16-bit lossless image format supporting one to four channels

Kurt Kühnert 4 Oct 15, 2022
banzai: pure rust bzip2 encoder

banzai banzai is a bzip2 encoder with linear-time complexity, written entirely in safe Rust. It is currently alpha software, which means that it is no

Jack Byrne 27 Oct 24, 2022
Free Rust-only Xbox ADPCM encoder and decoder

XbadPCM Safe (and optionally no-std) Rust crate for encoding and decoding Xbox ADPCM blocks. Decoding example Here is example code for decoding stereo

Snowy 5 Nov 20, 2022