Blame src/enc/vp8li_enc.h

Packit 9c6abc
// Copyright 2012 Google Inc. All Rights Reserved.
Packit 9c6abc
//
Packit 9c6abc
// Use of this source code is governed by a BSD-style license
Packit 9c6abc
// that can be found in the COPYING file in the root of the source
Packit 9c6abc
// tree. An additional intellectual property rights grant can be found
Packit 9c6abc
// in the file PATENTS. All contributing project authors may
Packit 9c6abc
// be found in the AUTHORS file in the root of the source tree.
Packit 9c6abc
// -----------------------------------------------------------------------------
Packit 9c6abc
//
Packit 9c6abc
// Lossless encoder: internal header.
Packit 9c6abc
//
Packit 9c6abc
// Author: Vikas Arora (vikaas.arora@gmail.com)
Packit 9c6abc
Packit 9c6abc
#ifndef WEBP_ENC_VP8LI_ENC_H_
Packit 9c6abc
#define WEBP_ENC_VP8LI_ENC_H_
Packit 9c6abc
Packit 9c6abc
#ifdef HAVE_CONFIG_H
Packit 9c6abc
#include "src/webp/config.h"
Packit 9c6abc
#endif
Packit 9c6abc
// Either WEBP_NEAR_LOSSLESS is defined as 0 in config.h when compiling to
Packit 9c6abc
// disable near-lossless, or it is enabled by default.
Packit 9c6abc
#ifndef WEBP_NEAR_LOSSLESS
Packit 9c6abc
#define WEBP_NEAR_LOSSLESS 1
Packit 9c6abc
#endif
Packit 9c6abc
Packit 9c6abc
#include "src/enc/backward_references_enc.h"
Packit 9c6abc
#include "src/enc/histogram_enc.h"
Packit 9c6abc
#include "src/utils/bit_writer_utils.h"
Packit 9c6abc
#include "src/webp/encode.h"
Packit 9c6abc
#include "src/webp/format_constants.h"
Packit 9c6abc
Packit 9c6abc
#ifdef __cplusplus
Packit 9c6abc
extern "C" {
Packit 9c6abc
#endif
Packit 9c6abc
Packit 9c6abc
// maximum value of transform_bits_ in VP8LEncoder.
Packit 9c6abc
#define MAX_TRANSFORM_BITS 6
Packit 9c6abc
Packit 9c6abc
typedef enum {
Packit 9c6abc
  kEncoderNone = 0,
Packit 9c6abc
  kEncoderARGB,
Packit 9c6abc
  kEncoderNearLossless,
Packit 9c6abc
  kEncoderPalette
Packit 9c6abc
} VP8LEncoderARGBContent;
Packit 9c6abc
Packit 9c6abc
typedef struct {
Packit 9c6abc
  const WebPConfig* config_;      // user configuration and parameters
Packit 9c6abc
  const WebPPicture* pic_;        // input picture.
Packit 9c6abc
Packit 9c6abc
  uint32_t* argb_;                       // Transformed argb image data.
Packit 9c6abc
  VP8LEncoderARGBContent argb_content_;  // Content type of the argb buffer.
Packit 9c6abc
  uint32_t* argb_scratch_;               // Scratch memory for argb rows
Packit 9c6abc
                                         // (used for prediction).
Packit 9c6abc
  uint32_t* transform_data_;             // Scratch memory for transform data.
Packit 9c6abc
  uint32_t* transform_mem_;              // Currently allocated memory.
Packit 9c6abc
  size_t    transform_mem_size_;         // Currently allocated memory size.
Packit 9c6abc
Packit 9c6abc
  int       current_width_;       // Corresponds to packed image width.
Packit 9c6abc
Packit 9c6abc
  // Encoding parameters derived from quality parameter.
Packit 9c6abc
  int histo_bits_;
Packit 9c6abc
  int transform_bits_;    // <= MAX_TRANSFORM_BITS.
Packit 9c6abc
  int cache_bits_;        // If equal to 0, don't use color cache.
Packit 9c6abc
Packit 9c6abc
  // Encoding parameters derived from image characteristics.
Packit 9c6abc
  int use_cross_color_;
Packit 9c6abc
  int use_subtract_green_;
Packit 9c6abc
  int use_predict_;
Packit 9c6abc
  int use_palette_;
Packit 9c6abc
  int palette_size_;
Packit 9c6abc
  uint32_t palette_[MAX_PALETTE_SIZE];
Packit 9c6abc
Packit 9c6abc
  // Some 'scratch' (potentially large) objects.
Packit 9c6abc
  struct VP8LBackwardRefs refs_[3];  // Backward Refs array for temporaries.
Packit 9c6abc
  VP8LHashChain hash_chain_;         // HashChain data for constructing
Packit 9c6abc
                                     // backward references.
Packit 9c6abc
} VP8LEncoder;
Packit 9c6abc
Packit 9c6abc
//------------------------------------------------------------------------------
Packit 9c6abc
// internal functions. Not public.
Packit 9c6abc
Packit 9c6abc
// Encodes the picture.
Packit 9c6abc
// Returns 0 if config or picture is NULL or picture doesn't have valid argb
Packit 9c6abc
// input.
Packit 9c6abc
int VP8LEncodeImage(const WebPConfig* const config,
Packit 9c6abc
                    const WebPPicture* const picture);
Packit 9c6abc
Packit 9c6abc
// Encodes the main image stream using the supplied bit writer.
Packit 9c6abc
// If 'use_cache' is false, disables the use of color cache.
Packit 9c6abc
WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
Packit 9c6abc
                                   const WebPPicture* const picture,
Packit 9c6abc
                                   VP8LBitWriter* const bw, int use_cache);
Packit 9c6abc
Packit 9c6abc
#if (WEBP_NEAR_LOSSLESS == 1)
Packit 9c6abc
// in near_lossless.c
Packit 9c6abc
// Near lossless preprocessing in RGB color-space.
Packit 9c6abc
int VP8ApplyNearLossless(const WebPPicture* const picture, int quality,
Packit 9c6abc
                         uint32_t* const argb_dst);
Packit 9c6abc
#endif
Packit 9c6abc
Packit 9c6abc
//------------------------------------------------------------------------------
Packit 9c6abc
// Image transforms in predictor.c.
Packit 9c6abc
Packit 9c6abc
void VP8LResidualImage(int width, int height, int bits, int low_effort,
Packit 9c6abc
                       uint32_t* const argb, uint32_t* const argb_scratch,
Packit 9c6abc
                       uint32_t* const image, int near_lossless, int exact,
Packit 9c6abc
                       int used_subtract_green);
Packit 9c6abc
Packit 9c6abc
void VP8LColorSpaceTransform(int width, int height, int bits, int quality,
Packit 9c6abc
                             uint32_t* const argb, uint32_t* image);
Packit 9c6abc
Packit 9c6abc
//------------------------------------------------------------------------------
Packit 9c6abc
Packit 9c6abc
#ifdef __cplusplus
Packit 9c6abc
}    // extern "C"
Packit 9c6abc
#endif
Packit 9c6abc
Packit 9c6abc
#endif  /* WEBP_ENC_VP8LI_ENC_H_ */