github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/webp/libwebp/examples/gif2webp_util.h (about) 1 // Copyright 2013 Google Inc. All Rights Reserved. 2 // 3 // Use of this source code is governed by a BSD-style license 4 // that can be found in the COPYING file in the root of the source 5 // tree. An additional intellectual property rights grant can be found 6 // in the file PATENTS. All contributing project authors may 7 // be found in the AUTHORS file in the root of the source tree. 8 // ----------------------------------------------------------------------------- 9 // 10 // Helper structs and methods for gif2webp tool. 11 // 12 // Author: Urvang (urvang@google.com) 13 14 #ifndef WEBP_EXAMPLES_GIF2WEBP_UTIL_H_ 15 #define WEBP_EXAMPLES_GIF2WEBP_UTIL_H_ 16 17 #include <stdlib.h> 18 19 #include "webp/mux.h" 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 //------------------------------------------------------------------------------ 26 // Helper utilities. 27 28 #define WEBP_UTIL_TRANSPARENT_COLOR 0x00ffffff 29 30 struct WebPPicture; 31 32 typedef struct { 33 int x_offset, y_offset, width, height; 34 } WebPFrameRect; 35 36 // Clear pixels in 'picture' within given 'rect' to transparent color. 37 void WebPUtilClearPic(struct WebPPicture* const picture, 38 const WebPFrameRect* const rect); 39 40 //------------------------------------------------------------------------------ 41 // Frame cache. 42 43 typedef struct WebPFrameCache WebPFrameCache; 44 45 // Given the minimum distance between key frames 'kmin' and maximum distance 46 // between key frames 'kmax', returns an appropriately allocated cache object. 47 // If 'allow_mixed' is true, the subsequent calls to WebPFrameCacheAddFrame() 48 // will heuristically pick lossy or lossless compression for each frame. 49 // Use WebPFrameCacheDelete() to deallocate the 'cache'. 50 WebPFrameCache* WebPFrameCacheNew(int width, int height, 51 size_t kmin, size_t kmax, int allow_mixed); 52 53 // Release all the frame data from 'cache' and free 'cache'. 54 void WebPFrameCacheDelete(WebPFrameCache* const cache); 55 56 // Given an image described by 'frame', 'info' and 'orig_rect', optimize it for 57 // WebP, encode it and add it to 'cache'. 58 // This takes care of frame disposal too, according to 'info->dispose_method'. 59 int WebPFrameCacheAddFrame(WebPFrameCache* const cache, 60 const WebPConfig* const config, 61 const WebPFrameRect* const orig_rect, 62 WebPPicture* const frame, 63 WebPMuxFrameInfo* const info); 64 65 // Flush the *ready* frames from cache and add them to 'mux'. If 'verbose' is 66 // true, prints the information about these frames. 67 WebPMuxError WebPFrameCacheFlush(WebPFrameCache* const cache, int verbose, 68 WebPMux* const mux); 69 70 // Similar to 'WebPFrameCacheFlushFrames()', but flushes *all* the frames. 71 WebPMuxError WebPFrameCacheFlushAll(WebPFrameCache* const cache, int verbose, 72 WebPMux* const mux); 73 74 //------------------------------------------------------------------------------ 75 76 #ifdef __cplusplus 77 } // extern "C" 78 #endif 79 80 #endif // WEBP_EXAMPLES_GIF2WEBP_UTIL_H_