tinyimg 1.0.0
Lightweight image manipulation library for Cloudflare Workers
Loading...
Searching...
No Matches
codec.h
Go to the documentation of this file.
1
12#pragma once
13
14#include <stddef.h>
15#include <stdint.h>
16
17#include "tinyimg/image.h"
18#include "tinyimg/tinyimg.h"
19#include "tinyimg/util.h"
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
36typedef int (*TinySniffFn)(const uint8_t* buffer, size_t size);
37
46typedef int (*TinyProbeFn)(
47 const uint8_t* buffer, size_t size, TinyImageInfo* info
48);
49
65typedef int (*TinyDecodeFn)(
66 TinyImage* image, const uint8_t* buffer, size_t size,
67 const TinyDecodeOpts* opts
68);
69
79typedef int (*TinyEncodeFn)(
80 const TinyImage* image, const TinyEncodeOpts* opts, TinyWriter* writer
81);
82
102
110
118const TinyCodec* tiny_codec_sniff(const uint8_t* buffer, size_t size);
119
125uint32_t tiny_codec_count(void);
126
133const TinyCodec* tiny_codec_at(uint32_t index);
134
135#pragma region shared helpers
136
154 const TinyDecodeOpts* opts, uint32_t width, uint32_t height,
155 TinyDecodeOpts* out, uint32_t* out_width, uint32_t* out_height
156);
157
171 uint8_t* dest, uint8_t dest_channels, const uint8_t* src,
172 uint8_t src_channels
173);
174
183static inline uint8_t tiny_luma(uint8_t r, uint8_t g, uint8_t b) {
184 // 13933 + 46871 + 4732 == 65536, so the sum cannot drift off 255
185 uint32_t sum = 13933u * r + 46871u * g + 4732u * b;
186 return (uint8_t) ((sum + 32768u) >> 16);
187}
188
189#pragma endregion
190
191#ifdef __cplusplus
192}
193#endif
const TinyCodec * tiny_codec_at(uint32_t index)
The registered codec at an index, for enumerating the build's support.
int(*) TinySniffFn(const uint8_t *buffer, size_t size)
Tests whether a buffer looks like this codec's format.
Definition codec.h:36
int tiny_decode_resolve(const TinyDecodeOpts *opts, uint32_t width, uint32_t height, TinyDecodeOpts *out, uint32_t *out_width, uint32_t *out_height)
Clamps decode options against an image's real dimensions.
int(*) TinyEncodeFn(const TinyImage *image, const TinyEncodeOpts *opts, TinyWriter *writer)
Encodes an image into a byte sink.
Definition codec.h:79
uint32_t tiny_codec_count(void)
How many codecs this build registered.
const TinyCodec * tiny_codec_find(TinyImageFormat format)
Finds the codec for a format.
int(*) TinyDecodeFn(TinyImage *image, const uint8_t *buffer, size_t size, const TinyDecodeOpts *opts)
Decodes pixels, honoring the region, scale and channel count asked for.
Definition codec.h:65
const TinyCodec * tiny_codec_sniff(const uint8_t *buffer, size_t size)
Finds the codec whose format a buffer's magic bytes match.
int(*) TinyProbeFn(const uint8_t *buffer, size_t size, TinyImageInfo *info)
Fills in what the header says, decoding no pixels.
Definition codec.h:46
void tiny_pixel_convert(uint8_t *dest, uint8_t dest_channels, const uint8_t *src, uint8_t src_channels)
Writes one source pixel into a destination row, converting channels.
Image processing library utilities.
TinyImageFormat
Image formats supported by TinyImage for conversion and saving.
Definition image.h:32
One container format's implementation.
Definition codec.h:90
TinySniffFn sniff
Definition codec.h:94
TinyProbeFn probe
Definition codec.h:96
TinyEncodeFn encode
Definition codec.h:100
TinyImageFormat format
Definition codec.h:92
TinyDecodeFn decode
Definition codec.h:98
Options a decoder honors when only part of an image is wanted.
Definition image.h:151
Options an encoder honors.
Definition image.h:224
What a format's header says about an image, before any pixel is decoded.
Definition image.h:119
Represents an image with its width, height, and pixel data.
Definition image.h:90
A grow on demand byte sink.
Definition util.h:389
Umbrella header, version and error codes.
Math shims, lookup table builders, checksums and bit level IO.