giffun
An experimental gif encoder for Windows 10.
Resources
Based on "Techniques for GPU-based Color Quantization" (2019) by Matthias Trapp, Sebastian Pasewaldt, and Jürgen Döllner.
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.
enhancementA couple things have to happen to support this:
Direct3D11CaptureFrame
Resizing a window when recording will result in artifacts:
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.
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.
bugCurrently 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.
enhancementThe encoder behaves strangely on ARM64 devices (tested with a first gen Surface Pro X):
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 ☹️
bugThis 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.
enhancementThis marks the first release of giffun.
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
mico This library implements a parser and emitter for mico (minimalistic config file format). Format example: Name: mico Description: minimalistic con
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
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
Screen-capturer: A cross-platform screenshots library for MacOS、Windows、Linux(X11).
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
Gif First Frame Use wasm to capture the first frame of a Gif image.
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
WSLGit This project provides a small executable that forwards all arguments to git running inside Bash on Windows/Windows Subsystem for Linux (WSL). T
rav1e The fastest and safest AV1 encoder. Table of Content Overview Features Documentation Releases Building Dependency: NASM Release binary Unstable
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
dhcproto A DHCP parser and encoder for DHCPv4/DHCPv6. dhcproto aims to be a functionally complete DHCP implementation. Many common option types are im
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
mico This library implements a parser and emitter for mico (minimalistic config file format). Format example: Name: mico Description: minimalistic con
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
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
EntropyEncoding Experiments This repository contains my Entropy Encoding notebook. Entropy encoding is an efficient lossless data compression scheme.
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
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
XbadPCM Safe (and optionally no-std) Rust crate for encoding and decoding Xbox ADPCM blocks. Decoding example Here is example code for decoding stereo