filters.h revision a2415724fb3466168b2af5b08bd94ba732c0e753
1// Copyright 2011 Google Inc. All Rights Reserved.
2//
3// This code is licensed under the same terms as WebM:
4//  Software License Agreement:  http://www.webmproject.org/license/software/
5//  Additional IP Rights Grant:  http://www.webmproject.org/license/additional/
6// -----------------------------------------------------------------------------
7//
8// Spatial prediction using various filters
9//
10// Author: Urvang (urvang@google.com)
11
12#ifndef WEBP_UTILS_FILTERS_H_
13#define WEBP_UTILS_FILTERS_H_
14
15#include "webp/types.h"
16
17#if defined(__cplusplus) || defined(c_plusplus)
18extern "C" {
19#endif
20
21// Filters.
22typedef enum {
23  WEBP_FILTER_NONE = 0,
24  WEBP_FILTER_HORIZONTAL,
25  WEBP_FILTER_VERTICAL,
26  WEBP_FILTER_GRADIENT,
27  WEBP_FILTER_LAST = WEBP_FILTER_GRADIENT + 1,  // end marker
28  WEBP_FILTER_BEST,
29  WEBP_FILTER_FAST
30} WEBP_FILTER_TYPE;
31
32typedef void (*WebPFilterFunc)(const uint8_t* in, int width, int height,
33                               int bpp, int stride, uint8_t* out);
34
35// Filter the given data using the given predictor.
36// 'in' corresponds to a 2-dimensional pixel array of size (stride * height)
37// in raster order.
38// 'bpp' is number of bytes per pixel, and
39// 'stride' is number of bytes per scan line (with possible padding).
40// 'out' should be pre-allocated.
41extern const WebPFilterFunc WebPFilters[WEBP_FILTER_LAST];
42
43// Reconstruct the original data from the given filtered data.
44extern const WebPFilterFunc WebPUnfilters[WEBP_FILTER_LAST];
45
46// Fast estimate of a potentially good filter.
47extern WEBP_FILTER_TYPE EstimateBestFilter(const uint8_t* data,
48                                           int width, int height, int stride);
49
50#if defined(__cplusplus) || defined(c_plusplus)
51}    // extern "C"
52#endif
53
54#endif  /* WEBP_UTILS_FILTERS_H_ */
55