
This experiment performs symbol-by-symbol statistics adaptation for non-binary symbols. It requires DAALA_EC or RANS and ANS to be enabled. The adaptation is currently based on a simple recursive filter and is taken from Daala. It has an adaptation rate dependent on alphabet size, taken from Daala. It applies wherever non-binary symbols are encoded using Cumulative Probability Functions rather than trees. Where symbols are adapted, forward updates in the compressed header are removed. In the case of RANS coefficient token values are adapted, with the exception of the zero token which remains a binary symbol. In the case of DAALA_EC other values such as inter and intra modes are adapted as CDFs are provided in those cases. The experiment is configured with: ./configure --enable-experimental --enable-daala-ec --enable-ec-adapt or ./configure --enable-experimental --enable-ans --enable-rans \ --enable-ec-adapt EC_ADAPT is not currently compatible with tiles. BDR results on Objective-1-fast give a small loss: PSNR YCbCr: 0.51% 0.49% 0.48% PSNRHVS: 0.50% SSIM: 0.50% MSSSIM: 0.51% CIEDE2000: 0.50% Change-Id: I3888718e42616f3fd87144de7f125228446ac984
42 lines
1.2 KiB
C
42 lines
1.2 KiB
C
/*
|
|
* Copyright (c) 2016, Alliance for Open Media. All rights reserved
|
|
*
|
|
* This source code is subject to the terms of the BSD 2 Clause License and
|
|
* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
|
|
* was not distributed with this source code in the LICENSE file, you can
|
|
* obtain it at www.aomedia.org/license/software. If the Alliance for Open
|
|
* Media Patent License 1.0 was not distributed with this source code in the
|
|
* PATENTS file, you can obtain it at www.aomedia.org/license/patent.
|
|
*/
|
|
|
|
#ifndef AV1_ENCODER_ENCODEMV_H_
|
|
#define AV1_ENCODER_ENCODEMV_H_
|
|
|
|
#include "av1/encoder/encoder.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
void av1_entropy_mv_init(void);
|
|
|
|
void av1_write_nmv_probs(AV1_COMMON *cm, int usehp, aom_writer *w,
|
|
nmv_context_counts *const counts);
|
|
|
|
void av1_encode_mv(AV1_COMP *cpi, aom_writer *w, const MV *mv, const MV *ref,
|
|
#if CONFIG_REF_MV
|
|
int is_compound,
|
|
#endif
|
|
nmv_context *mvctx, int usehp);
|
|
|
|
void av1_build_nmv_cost_table(int *mvjoint, int *mvcost[2],
|
|
const nmv_context *mvctx, int usehp);
|
|
|
|
void av1_update_mv_count(ThreadData *td);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif // AV1_ENCODER_ENCODEMV_H_
|