From 38a91e990b32d3957eb36728d12825d254bfb9d5 Mon Sep 17 00:00:00 2001 From: Urvang Joshi Date: Fri, 22 Feb 2013 14:16:48 -0800 Subject: [PATCH] Add example code snippet for demux API Change-Id: I4e9f32d030dd7f184e1cedf5b37f6f640ba4845e --- src/webp/demux.h | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/webp/demux.h b/src/webp/demux.h index c8e77a59..584402d3 100644 --- a/src/webp/demux.h +++ b/src/webp/demux.h @@ -8,7 +8,39 @@ // Demux API. // Enables extraction of image and extended format data from WebP files. -// TODO(urvang): Add an example code snippet (similar to mux.h). +// Code Example: Demuxing WebP data to extract all the frames, ICC profile +// and EXIF/XMP metadata. +// +// WebPDemuxer* demux = WebPDemux(&webp_data); +// +// uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH); +// uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT); +// // ... (Get information about the features present in the WebP file). +// uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS); +// +// // ... (Iterate over all frames). +// WebPIterator iter; +// if (WebPDemuxGetFrame(demux, 1, &iter)) { +// do { +// // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(), +// // ... and get other frame properties like width, height, offsets etc. +// // ... see 'struct WebPIterator' below for more info). +// } while (WebPDemuxNextFrame(&iter)); +// WebPDemuxReleaseIterator(&iter); +// } +// +// // ... (Extract metadata). +// WebPChunkIterator chunk_iter; +// if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter); +// // ... (Consume the ICC profile in 'chunk_iter.chunk'). +// WebPDemuxReleaseChunkIterator(&chunk_iter); +// if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter); +// // ... (Consume the EXIF metadata in 'chunk_iter.chunk'). +// WebPDemuxReleaseChunkIterator(&chunk_iter); +// if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter); +// // ... (Consume the XMP metadata in 'chunk_iter.chunk'). +// WebPDemuxReleaseChunkIterator(&chunk_iter); +// WebPDemuxDelete(demux); #ifndef WEBP_WEBP_DEMUX_H_ #define WEBP_WEBP_DEMUX_H_ @@ -120,7 +152,8 @@ WEBP_EXTERN(int) WebPDemuxPrevFrame(WebPIterator* iter); WEBP_EXTERN(int) WebPDemuxSelectFragment(WebPIterator* iter, int fragment_num); // Releases any memory associated with 'iter'. -// Must be called before destroying the associated WebPDemuxer with +// Must be called before any subsequent calls to WebPDemuxGetChunk() on the same +// iter. Also, must be called before destroying the associated WebPDemuxer with // WebPDemuxDelete(). WEBP_EXTERN(void) WebPDemuxReleaseIterator(WebPIterator* iter);