2021-12-01 07:13:34 +00:00
|
|
|
# Dithering with OpenCL
|
|
|
|
|
|
|
|
## Background
|
|
|
|
|
|
|
|
[Project Proposal PDF](https://seodisparate.com/static/uploads/EN605.617.81.FA21_ProjectProposal.pdf)
|
|
|
|
|
|
|
|
The proposal mentioned dithering live-input frames, but I ended up with just
|
|
|
|
dithering single images or turning a video into dithered images.
|
|
|
|
|
|
|
|
The "develop" branch may have more up to date code.
|
2021-12-01 07:16:33 +00:00
|
|
|
|
2021-12-01 08:33:28 +00:00
|
|
|
# Usage
|
|
|
|
|
|
|
|
A "blue-noise" image is integral to dithering images. A generated blue-noise
|
|
|
|
image is provided in the "res/" directory. Run the program with "--help" to get
|
|
|
|
info on how to use it.
|
|
|
|
|
2021-12-01 08:36:46 +00:00
|
|
|
PNG, PGM, and PPM image formats are supported.
|
|
|
|
|
|
|
|
For decoding video, any format that ffmpeg can read should work (though if
|
|
|
|
things don't work, try using MP4 files).
|
|
|
|
|
2021-12-03 11:15:02 +00:00
|
|
|
~~WARNING: Video decoding is still a WIP. The video is currently decoded, but an
|
2021-12-01 08:41:49 +00:00
|
|
|
output video being encoded hasn't been implemented yet. The current
|
2021-12-03 11:15:02 +00:00
|
|
|
implementation writes each video frame to a PNG image in the current
|
|
|
|
directory.~~
|
|
|
|
|
2021-12-05 11:15:10 +00:00
|
|
|
Video decoding and encoding is finished, ~~but there is some noticable drops in
|
|
|
|
quality when encoding to colored dithered video~~ but the resulting video may
|
|
|
|
end up being too large. It may be better to just output each frame to individual
|
|
|
|
PNGs, then combining them later just like as mentioned here with the params you
|
|
|
|
want set: https://trac.ffmpeg.org/wiki/Slideshow .
|
2021-12-01 08:41:49 +00:00
|
|
|
|
2021-12-01 07:16:33 +00:00
|
|
|
# Other Notes
|
|
|
|
|
2021-12-01 07:50:11 +00:00
|
|
|
~~I plan on adding the MIT License to this project once the course (that this
|
|
|
|
project was made for) is over.~~
|
|
|
|
|
|
|
|
I went ahead and applied the MIT License earlier than noted here.
|
2021-12-01 07:51:28 +00:00
|
|
|
|
2021-12-04 11:09:55 +00:00
|
|
|
## C++ Compatability
|
|
|
|
|
|
|
|
The source is written to work with C++11 but not any higher. The only
|
|
|
|
significant part that this affects are the functions in the "Image" class that
|
|
|
|
return an optional value (non-optional on success). Ideally, C++17's
|
|
|
|
std::optional would be used in that case, but since I am keeping things to work
|
|
|
|
up to C++11, std::unique\_ptr is used instead.
|
|
|
|
|
2021-12-01 07:51:28 +00:00
|
|
|
# Legal Stuff
|
|
|
|
|
|
|
|
[This program uses FFmpeg which is licensed under the LGPL 2.1 license](https://ffmpeg.org/legal.html)
|