vp8.h revision f71323e297a928af368937089d3ed71239786f86
190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* 2f71323e297a928af368937089d3ed71239786f86Andreas Huber * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 4f71323e297a928af368937089d3ed71239786f86Andreas Huber * Use of this source code is governed by a BSD-style license 5f71323e297a928af368937089d3ed71239786f86Andreas Huber * that can be found in the LICENSE file in the root of the source 6f71323e297a928af368937089d3ed71239786f86Andreas Huber * tree. An additional intellectual property rights grant can be found 7f71323e297a928af368937089d3ed71239786f86Andreas Huber * in the file PATENTS. All contributing project authors may 8f71323e297a928af368937089d3ed71239786f86Andreas Huber * be found in the AUTHORS file in the root of the source tree. 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*!\defgroup vp8 VP8 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * \ingroup codecs 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * VP8 is vpx's newest video compression algorithm that uses motion 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * compensated prediction, Discrete Cosine Transform (DCT) coding of the 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * prediction error signal and context dependent entropy coding techniques 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * based on arithmatic principles. It features: 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * - YUV 4:2:0 image format 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * - Macro-block based coding (16x16 luma plus two 8x8 chroma) 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * - 1/4 (1/8) pixel accuracy motion compensated prediction 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * - 4x4 DCT transform 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * - 128 level linear quantizer 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * - In loop deblocking filter 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * - Context-based entropy coding 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * @{ 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*!\file vp8.h 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * \brief Provides controls common to both the VP8 encoder and decoder. 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef VP8_H 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VP8_H 33f71323e297a928af368937089d3ed71239786f86Andreas Huber#include "vpx/vpx_codec_impl_top.h" 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*!\brief Control functions 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * The set of macros define the control functions of VP8 interface 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenum vp8_dec_control_id 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_SET_REFERENCE = 1, /**< pass in an external frame into decoder to be used as reference frame */ 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_COPY_REFERENCE = 2, /**< get a copy of reference frame from the decoder */ 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_SET_POSTPROC = 3, /**< set decoder's the post processing settings */ 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_COMMON_CTRL_ID_MAX 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}; 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*!\brief post process flags 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * The set of macros define VP8 decoder post processing flags 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenum vp8_postproc_level 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_NOFILTERING = 0, 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_DEBLOCK = 1, 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_DEMACROBLOCK = 2, 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_ADDNOISE = 4, 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}; 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*!\brief post process flags 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * This define a structure that describe the post processing settings. For 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * the best objective measure (using thet PSNR metric) set post_proc_flag 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * to VP8_DEBLOCK and deblocking_level to 1. 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct vp8_postproc_cfg 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int post_proc_flag; /**< the types of post processing to be done, should be combination of "vp8_postproc_level" */ 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */ 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int noise_level; /**< the strength of additive noise, valid range [0, 16] */ 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} vp8_postproc_cfg_t; 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*!\brief reference frame type 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * The set of macros define the type of VP8 reference frames 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum vpx_ref_frame_type 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_LAST_FRAME = 1, 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_GOLD_FRAME = 2, 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_ALTR_FRAME = 4 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} vpx_ref_frame_type_t; 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*!\brief reference frame data struct 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * define the data struct to access vp8 reference frames 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct vpx_ref_frame 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vpx_ref_frame_type_t frame_type; /**< which reference frame */ 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vpx_image_t img; /**< reference frame data in image format */ 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} vpx_ref_frame_t; 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*!\brief vp8 decoder control funciton parameter type 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * defines the data type for each of VP8 decoder control funciton requires 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberVPX_CTRL_USE_TYPE(VP8_SET_REFERENCE, vpx_ref_frame_t *) 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberVPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE, vpx_ref_frame_t *) 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberVPX_CTRL_USE_TYPE(VP8_SET_POSTPROC, vp8_postproc_cfg_t *) 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*! @} - end defgroup vp8 */ 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* The following definitions are provided for backward compatibility with 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * the VP8 1.0.x SDK. USE IN PRODUCTION CODE IS NOT RECOMMENDED. 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberDECLSPEC_DEPRECATED extern vpx_codec_iface_t vpx_codec_vp8_algo DEPRECATED; 11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 116f71323e297a928af368937089d3ed71239786f86Andreas Huber#include "vpx/vpx_codec_impl_bottom.h" 11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 118