1a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// Copyright 2012 Google Inc. All Rights Reserved. 2a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// 30406ce1417f76f2034833414dcecc9f56253640cVikas Arora// Use of this source code is governed by a BSD-style license 40406ce1417f76f2034833414dcecc9f56253640cVikas Arora// that can be found in the COPYING file in the root of the source 50406ce1417f76f2034833414dcecc9f56253640cVikas Arora// tree. An additional intellectual property rights grant can be found 60406ce1417f76f2034833414dcecc9f56253640cVikas Arora// in the file PATENTS. All contributing project authors may 70406ce1417f76f2034833414dcecc9f56253640cVikas Arora// be found in the AUTHORS file in the root of the source tree. 8a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// ----------------------------------------------------------------------------- 9a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// 10a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// Lossless encoder: internal header. 11a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// 12a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// Author: Vikas Arora (vikaas.arora@gmail.com) 13a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 14a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#ifndef WEBP_ENC_VP8LI_H_ 15a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#define WEBP_ENC_VP8LI_H_ 16a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 17af51b94a435132e9014c324e25fb686b3d07a8c8Vikas Arora#include "./backward_references.h" 18a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#include "./histogram.h" 19a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#include "../utils/bit_writer.h" 20a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#include "webp/encode.h" 21a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#include "webp/format_constants.h" 22a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 238b720228d581a84fd173b6dcb2fa295b59db489aVikas Arora#ifdef __cplusplus 24a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Aroraextern "C" { 25a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#endif 26a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 27a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Aroratypedef struct { 28a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora const WebPConfig* config_; // user configuration and parameters 29a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora const WebPPicture* pic_; // input picture. 30a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 31a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora uint32_t* argb_; // Transformed argb image data. 32a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora uint32_t* argb_scratch_; // Scratch memory for argb rows 33a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora // (used for prediction). 34a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora uint32_t* transform_data_; // Scratch memory for transform data. 35a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora int current_width_; // Corresponds to packed image width. 36a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 37a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora // Encoding parameters derived from quality parameter. 38a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora int histo_bits_; 39a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora int transform_bits_; 40a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora int cache_bits_; // If equal to 0, don't use color cache. 41a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 42a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora // Encoding parameters derived from image characteristics. 43a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora int use_cross_color_; 44a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora int use_subtract_green_; 45a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora int use_predict_; 46a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora int use_palette_; 47a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora int palette_size_; 48a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora uint32_t palette_[MAX_PALETTE_SIZE]; 49af51b94a435132e9014c324e25fb686b3d07a8c8Vikas Arora 50af51b94a435132e9014c324e25fb686b3d07a8c8Vikas Arora // Some 'scratch' (potentially large) objects. 51af51b94a435132e9014c324e25fb686b3d07a8c8Vikas Arora struct VP8LBackwardRefs refs_[2]; // Backward Refs array corresponding to 52af51b94a435132e9014c324e25fb686b3d07a8c8Vikas Arora // LZ77 & RLE coding. 53af51b94a435132e9014c324e25fb686b3d07a8c8Vikas Arora VP8LHashChain hash_chain_; // HashChain data for constructing 54af51b94a435132e9014c324e25fb686b3d07a8c8Vikas Arora // backward references. 55a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora} VP8LEncoder; 56a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 57a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora//------------------------------------------------------------------------------ 58a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// internal functions. Not public. 59a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 60a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// Encodes the picture. 61a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// Returns 0 if config or picture is NULL or picture doesn't have valid argb 62a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// input. 63a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Aroraint VP8LEncodeImage(const WebPConfig* const config, 64a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora const WebPPicture* const picture); 65a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 66a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora// Encodes the main image stream using the supplied bit writer. 67a2415724fb3466168b2af5b08bd94ba732c0e753Vikas AroraWebPEncodingError VP8LEncodeStream(const WebPConfig* const config, 68a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora const WebPPicture* const picture, 69a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora VP8LBitWriter* const bw); 70a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 71a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora//------------------------------------------------------------------------------ 72a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 738b720228d581a84fd173b6dcb2fa295b59db489aVikas Arora#ifdef __cplusplus 74a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora} // extern "C" 75a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#endif 76a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora 77a2415724fb3466168b2af5b08bd94ba732c0e753Vikas Arora#endif /* WEBP_ENC_VP8LI_H_ */ 78