
Using this we can eliminate large numbers of calls to predict intra, and is also faster than most of the variance functions it replaces. This is an equivalence transform so coding performance is unaffected. Encoder speedup is approx 7% when var_tx, super_tx and ext_tx are all enabled. Change-Id: I0d4c83afc4a97a1826f3abd864bd68e41bb504fb
83 lines
2.3 KiB
C
83 lines
2.3 KiB
C
/*
|
|
* Copyright (c) 2015 The WebM project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef VPX_DSP_COMMON_H_
|
|
#define VPX_DSP_COMMON_H_
|
|
|
|
#include "./vpx_config.h"
|
|
#include "vpx/vpx_integer.h"
|
|
#include "vpx_dsp/vpx_dsp_common.h"
|
|
#include "vpx_ports/mem.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define VPXMIN(x, y) (((x) < (y)) ? (x) : (y))
|
|
#define VPXMAX(x, y) (((x) > (y)) ? (x) : (y))
|
|
|
|
// These can be used to give a hint about branch outcomes.
|
|
// This can have an effect, even if your target processor has a
|
|
// good branch predictor, as these hints can affect basic block
|
|
// ordering by the compiler.
|
|
#ifdef __GNUC__
|
|
# define LIKELY(v) __builtin_expect(v, 1)
|
|
# define UNLIKELY(v) __builtin_expect(v, 0)
|
|
#else
|
|
# define LIKELY(v) (v)
|
|
# define UNLIKELY(v) (v)
|
|
#endif
|
|
|
|
#if CONFIG_VP9_HIGHBITDEPTH
|
|
// Note:
|
|
// tran_low_t is the datatype used for final transform coefficients.
|
|
// tran_high_t is the datatype used for intermediate transform stages.
|
|
typedef int64_t tran_high_t;
|
|
typedef int32_t tran_low_t;
|
|
#else
|
|
// Note:
|
|
// tran_low_t is the datatype used for final transform coefficients.
|
|
// tran_high_t is the datatype used for intermediate transform stages.
|
|
typedef int32_t tran_high_t;
|
|
typedef int16_t tran_low_t;
|
|
#endif // CONFIG_VP9_HIGHBITDEPTH
|
|
|
|
static INLINE uint8_t clip_pixel(int val) {
|
|
return (val > 255) ? 255 : (val < 0) ? 0 : val;
|
|
}
|
|
|
|
static INLINE int clamp(int value, int low, int high) {
|
|
return value < low ? low : (value > high ? high : value);
|
|
}
|
|
|
|
static INLINE double fclamp(double value, double low, double high) {
|
|
return value < low ? low : (value > high ? high : value);
|
|
}
|
|
|
|
#if CONFIG_VP9_HIGHBITDEPTH
|
|
static INLINE uint16_t clip_pixel_highbd(int val, int bd) {
|
|
switch (bd) {
|
|
case 8:
|
|
default:
|
|
return (uint16_t)clamp(val, 0, 255);
|
|
case 10:
|
|
return (uint16_t)clamp(val, 0, 1023);
|
|
case 12:
|
|
return (uint16_t)clamp(val, 0, 4095);
|
|
}
|
|
}
|
|
#endif // CONFIG_VP9_HIGHBITDEPTH
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif // VPX_DSP_COMMON_H_
|