Subversion Repositories Games.Prince of Persia

Rev

Blame | Last modification | View Log | Download | RSS feed

  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 <stdlib.h>  // free()
  18. #include <string.h>  // memset()
  19. #include "./types.h"
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24.  
  25. // Note: forward declaring enumerations is not allowed in (strict) C and C++,
  26. // the types are left here for reference.
  27. // typedef enum WebPFeatureFlags WebPFeatureFlags;
  28. // typedef enum WebPMuxAnimDispose WebPMuxAnimDispose;
  29. // typedef enum WebPMuxAnimBlend WebPMuxAnimBlend;
  30. typedef struct WebPData WebPData;
  31.  
  32. // VP8X Feature Flags.
  33. typedef enum WebPFeatureFlags {
  34.   ANIMATION_FLAG  = 0x00000002,
  35.   XMP_FLAG        = 0x00000004,
  36.   EXIF_FLAG       = 0x00000008,
  37.   ALPHA_FLAG      = 0x00000010,
  38.   ICCP_FLAG       = 0x00000020,
  39.  
  40.   ALL_VALID_FLAGS = 0x0000003e
  41. } WebPFeatureFlags;
  42.  
  43. // Dispose method (animation only). Indicates how the area used by the current
  44. // frame is to be treated before rendering the next frame on the canvas.
  45. typedef enum WebPMuxAnimDispose {
  46.   WEBP_MUX_DISPOSE_NONE,       // Do not dispose.
  47.   WEBP_MUX_DISPOSE_BACKGROUND  // Dispose to background color.
  48. } WebPMuxAnimDispose;
  49.  
  50. // Blend operation (animation only). Indicates how transparent pixels of the
  51. // current frame are blended with those of the previous canvas.
  52. typedef enum WebPMuxAnimBlend {
  53.   WEBP_MUX_BLEND,              // Blend.
  54.   WEBP_MUX_NO_BLEND            // Do not blend.
  55. } WebPMuxAnimBlend;
  56.  
  57. // Data type used to describe 'raw' data, e.g., chunk data
  58. // (ICC profile, metadata) and WebP compressed image data.
  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 free(). Does not
  72. // deallocate the object itself.
  73. static WEBP_INLINE void WebPDataClear(WebPData* webp_data) {
  74.   if (webp_data != NULL) {
  75.     free((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*)malloc(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.