1 | // Copyright 2012 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 | // Data-types common to the mux and demux libraries. |
11 | // |
12 | // Author: Urvang (urvang@google.com) |
13 | |
14 | #ifndef WEBP_WEBP_MUX_TYPES_H_ |
15 | #define WEBP_WEBP_MUX_TYPES_H_ |
16 | |
17 | #include <string.h> // memset() |
18 | #include "./types.h" |
19 | |
20 | #ifdef __cplusplus |
21 | extern "C" { |
22 | #endif |
23 | |
24 | // Note: forward declaring enumerations is not allowed in (strict) C and C++, |
25 | // the types are left here for reference. |
26 | // typedef enum WebPFeatureFlags WebPFeatureFlags; |
27 | // typedef enum WebPMuxAnimDispose WebPMuxAnimDispose; |
28 | // typedef enum WebPMuxAnimBlend WebPMuxAnimBlend; |
29 | typedef struct WebPData WebPData; |
30 | |
31 | // VP8X Feature Flags. |
32 | typedef enum WebPFeatureFlags { |
33 | ANIMATION_FLAG = 0x00000002, |
34 | XMP_FLAG = 0x00000004, |
35 | EXIF_FLAG = 0x00000008, |
36 | ALPHA_FLAG = 0x00000010, |
37 | ICCP_FLAG = 0x00000020, |
38 | |
39 | ALL_VALID_FLAGS = 0x0000003e |
40 | } WebPFeatureFlags; |
41 | |
42 | // Dispose method (animation only). Indicates how the area used by the current |
43 | // frame is to be treated before rendering the next frame on the canvas. |
44 | typedef enum WebPMuxAnimDispose { |
45 | WEBP_MUX_DISPOSE_NONE, // Do not dispose. |
46 | WEBP_MUX_DISPOSE_BACKGROUND // Dispose to background color. |
47 | } WebPMuxAnimDispose; |
48 | |
49 | // Blend operation (animation only). Indicates how transparent pixels of the |
50 | // current frame are blended with those of the previous canvas. |
51 | typedef enum WebPMuxAnimBlend { |
52 | WEBP_MUX_BLEND, // Blend. |
53 | WEBP_MUX_NO_BLEND // Do not blend. |
54 | } WebPMuxAnimBlend; |
55 | |
56 | // Data type used to describe 'raw' data, e.g., chunk data |
57 | // (ICC profile, metadata) and WebP compressed image data. |
58 | // 'bytes' memory must be allocated using WebPMalloc() and such. |
59 | struct WebPData { |
60 | const uint8_t* bytes; |
61 | size_t size; |
62 | }; |
63 | |
64 | // Initializes the contents of the 'webp_data' object with default values. |
65 | static WEBP_INLINE void WebPDataInit(WebPData* webp_data) { |
66 | if (webp_data != NULL) { |
67 | memset(webp_data, 0, sizeof(*webp_data)); |
68 | } |
69 | } |
70 | |
71 | // Clears the contents of the 'webp_data' object by calling WebPFree(). |
72 | // Does not deallocate the object itself. |
73 | static WEBP_INLINE void WebPDataClear(WebPData* webp_data) { |
74 | if (webp_data != NULL) { |
75 | WebPFree((void*)webp_data->bytes); |
76 | WebPDataInit(webp_data); |
77 | } |
78 | } |
79 | |
80 | // Allocates necessary storage for 'dst' and copies the contents of 'src'. |
81 | // Returns true on success. |
82 | static WEBP_INLINE int WebPDataCopy(const WebPData* src, WebPData* dst) { |
83 | if (src == NULL || dst == NULL) return 0; |
84 | WebPDataInit(dst); |
85 | if (src->bytes != NULL && src->size != 0) { |
86 | dst->bytes = (uint8_t*)WebPMalloc(src->size); |
87 | if (dst->bytes == NULL) return 0; |
88 | memcpy((void*)dst->bytes, src->bytes, src->size); |
89 | dst->size = src->size; |
90 | } |
91 | return 1; |
92 | } |
93 | |
94 | #ifdef __cplusplus |
95 | } // extern "C" |
96 | #endif |
97 | |
98 | #endif // WEBP_WEBP_MUX_TYPES_H_ |
99 | |