~alinuxninja/nginx-edge/trunk

« back to all changes in this revision

Viewing changes to debian/modules/ngx_pagespeed/psol/include/third_party/libwebp/src/dec/vp8li.h

  • Committer: Vivian
  • Date: 2015-12-04 18:20:11 UTC
  • Revision ID: git-v1:a36f2bc32e884f7473b3a47040e5411306144d7d
* Do not extract psol.tar.gz

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
// Lossless decoder: internal header.
11
 
//
12
 
// Author: Skal (pascal.massimino@gmail.com)
13
 
//         Vikas Arora(vikaas.arora@gmail.com)
14
 
 
15
 
#ifndef WEBP_DEC_VP8LI_H_
16
 
#define WEBP_DEC_VP8LI_H_
17
 
 
18
 
#include <string.h>     // for memcpy()
19
 
#include "./webpi.h"
20
 
#include "../utils/bit_reader.h"
21
 
#include "../utils/color_cache.h"
22
 
#include "../utils/huffman.h"
23
 
 
24
 
#ifdef __cplusplus
25
 
extern "C" {
26
 
#endif
27
 
 
28
 
typedef enum {
29
 
  READ_DATA = 0,
30
 
  READ_HDR = 1,
31
 
  READ_DIM = 2
32
 
} VP8LDecodeState;
33
 
 
34
 
typedef struct VP8LTransform VP8LTransform;
35
 
struct VP8LTransform {
36
 
  VP8LImageTransformType type_;   // transform type.
37
 
  int                    bits_;   // subsampling bits defining transform window.
38
 
  int                    xsize_;  // transform window X index.
39
 
  int                    ysize_;  // transform window Y index.
40
 
  uint32_t              *data_;   // transform data.
41
 
};
42
 
 
43
 
typedef struct {
44
 
  int             color_cache_size_;
45
 
  VP8LColorCache  color_cache_;
46
 
 
47
 
  int             huffman_mask_;
48
 
  int             huffman_subsample_bits_;
49
 
  int             huffman_xsize_;
50
 
  uint32_t       *huffman_image_;
51
 
  int             num_htree_groups_;
52
 
  HTreeGroup     *htree_groups_;
53
 
} VP8LMetadata;
54
 
 
55
 
typedef struct VP8LDecoder VP8LDecoder;
56
 
struct VP8LDecoder {
57
 
  VP8StatusCode    status_;
58
 
  VP8LDecodeState  action_;
59
 
  VP8LDecodeState  state_;
60
 
  VP8Io           *io_;
61
 
 
62
 
  const WebPDecBuffer *output_;    // shortcut to io->opaque->output
63
 
 
64
 
  uint32_t        *pixels_;        // Internal data: either uint8_t* for alpha
65
 
                                   // or uint32_t* for BGRA.
66
 
  uint32_t        *argb_cache_;    // Scratch buffer for temporary BGRA storage.
67
 
 
68
 
  VP8LBitReader    br_;
69
 
 
70
 
  int              width_;
71
 
  int              height_;
72
 
  int              last_row_;      // last input row decoded so far.
73
 
  int              last_pixel_;    // last pixel decoded so far. However, it may
74
 
                                   // not be transformed, scaled and
75
 
                                   // color-converted yet.
76
 
  int              last_out_row_;  // last row output so far.
77
 
 
78
 
  VP8LMetadata     hdr_;
79
 
 
80
 
  int              next_transform_;
81
 
  VP8LTransform    transforms_[NUM_TRANSFORMS];
82
 
  // or'd bitset storing the transforms types.
83
 
  uint32_t         transforms_seen_;
84
 
 
85
 
  uint8_t         *rescaler_memory;  // Working memory for rescaling work.
86
 
  WebPRescaler    *rescaler;         // Common rescaler for all channels.
87
 
};
88
 
 
89
 
//------------------------------------------------------------------------------
90
 
// internal functions. Not public.
91
 
 
92
 
struct ALPHDecoder;  // Defined in dec/alphai.h.
93
 
 
94
 
// in vp8l.c
95
 
 
96
 
// Decodes image header for alpha data stored using lossless compression.
97
 
// Returns false in case of error.
98
 
int VP8LDecodeAlphaHeader(struct ALPHDecoder* const alph_dec,
99
 
                          const uint8_t* const data, size_t data_size,
100
 
                          uint8_t* const output);
101
 
 
102
 
// Decodes *at least* 'last_row' rows of alpha. If some of the initial rows are
103
 
// already decoded in previous call(s), it will resume decoding from where it
104
 
// was paused.
105
 
// Returns false in case of bitstream error.
106
 
int VP8LDecodeAlphaImageStream(struct ALPHDecoder* const alph_dec,
107
 
                               int last_row);
108
 
 
109
 
// Allocates and initialize a new lossless decoder instance.
110
 
VP8LDecoder* VP8LNew(void);
111
 
 
112
 
// Decodes the image header. Returns false in case of error.
113
 
int VP8LDecodeHeader(VP8LDecoder* const dec, VP8Io* const io);
114
 
 
115
 
// Decodes an image. It's required to decode the lossless header before calling
116
 
// this function. Returns false in case of error, with updated dec->status_.
117
 
int VP8LDecodeImage(VP8LDecoder* const dec);
118
 
 
119
 
// Resets the decoder in its initial state, reclaiming memory.
120
 
// Preserves the dec->status_ value.
121
 
void VP8LClear(VP8LDecoder* const dec);
122
 
 
123
 
// Clears and deallocate a lossless decoder instance.
124
 
void VP8LDelete(VP8LDecoder* const dec);
125
 
 
126
 
//------------------------------------------------------------------------------
127
 
 
128
 
#ifdef __cplusplus
129
 
}    // extern "C"
130
 
#endif
131
 
 
132
 
#endif  /* WEBP_DEC_VP8LI_H_ */