1// Copyright 2011 Google Inc. 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// Coding tools configuration 9// 10// Author: Skal (pascal.massimino@gmail.com) 11 12#include <assert.h> 13#include "webp/encode.h" 14 15//----------------------------------------------------------------------------- 16// WebPConfig 17//----------------------------------------------------------------------------- 18 19int WebPConfigInitInternal(WebPConfig* const config, 20 WebPPreset preset, float quality, int version) { 21 if (version != WEBP_ENCODER_ABI_VERSION) { 22 return 0; // caller/system version mismatch! 23 } 24 if (config == NULL) return 0; 25 26 config->quality = quality; 27 config->target_size = 0; 28 config->target_PSNR = 0.; 29 config->method = 4; 30 config->sns_strength = 50; 31 config->filter_strength = 20; // default: light filtering 32 config->filter_sharpness = 0; 33 config->filter_type = 0; // default: simple 34 config->partitions = 0; 35 config->segments = 4; 36 config->pass = 1; 37 config->show_compressed = 0; 38 config->preprocessing = 0; 39 config->autofilter = 0; 40 41 // TODO(skal): tune. 42 switch (preset) { 43 case WEBP_PRESET_PICTURE: 44 config->sns_strength = 80; 45 config->filter_sharpness = 4; 46 config->filter_strength = 35; 47 break; 48 case WEBP_PRESET_PHOTO: 49 config->sns_strength = 80; 50 config->filter_sharpness = 3; 51 config->filter_strength = 30; 52 break; 53 case WEBP_PRESET_DRAWING: 54 config->sns_strength = 25; 55 config->filter_sharpness = 6; 56 config->filter_strength = 10; 57 break; 58 case WEBP_PRESET_ICON: 59 config->sns_strength = 0; 60 config->filter_strength = 0; // disable filtering to retain sharpness 61 break; 62 case WEBP_PRESET_TEXT: 63 config->sns_strength = 0; 64 config->filter_strength = 0; // disable filtering to retain sharpness 65 config->segments = 2; 66 break; 67 case WEBP_PRESET_DEFAULT: 68 default: 69 break; 70 } 71 return WebPValidateConfig(config); 72} 73 74int WebPValidateConfig(const WebPConfig* const config) { 75 if (config == NULL) return 0; 76 if (config->quality < 0 || config->quality > 100) 77 return 0; 78 if (config->target_size < 0) 79 return 0; 80 if (config->target_PSNR < 0) 81 return 0; 82 if (config->method < 0 || config->method > 6) 83 return 0; 84 if (config->segments < 1 || config->segments > 4) 85 return 0; 86 if (config->sns_strength < 0 || config->sns_strength > 100) 87 return 0; 88 if (config->filter_strength < 0 || config->filter_strength > 100) 89 return 0; 90 if (config->filter_sharpness < 0 || config->filter_sharpness > 7) 91 return 0; 92 if (config->filter_type < 0 || config->filter_type > 1) 93 return 0; 94 if (config->autofilter < 0 || config->autofilter > 1) 95 return 0; 96 if (config->pass < 1 || config->pass > 10) 97 return 0; 98 if (config->show_compressed < 0 || config->show_compressed > 1) 99 return 0; 100 if (config->preprocessing < 0 || config->preprocessing > 1) 101 return 0; 102 if (config->partitions < 0 || config->partitions > 3) 103 return 0; 104 return 1; 105} 106 107//----------------------------------------------------------------------------- 108