diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2022-05-08 16:18:35 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2022-05-08 16:18:35 +0100 |
commit | 4f588e9400eb82efac9c8c9fa6844419c2caa101 (patch) | |
tree | 9f937fe000f6aac3798654e50bbe7fc96b9cc4de | |
parent | 5a1c0ed3ba4534957965839fda659482603117e2 (diff) | |
download | libnsgif-4f588e9400eb82efac9c8c9fa6844419c2caa101.tar.gz libnsgif-4f588e9400eb82efac9c8c9fa6844419c2caa101.tar.bz2 |
API: Add function to get a frame's local palette.
-rw-r--r-- | include/nsgif.h | 20 | ||||
-rw-r--r-- | src/gif.c | 25 |
2 files changed, 45 insertions, 0 deletions
diff --git a/include/nsgif.h b/include/nsgif.h index 9eec0f8..2251060 100644 --- a/include/nsgif.h +++ b/include/nsgif.h @@ -448,6 +448,26 @@ void nsgif_global_palette( size_t *entries); /** + * Get the local colour palette for a frame. + * + * Frames may have no local palette. In this case they use the global palette. + * This function returns false if the frame has no local palette. + * + * Colours in same pixel format as \ref nsgif_bitmap_t. + * + * \param[in] gif The \ref nsgif_t object. + * \param[in] frame The \ref frame to get the palette for. + * \param[out] table Client buffer to hold the colour table. + * \param[out] entries The number of used entries in the colour table. + * \return true if a palette is returned, false otherwise. + */ +bool nsgif_local_palette( + const nsgif_t *gif, + uint32_t frame, + uint32_t table[NSGIF_MAX_COLOURS], + size_t *entries); + +/** * Configure handling of small frame delays. * * Historically people created GIFs with a tiny frame delay, however the slow @@ -1951,6 +1951,31 @@ void nsgif_global_palette( } /* exported function documented in nsgif.h */ +bool nsgif_local_palette( + const nsgif_t *gif, + uint32_t frame, + uint32_t table[NSGIF_MAX_COLOURS], + size_t *entries) +{ + const nsgif_frame *f; + + if (frame >= gif->frame_count_partial) { + return false; + } + + f = &gif->frames[frame]; + if (f->info.colour_table == false) { + return false; + } + + *entries = 2 << (f->flags & NSGIF_COLOUR_TABLE_SIZE_MASK); + nsgif__colour_table_decode(table, &gif->colour_layout, + *entries, gif->buf + f->colour_table_offset); + + return true; +} + +/* exported function documented in nsgif.h */ const char *nsgif_strerror(nsgif_error err) { static const char *const str[] = { |