~paparazzi-uav/paparazzi/v5.0-manual

« back to all changes in this revision

Viewing changes to sw/ext/opencv_bebop/opencv/3rdparty/libwebp/enc/config.c

  • Committer: Paparazzi buildbot
  • Date: 2016-05-18 15:00:29 UTC
  • Revision ID: felix.ruess+docbot@gmail.com-20160518150029-e8lgzi5kvb4p7un9
Manual import commit 4b8bbb730080dac23cf816b98908dacfabe2a8ec from v5.0 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2011 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
// Coding tools configuration
 
11
//
 
12
// Author: Skal (pascal.massimino@gmail.com)
 
13
 
 
14
#include "../webp/encode.h"
 
15
 
 
16
#if defined(__cplusplus) || defined(c_plusplus)
 
17
extern "C" {
 
18
#endif
 
19
 
 
20
//------------------------------------------------------------------------------
 
21
// WebPConfig
 
22
//------------------------------------------------------------------------------
 
23
 
 
24
int WebPConfigInitInternal(WebPConfig* config,
 
25
                           WebPPreset preset, float quality, int version) {
 
26
  if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_ENCODER_ABI_VERSION)) {
 
27
    return 0;   // caller/system version mismatch!
 
28
  }
 
29
  if (config == NULL) return 0;
 
30
 
 
31
  config->quality = quality;
 
32
  config->target_size = 0;
 
33
  config->target_PSNR = 0.;
 
34
  config->method = 4;
 
35
  config->sns_strength = 50;
 
36
  config->filter_strength = 60;   // rather high filtering, helps w/ gradients.
 
37
  config->filter_sharpness = 0;
 
38
  config->filter_type = 1;        // default: strong (so U/V is filtered too)
 
39
  config->partitions = 0;
 
40
  config->segments = 4;
 
41
  config->pass = 1;
 
42
  config->show_compressed = 0;
 
43
  config->preprocessing = 0;
 
44
  config->autofilter = 0;
 
45
  config->partition_limit = 0;
 
46
  config->alpha_compression = 1;
 
47
  config->alpha_filtering = 1;
 
48
  config->alpha_quality = 100;
 
49
  config->lossless = 0;
 
50
  config->image_hint = WEBP_HINT_DEFAULT;
 
51
  config->emulate_jpeg_size = 0;
 
52
  config->thread_level = 0;
 
53
  config->low_memory = 0;
 
54
 
 
55
  // TODO(skal): tune.
 
56
  switch (preset) {
 
57
    case WEBP_PRESET_PICTURE:
 
58
      config->sns_strength = 80;
 
59
      config->filter_sharpness = 4;
 
60
      config->filter_strength = 35;
 
61
      break;
 
62
    case WEBP_PRESET_PHOTO:
 
63
      config->sns_strength = 80;
 
64
      config->filter_sharpness = 3;
 
65
      config->filter_strength = 30;
 
66
      break;
 
67
    case WEBP_PRESET_DRAWING:
 
68
      config->sns_strength = 25;
 
69
      config->filter_sharpness = 6;
 
70
      config->filter_strength = 10;
 
71
      break;
 
72
    case WEBP_PRESET_ICON:
 
73
      config->sns_strength = 0;
 
74
      config->filter_strength = 0;   // disable filtering to retain sharpness
 
75
      break;
 
76
    case WEBP_PRESET_TEXT:
 
77
      config->sns_strength = 0;
 
78
      config->filter_strength = 0;   // disable filtering to retain sharpness
 
79
      config->segments = 2;
 
80
      break;
 
81
    case WEBP_PRESET_DEFAULT:
 
82
    default:
 
83
      break;
 
84
  }
 
85
  return WebPValidateConfig(config);
 
86
}
 
87
 
 
88
int WebPValidateConfig(const WebPConfig* config) {
 
89
  if (config == NULL) return 0;
 
90
  if (config->quality < 0 || config->quality > 100)
 
91
    return 0;
 
92
  if (config->target_size < 0)
 
93
    return 0;
 
94
  if (config->target_PSNR < 0)
 
95
    return 0;
 
96
  if (config->method < 0 || config->method > 6)
 
97
    return 0;
 
98
  if (config->segments < 1 || config->segments > 4)
 
99
    return 0;
 
100
  if (config->sns_strength < 0 || config->sns_strength > 100)
 
101
    return 0;
 
102
  if (config->filter_strength < 0 || config->filter_strength > 100)
 
103
    return 0;
 
104
  if (config->filter_sharpness < 0 || config->filter_sharpness > 7)
 
105
    return 0;
 
106
  if (config->filter_type < 0 || config->filter_type > 1)
 
107
    return 0;
 
108
  if (config->autofilter < 0 || config->autofilter > 1)
 
109
    return 0;
 
110
  if (config->pass < 1 || config->pass > 10)
 
111
    return 0;
 
112
  if (config->show_compressed < 0 || config->show_compressed > 1)
 
113
    return 0;
 
114
  if (config->preprocessing < 0 || config->preprocessing > 1)
 
115
    return 0;
 
116
  if (config->partitions < 0 || config->partitions > 3)
 
117
    return 0;
 
118
  if (config->partition_limit < 0 || config->partition_limit > 100)
 
119
    return 0;
 
120
  if (config->alpha_compression < 0)
 
121
    return 0;
 
122
  if (config->alpha_filtering < 0)
 
123
    return 0;
 
124
  if (config->alpha_quality < 0 || config->alpha_quality > 100)
 
125
    return 0;
 
126
  if (config->lossless < 0 || config->lossless > 1)
 
127
    return 0;
 
128
  if (config->image_hint >= WEBP_HINT_LAST)
 
129
    return 0;
 
130
  if (config->emulate_jpeg_size < 0 || config->emulate_jpeg_size > 1)
 
131
    return 0;
 
132
  if (config->thread_level < 0 || config->thread_level > 1)
 
133
    return 0;
 
134
  if (config->low_memory < 0 || config->low_memory > 1)
 
135
    return 0;
 
136
  return 1;
 
137
}
 
138
 
 
139
//------------------------------------------------------------------------------
 
140
 
 
141
#if defined(__cplusplus) || defined(c_plusplus)
 
142
}    // extern "C"
 
143
#endif