Convert "vp8" to "aom"
Change-Id: I0d57cf019d5715d3360736763be0c5afe0bd0de4
This commit is contained in:
Родитель
80edfa0132
Коммит
ec838b76b6
|
@ -35,8 +35,8 @@
|
|||
/examples/simple_decoder
|
||||
/examples/simple_encoder
|
||||
/examples/twopass_encoder
|
||||
/examples/vp8_multi_resolution_encoder
|
||||
/examples/vp8cx_set_ref
|
||||
/examples/aom_multi_resolution_encoder
|
||||
/examples/aomcx_set_ref
|
||||
/examples/vp9_lossless_encoder
|
||||
/examples/vp9_spatial_scalable_encoder
|
||||
/examples/aom_temporal_scalable_patterns
|
||||
|
@ -50,7 +50,7 @@
|
|||
/samples.dox
|
||||
/test_intra_pred_speed
|
||||
/test_libaom
|
||||
/vp8_api1_migration.dox
|
||||
/aom_api1_migration.dox
|
||||
/vp[89x]_rtcd.h
|
||||
/aom.pc
|
||||
/aom_config.c
|
||||
|
|
18
CHANGELOG
18
CHANGELOG
|
@ -304,7 +304,7 @@
|
|||
aomenc: add rate histogram display
|
||||
Set AOM_FRAME_IS_DROPPABLE
|
||||
update configure for ios sdk 4.3
|
||||
Avoid text relocations in ARM vp8 decoder
|
||||
Avoid text relocations in ARM aom decoder
|
||||
Generate a aom.pc file for pkg-config.
|
||||
New ways of passing encoded data between encoder and decoder.
|
||||
|
||||
|
@ -333,7 +333,7 @@
|
|||
disable trellis optimization for first pass
|
||||
Write SSSE3 sub-pixel filter function
|
||||
Improve SSE2 half-pixel filter funtions
|
||||
Add vp8_sub_pixel_variance16x8_ssse3 function
|
||||
Add aom_sub_pixel_variance16x8_ssse3 function
|
||||
Reduce unnecessary distortion computation
|
||||
Use diamond search to replace full search
|
||||
Preload reference area in sub-pixel motion search (real-time mode)
|
||||
|
@ -399,7 +399,7 @@
|
|||
FDCT optimizations.
|
||||
x86 sse2 temporal filter
|
||||
SSSE3 version of fast quantizer
|
||||
vp8_rd_pick_best_mbsegmentation code restructure
|
||||
aom_rd_pick_best_mbsegmentation code restructure
|
||||
Adjusted breakout RD for SPLITMV
|
||||
Changed segmentation check order
|
||||
Improved rd_pick_intra4x4block
|
||||
|
@ -408,7 +408,7 @@
|
|||
ARMv6 optimized half pixel variance calculations
|
||||
Full search SAD function optimization in SSE4.1
|
||||
Improve MV prediction accuracy to achieve performance gain
|
||||
Improve MV prediction in vp8_pick_inter_mode() for speed>3
|
||||
Improve MV prediction in aom_pick_inter_mode() for speed>3
|
||||
|
||||
- Quality:
|
||||
Best quality mode improved PSNR 6.3%, and SSIM 6.1%. This release
|
||||
|
@ -439,7 +439,7 @@
|
|||
Fix ARM encoder crash with multiple token partitions
|
||||
Fixed bug first cluster timecode of webm file is wrong.
|
||||
Fixed various encoder bugs with odd-sized images
|
||||
vp8e_get_preview fixed when spatial resampling enabled
|
||||
aome_get_preview fixed when spatial resampling enabled
|
||||
quantizer: fix assertion in fast quantizer path
|
||||
Allocate source buffers to be multiples of 16
|
||||
Fix for manual Golden frame frequency
|
||||
|
@ -517,13 +517,13 @@
|
|||
Improve handling of invalid frames
|
||||
Fix valgrind errors in the NEON loop filters.
|
||||
Fix loopfilter delta zero transitions
|
||||
Fix valgrind errors in vp8_sixtap_predict8x4_armv6().
|
||||
Fix valgrind errors in aom_sixtap_predict8x4_armv6().
|
||||
Build fixes for darwin-icc
|
||||
|
||||
- Speed:
|
||||
20-40% (average 28%) improvement in libaom decoder speed,
|
||||
including:
|
||||
Rewrite vp8_short_walsh4x4_sse2()
|
||||
Rewrite aom_short_walsh4x4_sse2()
|
||||
Optimizations on the loopfilters.
|
||||
Miscellaneous improvements for Atom
|
||||
Add 4-tap version of 2nd-pass ARMv6 MC filter.
|
||||
|
@ -539,8 +539,8 @@
|
|||
Encoder speed improvements (percentage gain not measured):
|
||||
Skip unnecessary search of identical frames
|
||||
Add SSE2 subtract functions
|
||||
Improve bounds checking in vp8_diamond_search_sadx4()
|
||||
Added vp8_fast_quantize_b_sse2
|
||||
Improve bounds checking in aom_diamond_search_sadx4()
|
||||
Added aom_fast_quantize_b_sse2
|
||||
|
||||
- Quality:
|
||||
Over 7% overall PSNR improvement (6.3% SSIM) in "best" quality
|
||||
|
|
20
aom/aom.h
20
aom/aom.h
|
@ -9,7 +9,7 @@
|
|||
* PATENTS file, you can obtain it at www.aomedia.org/license/patent.
|
||||
*/
|
||||
|
||||
/*!\defgroup vp8 AOM
|
||||
/*!\defgroup aom AOM
|
||||
* \ingroup codecs
|
||||
* AOM is aom's newest video compression algorithm that uses motion
|
||||
* compensated prediction, Discrete Cosine Transform (DCT) coding of the
|
||||
|
@ -42,7 +42,7 @@ extern "C" {
|
|||
*
|
||||
* The set of macros define the control functions of AOM interface
|
||||
*/
|
||||
enum vp8_com_control_id {
|
||||
enum aom_com_control_id {
|
||||
AOM_SET_REFERENCE =
|
||||
1, /**< pass in an external frame into decoder to be used as reference
|
||||
frame */
|
||||
|
@ -67,7 +67,7 @@ enum vp8_com_control_id {
|
|||
*
|
||||
* The set of macros define AOM decoder post processing flags
|
||||
*/
|
||||
enum vp8_postproc_level {
|
||||
enum aom_postproc_level {
|
||||
AOM_NOFILTERING = 0,
|
||||
AOM_DEBLOCK = 1 << 0,
|
||||
AOM_DEMACROBLOCK = 1 << 1,
|
||||
|
@ -87,12 +87,12 @@ enum vp8_postproc_level {
|
|||
* to AOM_DEBLOCK and deblocking_level to 1.
|
||||
*/
|
||||
|
||||
typedef struct vp8_postproc_cfg {
|
||||
typedef struct aom_postproc_cfg {
|
||||
int post_proc_flag; /**< the types of post processing to be done, should be
|
||||
combination of "vp8_postproc_level" */
|
||||
combination of "aom_postproc_level" */
|
||||
int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */
|
||||
int noise_level; /**< the strength of additive noise, valid range [0, 16] */
|
||||
} vp8_postproc_cfg_t;
|
||||
} aom_postproc_cfg_t;
|
||||
|
||||
/*!\brief reference frame type
|
||||
*
|
||||
|
@ -106,7 +106,7 @@ typedef enum aom_ref_frame_type {
|
|||
|
||||
/*!\brief reference frame data struct
|
||||
*
|
||||
* Define the data struct to access vp8 reference frames.
|
||||
* Define the data struct to access aom reference frames.
|
||||
*/
|
||||
typedef struct aom_ref_frame {
|
||||
aom_ref_frame_type_t frame_type; /**< which reference frame */
|
||||
|
@ -123,7 +123,7 @@ typedef struct vp9_ref_frame {
|
|||
} vp9_ref_frame_t;
|
||||
|
||||
/*!\cond */
|
||||
/*!\brief vp8 decoder control function parameter type
|
||||
/*!\brief aom decoder control function parameter type
|
||||
*
|
||||
* defines the data type for each of AOM decoder control function requires
|
||||
*/
|
||||
|
@ -131,7 +131,7 @@ AOM_CTRL_USE_TYPE(AOM_SET_REFERENCE, aom_ref_frame_t *)
|
|||
#define AOM_CTRL_AOM_SET_REFERENCE
|
||||
AOM_CTRL_USE_TYPE(AOM_COPY_REFERENCE, aom_ref_frame_t *)
|
||||
#define AOM_CTRL_AOM_COPY_REFERENCE
|
||||
AOM_CTRL_USE_TYPE(AOM_SET_POSTPROC, vp8_postproc_cfg_t *)
|
||||
AOM_CTRL_USE_TYPE(AOM_SET_POSTPROC, aom_postproc_cfg_t *)
|
||||
#define AOM_CTRL_AOM_SET_POSTPROC
|
||||
AOM_CTRL_USE_TYPE(AOM_SET_DBG_COLOR_REF_FRAME, int)
|
||||
#define AOM_CTRL_AOM_SET_DBG_COLOR_REF_FRAME
|
||||
|
@ -145,7 +145,7 @@ AOM_CTRL_USE_TYPE(AV1_GET_REFERENCE, vp9_ref_frame_t *)
|
|||
#define AOM_CTRL_AV1_GET_REFERENCE
|
||||
|
||||
/*!\endcond */
|
||||
/*! @} - end defgroup vp8 */
|
||||
/*! @} - end defgroup aom */
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
|
12
aom/aomcx.h
12
aom/aomcx.h
|
@ -11,8 +11,8 @@
|
|||
#ifndef AOM_AOMCX_H_
|
||||
#define AOM_AOMCX_H_
|
||||
|
||||
/*!\defgroup vp8_encoder WebM AOM/AV1 Encoder
|
||||
* \ingroup vp8
|
||||
/*!\defgroup aom_encoder WebM AOM/AV1 Encoder
|
||||
* \ingroup aom
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
@ -114,7 +114,7 @@ extern aom_codec_iface_t *aom_codec_av1_cx(void);
|
|||
*
|
||||
* \sa #aom_codec_control
|
||||
*/
|
||||
enum vp8e_enc_control_id {
|
||||
enum aome_enc_control_id {
|
||||
/*!\brief Codec control function to pass an ROI map to encoder.
|
||||
*
|
||||
* Supported in codecs: AOM, AV1
|
||||
|
@ -667,7 +667,7 @@ typedef enum {
|
|||
AOM_TWO_TOKENPARTITION = 1,
|
||||
AOM_FOUR_TOKENPARTITION = 2,
|
||||
AOM_EIGHT_TOKENPARTITION = 3
|
||||
} vp8e_token_partitions;
|
||||
} aome_token_partitions;
|
||||
|
||||
/*!brief AV1 encoder content type */
|
||||
typedef enum {
|
||||
|
@ -748,7 +748,7 @@ AOM_CTRL_USE_TYPE(AOME_SET_SHARPNESS, unsigned int)
|
|||
#define AOM_CTRL_AOME_SET_SHARPNESS
|
||||
AOM_CTRL_USE_TYPE(AOME_SET_STATIC_THRESHOLD, unsigned int)
|
||||
#define AOM_CTRL_AOME_SET_STATIC_THRESHOLD
|
||||
AOM_CTRL_USE_TYPE(AOME_SET_TOKEN_PARTITIONS, int) /* vp8e_token_partitions */
|
||||
AOM_CTRL_USE_TYPE(AOME_SET_TOKEN_PARTITIONS, int) /* aome_token_partitions */
|
||||
#define AOM_CTRL_AOME_SET_TOKEN_PARTITIONS
|
||||
|
||||
AOM_CTRL_USE_TYPE(AOME_SET_ARNR_MAXFRAMES, unsigned int)
|
||||
|
@ -836,7 +836,7 @@ AOM_CTRL_USE_TYPE(AV1E_SET_RENDER_SIZE, int *)
|
|||
#define AOM_CTRL_AV1E_SET_RENDER_SIZE
|
||||
|
||||
/*!\endcond */
|
||||
/*! @} - end defgroup vp8_encoder */
|
||||
/*! @} - end defgroup aom_encoder */
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
12
aom/aomdx.h
12
aom/aomdx.h
|
@ -9,8 +9,8 @@
|
|||
* PATENTS file, you can obtain it at www.aomedia.org/license/patent.
|
||||
*/
|
||||
|
||||
/*!\defgroup vp8_decoder WebM AOM/AV1 Decoder
|
||||
* \ingroup vp8
|
||||
/*!\defgroup aom_decoder WebM AOM/AV1 Decoder
|
||||
* \ingroup aom
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
@ -37,7 +37,7 @@ extern aom_codec_iface_t aom_codec_av1_dx_algo;
|
|||
extern aom_codec_iface_t *aom_codec_av1_dx(void);
|
||||
/*!@} - end algorithm interface member group*/
|
||||
|
||||
/*!\enum vp8_dec_control_id
|
||||
/*!\enum aom_dec_control_id
|
||||
* \brief AOM decoder control functions
|
||||
*
|
||||
* This set of macros define the control functions available for the AOM
|
||||
|
@ -45,7 +45,7 @@ extern aom_codec_iface_t *aom_codec_av1_dx(void);
|
|||
*
|
||||
* \sa #aom_codec_control
|
||||
*/
|
||||
enum vp8_dec_control_id {
|
||||
enum aom_dec_control_id {
|
||||
/** control function to get info on which reference frames were updated
|
||||
* by the last decode
|
||||
*/
|
||||
|
@ -126,7 +126,7 @@ typedef struct aom_decrypt_init {
|
|||
|
||||
/*!\brief A deprecated alias for aom_decrypt_init.
|
||||
*/
|
||||
typedef aom_decrypt_init vp8_decrypt_init;
|
||||
typedef aom_decrypt_init aom_decrypt_init;
|
||||
|
||||
/*!\cond */
|
||||
/*!\brief AOM decoder control function parameter type
|
||||
|
@ -156,7 +156,7 @@ AOM_CTRL_USE_TYPE(AV1_INVERT_TILE_DECODE_ORDER, int)
|
|||
#define AOM_CTRL_AV1_INVERT_TILE_DECODE_ORDER
|
||||
|
||||
/*!\endcond */
|
||||
/*! @} - end defgroup vp8_decoder */
|
||||
/*! @} - end defgroup aom_decoder */
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
|
|
@ -50,7 +50,7 @@ static INLINE void loop_filter_neon_16(uint8x16_t qblimit, // blimit
|
|||
|
||||
q9 = vabdq_u8(q6, q7);
|
||||
|
||||
// vp8_hevmask
|
||||
// aom_hevmask
|
||||
q13u8 = vcgtq_u8(q13u8, qthresh);
|
||||
q14u8 = vcgtq_u8(q14u8, qthresh);
|
||||
q15u8 = vmaxq_u8(q15u8, q3);
|
||||
|
@ -60,7 +60,7 @@ static INLINE void loop_filter_neon_16(uint8x16_t qblimit, // blimit
|
|||
|
||||
q15u8 = vcgeq_u8(qlimit, q15u8);
|
||||
|
||||
// vp8_filter() function
|
||||
// aom_filter() function
|
||||
// convert to signed
|
||||
q10 = vdupq_n_u8(0x80);
|
||||
q8 = veorq_u8(q8, q10);
|
||||
|
@ -95,7 +95,7 @@ static INLINE void loop_filter_neon_16(uint8x16_t qblimit, // blimit
|
|||
|
||||
q4 = vdupq_n_u8(3);
|
||||
q9 = vdupq_n_u8(4);
|
||||
// vp8_filter = clamp(vp8_filter + 3 * ( qs0 - ps0))
|
||||
// aom_filter = clamp(aom_filter + 3 * ( qs0 - ps0))
|
||||
d2s8 = vqmovn_s16(q2s16);
|
||||
d3s8 = vqmovn_s16(q11s16);
|
||||
q1s8 = vcombine_s8(d2s8, d3s8);
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
AREA ||.text||, CODE, READONLY, ALIGN=2
|
||||
|
||||
; Currently aom only works on iterations 8 at a time. The vp8 loop filter
|
||||
; Currently aom only works on iterations 8 at a time. The aom loop filter
|
||||
; works on 16 iterations at a time.
|
||||
; TODO(fgalligan): See about removing the count code as this function is only
|
||||
; called with a count of 1.
|
||||
|
@ -77,7 +77,7 @@ end_aom_lf_h_edge
|
|||
pop {pc}
|
||||
ENDP ; |aom_lpf_horizontal_4_neon|
|
||||
|
||||
; Currently aom only works on iterations 8 at a time. The vp8 loop filter
|
||||
; Currently aom only works on iterations 8 at a time. The aom loop filter
|
||||
; works on 16 iterations at a time.
|
||||
; TODO(fgalligan): See about removing the count code as this function is only
|
||||
; called with a count of 1.
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
AREA ||.text||, CODE, READONLY, ALIGN=2
|
||||
|
||||
; Currently aom only works on iterations 8 at a time. The vp8 loop filter
|
||||
; Currently aom only works on iterations 8 at a time. The aom loop filter
|
||||
; works on 16 iterations at a time.
|
||||
; TODO(fgalligan): See about removing the count code as this function is only
|
||||
; called with a count of 1.
|
||||
|
|
|
@ -347,13 +347,13 @@ void aom_d63_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride,
|
|||
DST(1, 0) = DST(0, 2) = AVG2(B, C);
|
||||
DST(2, 0) = DST(1, 2) = AVG2(C, D);
|
||||
DST(3, 0) = DST(2, 2) = AVG2(D, E);
|
||||
DST(3, 2) = AVG2(E, F); // differs from vp8
|
||||
DST(3, 2) = AVG2(E, F); // differs from aom
|
||||
|
||||
DST(0, 1) = AVG3(A, B, C);
|
||||
DST(1, 1) = DST(0, 3) = AVG3(B, C, D);
|
||||
DST(2, 1) = DST(1, 3) = AVG3(C, D, E);
|
||||
DST(3, 1) = DST(2, 3) = AVG3(D, E, F);
|
||||
DST(3, 3) = AVG3(E, F, G); // differs from vp8
|
||||
DST(3, 3) = AVG3(E, F, G); // differs from aom
|
||||
}
|
||||
|
||||
void aom_d63f_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride,
|
||||
|
@ -398,7 +398,7 @@ void aom_d45_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride,
|
|||
DST(3, 0) = DST(2, 1) = DST(1, 2) = DST(0, 3) = AVG3(D, E, F);
|
||||
DST(3, 1) = DST(2, 2) = DST(1, 3) = AVG3(E, F, G);
|
||||
DST(3, 2) = DST(2, 3) = AVG3(F, G, H);
|
||||
DST(3, 3) = H; // differs from vp8
|
||||
DST(3, 3) = H; // differs from aom
|
||||
}
|
||||
|
||||
void aom_d45e_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride,
|
||||
|
|
|
@ -73,7 +73,7 @@ static INLINE void filter_dspr2(uint32_t mask, uint32_t hev, uint32_t *ps1,
|
|||
hev_r = hev_r & HWM;
|
||||
|
||||
__asm__ __volatile__(
|
||||
/* aom_filter = vp8_signed_char_clamp(ps1 - qs1); */
|
||||
/* aom_filter = aom_signed_char_clamp(ps1 - qs1); */
|
||||
"subq_s.ph %[aom_filter_l], %[vps1_l], %[vqs1_l] \n\t"
|
||||
"subq_s.ph %[aom_filter_r], %[vps1_r], %[vqs1_r] \n\t"
|
||||
|
||||
|
@ -85,7 +85,7 @@ static INLINE void filter_dspr2(uint32_t mask, uint32_t hev, uint32_t *ps1,
|
|||
"and %[aom_filter_l], %[aom_filter_l], %[hev_l] \n\t"
|
||||
"and %[aom_filter_r], %[aom_filter_r], %[hev_r] \n\t"
|
||||
|
||||
/* aom_filter = vp8_signed_char_clamp(aom_filter + 3 * (qs0 - ps0)); */
|
||||
/* aom_filter = aom_signed_char_clamp(aom_filter + 3 * (qs0 - ps0)); */
|
||||
"addq_s.ph %[aom_filter_l], %[aom_filter_l], %[subr_l] \n\t"
|
||||
"addq_s.ph %[aom_filter_r], %[aom_filter_r], %[subr_r] \n\t"
|
||||
"xor %[invhev_l], %[hev_l], %[HWM] \n\t"
|
||||
|
@ -110,11 +110,11 @@ static INLINE void filter_dspr2(uint32_t mask, uint32_t hev, uint32_t *ps1,
|
|||
|
||||
/* save bottom 3 bits so that we round one side +4 and the other +3 */
|
||||
__asm__ __volatile__(
|
||||
/* Filter2 = vp8_signed_char_clamp(aom_filter + 3) >>= 3; */
|
||||
/* Filter2 = aom_signed_char_clamp(aom_filter + 3) >>= 3; */
|
||||
"addq_s.ph %[Filter1_l], %[aom_filter_l], %[t2] \n\t"
|
||||
"addq_s.ph %[Filter1_r], %[aom_filter_r], %[t2] \n\t"
|
||||
|
||||
/* Filter1 = vp8_signed_char_clamp(aom_filter + 4) >>= 3; */
|
||||
/* Filter1 = aom_signed_char_clamp(aom_filter + 4) >>= 3; */
|
||||
"addq_s.ph %[Filter2_l], %[aom_filter_l], %[t1] \n\t"
|
||||
"addq_s.ph %[Filter2_r], %[aom_filter_r], %[t1] \n\t"
|
||||
"shra.ph %[Filter1_r], %[Filter1_r], 3 \n\t"
|
||||
|
@ -126,11 +126,11 @@ static INLINE void filter_dspr2(uint32_t mask, uint32_t hev, uint32_t *ps1,
|
|||
"and %[Filter1_l], %[Filter1_l], %[HWM] \n\t"
|
||||
"and %[Filter1_r], %[Filter1_r], %[HWM] \n\t"
|
||||
|
||||
/* vps0 = vp8_signed_char_clamp(ps0 + Filter2); */
|
||||
/* vps0 = aom_signed_char_clamp(ps0 + Filter2); */
|
||||
"addq_s.ph %[vps0_l], %[vps0_l], %[Filter2_l] \n\t"
|
||||
"addq_s.ph %[vps0_r], %[vps0_r], %[Filter2_r] \n\t"
|
||||
|
||||
/* vqs0 = vp8_signed_char_clamp(qs0 - Filter1); */
|
||||
/* vqs0 = aom_signed_char_clamp(qs0 - Filter1); */
|
||||
"subq_s.ph %[vqs0_l], %[vqs0_l], %[Filter1_l] \n\t"
|
||||
"subq_s.ph %[vqs0_r], %[vqs0_r], %[Filter1_r] \n\t"
|
||||
|
||||
|
@ -150,11 +150,11 @@ static INLINE void filter_dspr2(uint32_t mask, uint32_t hev, uint32_t *ps1,
|
|||
"and %[Filter1_l], %[Filter1_l], %[invhev_l] \n\t"
|
||||
"and %[Filter1_r], %[Filter1_r], %[invhev_r] \n\t"
|
||||
|
||||
/* vps1 = vp8_signed_char_clamp(ps1 + aom_filter); */
|
||||
/* vps1 = aom_signed_char_clamp(ps1 + aom_filter); */
|
||||
"addq_s.ph %[vps1_l], %[vps1_l], %[Filter1_l] \n\t"
|
||||
"addq_s.ph %[vps1_r], %[vps1_r], %[Filter1_r] \n\t"
|
||||
|
||||
/* vqs1 = vp8_signed_char_clamp(qs1 - aom_filter); */
|
||||
/* vqs1 = aom_signed_char_clamp(qs1 - aom_filter); */
|
||||
"subq_s.ph %[vqs1_l], %[vqs1_l], %[Filter1_l] \n\t"
|
||||
"subq_s.ph %[vqs1_r], %[vqs1_r], %[Filter1_r] \n\t"
|
||||
|
||||
|
@ -240,7 +240,7 @@ static INLINE void filter1_dspr2(uint32_t mask, uint32_t hev, uint32_t ps1,
|
|||
hev_r = hev_r & HWM;
|
||||
|
||||
__asm__ __volatile__(
|
||||
/* aom_filter = vp8_signed_char_clamp(ps1 - qs1); */
|
||||
/* aom_filter = aom_signed_char_clamp(ps1 - qs1); */
|
||||
"subq_s.ph %[aom_filter_l], %[vps1_l], %[vqs1_l] \n\t"
|
||||
"subq_s.ph %[aom_filter_r], %[vps1_r], %[vqs1_r] \n\t"
|
||||
|
||||
|
@ -252,7 +252,7 @@ static INLINE void filter1_dspr2(uint32_t mask, uint32_t hev, uint32_t ps1,
|
|||
"and %[aom_filter_l], %[aom_filter_l], %[hev_l] \n\t"
|
||||
"and %[aom_filter_r], %[aom_filter_r], %[hev_r] \n\t"
|
||||
|
||||
/* aom_filter = vp8_signed_char_clamp(aom_filter + 3 * (qs0 - ps0)); */
|
||||
/* aom_filter = aom_signed_char_clamp(aom_filter + 3 * (qs0 - ps0)); */
|
||||
"addq_s.ph %[aom_filter_l], %[aom_filter_l], %[subr_l] \n\t"
|
||||
"addq_s.ph %[aom_filter_r], %[aom_filter_r], %[subr_r] \n\t"
|
||||
"xor %[invhev_l], %[hev_l], %[HWM] \n\t"
|
||||
|
@ -277,11 +277,11 @@ static INLINE void filter1_dspr2(uint32_t mask, uint32_t hev, uint32_t ps1,
|
|||
|
||||
/* save bottom 3 bits so that we round one side +4 and the other +3 */
|
||||
__asm__ __volatile__(
|
||||
/* Filter2 = vp8_signed_char_clamp(aom_filter + 3) >>= 3; */
|
||||
/* Filter2 = aom_signed_char_clamp(aom_filter + 3) >>= 3; */
|
||||
"addq_s.ph %[Filter1_l], %[aom_filter_l], %[t2] \n\t"
|
||||
"addq_s.ph %[Filter1_r], %[aom_filter_r], %[t2] \n\t"
|
||||
|
||||
/* Filter1 = vp8_signed_char_clamp(aom_filter + 4) >>= 3; */
|
||||
/* Filter1 = aom_signed_char_clamp(aom_filter + 4) >>= 3; */
|
||||
"addq_s.ph %[Filter2_l], %[aom_filter_l], %[t1] \n\t"
|
||||
"addq_s.ph %[Filter2_r], %[aom_filter_r], %[t1] \n\t"
|
||||
"shra.ph %[Filter1_r], %[Filter1_r], 3 \n\t"
|
||||
|
@ -293,11 +293,11 @@ static INLINE void filter1_dspr2(uint32_t mask, uint32_t hev, uint32_t ps1,
|
|||
"and %[Filter1_l], %[Filter1_l], %[HWM] \n\t"
|
||||
"and %[Filter1_r], %[Filter1_r], %[HWM] \n\t"
|
||||
|
||||
/* vps0 = vp8_signed_char_clamp(ps0 + Filter2); */
|
||||
/* vps0 = aom_signed_char_clamp(ps0 + Filter2); */
|
||||
"addq_s.ph %[vps0_l], %[vps0_l], %[Filter2_l] \n\t"
|
||||
"addq_s.ph %[vps0_r], %[vps0_r], %[Filter2_r] \n\t"
|
||||
|
||||
/* vqs0 = vp8_signed_char_clamp(qs0 - Filter1); */
|
||||
/* vqs0 = aom_signed_char_clamp(qs0 - Filter1); */
|
||||
"subq_s.ph %[vqs0_l], %[vqs0_l], %[Filter1_l] \n\t"
|
||||
"subq_s.ph %[vqs0_r], %[vqs0_r], %[Filter1_r] \n\t"
|
||||
|
||||
|
@ -317,11 +317,11 @@ static INLINE void filter1_dspr2(uint32_t mask, uint32_t hev, uint32_t ps1,
|
|||
"and %[Filter1_l], %[Filter1_l], %[invhev_l] \n\t"
|
||||
"and %[Filter1_r], %[Filter1_r], %[invhev_r] \n\t"
|
||||
|
||||
/* vps1 = vp8_signed_char_clamp(ps1 + aom_filter); */
|
||||
/* vps1 = aom_signed_char_clamp(ps1 + aom_filter); */
|
||||
"addq_s.ph %[vps1_l], %[vps1_l], %[Filter1_l] \n\t"
|
||||
"addq_s.ph %[vps1_r], %[vps1_r], %[Filter1_r] \n\t"
|
||||
|
||||
/* vqs1 = vp8_signed_char_clamp(qs1 - aom_filter); */
|
||||
/* vqs1 = aom_signed_char_clamp(qs1 - aom_filter); */
|
||||
"subq_s.ph %[vqs1_l], %[vqs1_l], %[Filter1_l] \n\t"
|
||||
"subq_s.ph %[vqs1_r], %[vqs1_r], %[Filter1_r] \n\t"
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ typedef unsigned int (*aom_sad_avg_fn_t)(const uint8_t *a_ptr, int a_stride,
|
|||
const uint8_t *b_ptr, int b_stride,
|
||||
const uint8_t *second_pred);
|
||||
|
||||
typedef void (*vp8_copy32xn_fn_t)(const uint8_t *a, int a_stride, uint8_t *b,
|
||||
typedef void (*aom_copy32xn_fn_t)(const uint8_t *a, int a_stride, uint8_t *b,
|
||||
int b_stride, int n);
|
||||
|
||||
typedef void (*aom_sad_multi_fn_t)(const uint8_t *a, int a_stride,
|
||||
|
|
|
@ -107,7 +107,7 @@ struct aom_codec_alg_priv {
|
|||
#endif
|
||||
aom_image_t preview_img;
|
||||
aom_enc_frame_flags_t next_frame_flags;
|
||||
vp8_postproc_cfg_t preview_ppcfg;
|
||||
aom_postproc_cfg_t preview_ppcfg;
|
||||
aom_codec_pkt_list_decl(256) pkt_list;
|
||||
unsigned int fixed_kf_cntr;
|
||||
aom_codec_priv_output_cx_pkt_cb_pair_t output_cx_pkt_cb;
|
||||
|
|
|
@ -46,7 +46,7 @@ struct aom_codec_alg_priv {
|
|||
aom_codec_dec_cfg_t cfg;
|
||||
av1_stream_info_t si;
|
||||
int postproc_cfg_set;
|
||||
vp8_postproc_cfg_t postproc_cfg;
|
||||
aom_postproc_cfg_t postproc_cfg;
|
||||
aom_decrypt_cb decrypt_cb;
|
||||
void *decrypt_state;
|
||||
aom_image_t img;
|
||||
|
@ -293,7 +293,7 @@ static void init_buffer_callbacks(aom_codec_alg_priv_t *ctx) {
|
|||
}
|
||||
}
|
||||
|
||||
static void set_default_ppflags(vp8_postproc_cfg_t *cfg) {
|
||||
static void set_default_ppflags(aom_postproc_cfg_t *cfg) {
|
||||
cfg->post_proc_flag = AOM_DEBLOCK | AOM_DEMACROBLOCK;
|
||||
cfg->deblocking_level = 4;
|
||||
cfg->noise_level = 0;
|
||||
|
|
|
@ -507,13 +507,13 @@ int main(int argc, char **argv) {
|
|||
if (argc < min_args) {
|
||||
#if CONFIG_AOM_HIGHBITDEPTH
|
||||
die(
|
||||
"Usage: %s <infile> <outfile> <codec_type(vp8/vp9)> <width> <height> "
|
||||
"Usage: %s <infile> <outfile> <codec_type(aom/vp9)> <width> <height> "
|
||||
"<rate_num> <rate_den> <speed> <frame_drop_threshold> <mode> "
|
||||
"<Rate_0> ... <Rate_nlayers-1> <bit-depth> \n",
|
||||
argv[0]);
|
||||
#else
|
||||
die(
|
||||
"Usage: %s <infile> <outfile> <codec_type(vp8/vp9)> <width> <height> "
|
||||
"Usage: %s <infile> <outfile> <codec_type(aom/vp9)> <width> <height> "
|
||||
"<rate_num> <rate_den> <speed> <frame_drop_threshold> <mode> "
|
||||
"<Rate_0> ... <Rate_nlayers-1> \n",
|
||||
argv[0]);
|
||||
|
@ -598,7 +598,7 @@ int main(int argc, char **argv) {
|
|||
for (i = min_args_base;
|
||||
(int)i < min_args_base + mode_to_num_layers[layering_mode]; ++i) {
|
||||
rc.layer_target_bitrate[i - 11] = strtol(argv[i], NULL, 0);
|
||||
if (strncmp(encoder->name, "vp8", 3) == 0)
|
||||
if (strncmp(encoder->name, "aom", 3) == 0)
|
||||
cfg.ts_target_bitrate[i - 11] = rc.layer_target_bitrate[i - 11];
|
||||
else if (strncmp(encoder->name, "vp9", 3) == 0)
|
||||
cfg.layer_target_bitrate[i - 11] = rc.layer_target_bitrate[i - 11];
|
||||
|
@ -676,7 +676,7 @@ int main(int argc, char **argv) {
|
|||
#endif // CONFIG_AOM_HIGHBITDEPTH
|
||||
die_codec(&codec, "Failed to initialize encoder");
|
||||
|
||||
if (strncmp(encoder->name, "vp8", 3) == 0) {
|
||||
if (strncmp(encoder->name, "aom", 3) == 0) {
|
||||
aom_codec_control(&codec, AOME_SET_CPUUSED, -speed);
|
||||
aom_codec_control(&codec, AOME_SET_NOISE_SENSITIVITY, kDenoiserOff);
|
||||
aom_codec_control(&codec, AOME_SET_STATIC_THRESHOLD, 1);
|
||||
|
@ -699,7 +699,7 @@ int main(int argc, char **argv) {
|
|||
svc_params.scaling_factor_den[0] = cfg.g_h;
|
||||
aom_codec_control(&codec, AV1E_SET_SVC_PARAMETERS, &svc_params);
|
||||
}
|
||||
if (strncmp(encoder->name, "vp8", 3) == 0) {
|
||||
if (strncmp(encoder->name, "aom", 3) == 0) {
|
||||
aom_codec_control(&codec, AOME_SET_SCREEN_CONTENT_MODE, 0);
|
||||
}
|
||||
aom_codec_control(&codec, AOME_SET_TOKEN_PARTITIONS, 1);
|
||||
|
@ -725,7 +725,7 @@ int main(int argc, char **argv) {
|
|||
cfg.ts_layer_id[frame_cnt % cfg.ts_periodicity];
|
||||
if (strncmp(encoder->name, "vp9", 3) == 0) {
|
||||
aom_codec_control(&codec, AV1E_SET_SVC_LAYER_ID, &layer_id);
|
||||
} else if (strncmp(encoder->name, "vp8", 3) == 0) {
|
||||
} else if (strncmp(encoder->name, "aom", 3) == 0) {
|
||||
aom_codec_control(&codec, AOME_SET_TEMPORAL_LAYER_ID,
|
||||
layer_id.temporal_layer_id);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
// -----------------
|
||||
// For decoders, you only have to include `aom_decoder.h` and then any
|
||||
// header files for the specific codecs you use. In this case, we're using
|
||||
// vp8.
|
||||
// aom.
|
||||
//
|
||||
// Initializing The Codec
|
||||
// ----------------------
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
// -----------------
|
||||
// For encoders, you only have to include `aom_encoder.h` and then any
|
||||
// header files for the specific codecs you use. In this case, we're using
|
||||
// vp8.
|
||||
// aom.
|
||||
//
|
||||
// Getting The Default Configuration
|
||||
// ---------------------------------
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
|
||||
This distribution of the WebM Codec SDK includes the following support:
|
||||
|
||||
\if vp8_encoder
|
||||
- \ref vp8_encoder
|
||||
\if aom_encoder
|
||||
- \ref aom_encoder
|
||||
\endif
|
||||
\if vp8_decoder
|
||||
- \ref vp8_decoder
|
||||
\if aom_decoder
|
||||
- \ref aom_decoder
|
||||
\endif
|
||||
|
||||
|
||||
|
|
|
@ -8,21 +8,21 @@
|
|||
## in the file PATENTS. All contributing project authors may
|
||||
## be found in the AUTHORS file in the root of the source tree.
|
||||
##
|
||||
## This file tests the libaom vp8_multi_resolution_encoder example. To add new
|
||||
## This file tests the libaom aom_multi_resolution_encoder example. To add new
|
||||
## tests to this file, do the following:
|
||||
## 1. Write a shell function (this is your test).
|
||||
## 2. Add the function to vp8_mre_tests (on a new line).
|
||||
## 2. Add the function to aom_mre_tests (on a new line).
|
||||
##
|
||||
. $(dirname $0)/tools_common.sh
|
||||
|
||||
# Environment check: $YUV_RAW_INPUT is required.
|
||||
vp8_multi_resolution_encoder_verify_environment() {
|
||||
aom_multi_resolution_encoder_verify_environment() {
|
||||
if [ "$(aom_config_option_enabled CONFIG_MULTI_RES_ENCODING)" = "yes" ]; then
|
||||
if [ ! -e "${YUV_RAW_INPUT}" ]; then
|
||||
elog "Libaom test data must exist in LIBAOM_TEST_DATA_PATH."
|
||||
return 1
|
||||
fi
|
||||
local readonly app="vp8_multi_resolution_encoder"
|
||||
local readonly app="aom_multi_resolution_encoder"
|
||||
if [ -z "$(aom_tool_path "${app}")" ]; then
|
||||
elog "${app} not found. It must exist in LIBAOM_BIN_PATH or its parent."
|
||||
return 1
|
||||
|
@ -30,10 +30,10 @@ vp8_multi_resolution_encoder_verify_environment() {
|
|||
fi
|
||||
}
|
||||
|
||||
# Runs vp8_multi_resolution_encoder. Simply forwards all arguments to
|
||||
# vp8_multi_resolution_encoder after building path to the executable.
|
||||
vp8_mre() {
|
||||
local readonly encoder="$(aom_tool_path vp8_multi_resolution_encoder)"
|
||||
# Runs aom_multi_resolution_encoder. Simply forwards all arguments to
|
||||
# aom_multi_resolution_encoder after building path to the executable.
|
||||
aom_mre() {
|
||||
local readonly encoder="$(aom_tool_path aom_multi_resolution_encoder)"
|
||||
if [ ! -x "${encoder}" ]; then
|
||||
elog "${encoder} does not exist or is not executable."
|
||||
return 1
|
||||
|
@ -42,20 +42,20 @@ vp8_mre() {
|
|||
eval "${AOM_TEST_PREFIX}" "${encoder}" "$@" ${devnull}
|
||||
}
|
||||
|
||||
vp8_multi_resolution_encoder_three_formats() {
|
||||
local readonly output_files="${AOM_TEST_OUTPUT_DIR}/vp8_mre_0.ivf
|
||||
${AOM_TEST_OUTPUT_DIR}/vp8_mre_1.ivf
|
||||
${AOM_TEST_OUTPUT_DIR}/vp8_mre_2.ivf"
|
||||
aom_multi_resolution_encoder_three_formats() {
|
||||
local readonly output_files="${AOM_TEST_OUTPUT_DIR}/aom_mre_0.ivf
|
||||
${AOM_TEST_OUTPUT_DIR}/aom_mre_1.ivf
|
||||
${AOM_TEST_OUTPUT_DIR}/aom_mre_2.ivf"
|
||||
|
||||
if [ "$(aom_config_option_enabled CONFIG_MULTI_RES_ENCODING)" = "yes" ]; then
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
# Param order:
|
||||
# Input width
|
||||
# Input height
|
||||
# Input file path
|
||||
# Output file names
|
||||
# Output PSNR
|
||||
vp8_mre "${YUV_RAW_INPUT_WIDTH}" \
|
||||
aom_mre "${YUV_RAW_INPUT_WIDTH}" \
|
||||
"${YUV_RAW_INPUT_HEIGHT}" \
|
||||
"${YUV_RAW_INPUT}" \
|
||||
${output_files} \
|
||||
|
@ -71,5 +71,5 @@ vp8_multi_resolution_encoder_three_formats() {
|
|||
fi
|
||||
}
|
||||
|
||||
vp8_mre_tests="vp8_multi_resolution_encoder_three_formats"
|
||||
run_tests vp8_multi_resolution_encoder_verify_environment "${vp8_mre_tests}"
|
||||
aom_mre_tests="aom_multi_resolution_encoder_three_formats"
|
||||
run_tests aom_multi_resolution_encoder_verify_environment "${aom_mre_tests}"
|
||||
|
|
|
@ -68,99 +68,99 @@ files_exist() {
|
|||
done
|
||||
}
|
||||
|
||||
# Run aom_temporal_svc_encoder in all supported modes for vp8 and vp9.
|
||||
# Run aom_temporal_svc_encoder in all supported modes for aom and vp9.
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_0() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 0 200 || return 1
|
||||
aom_tsvc_encoder_aom_mode_0() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 0 200 || return 1
|
||||
# Mode 0 produces 1 stream
|
||||
files_exist "${FUNCNAME}" 1 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_1() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 1 200 400 || return 1
|
||||
aom_tsvc_encoder_aom_mode_1() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 1 200 400 || return 1
|
||||
# Mode 1 produces 2 streams
|
||||
files_exist "${FUNCNAME}" 2 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_2() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 2 200 400 || return 1
|
||||
aom_tsvc_encoder_aom_mode_2() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 2 200 400 || return 1
|
||||
# Mode 2 produces 2 streams
|
||||
files_exist "${FUNCNAME}" 2 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_3() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 3 200 400 600 || return 1
|
||||
aom_tsvc_encoder_aom_mode_3() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 3 200 400 600 || return 1
|
||||
# Mode 3 produces 3 streams
|
||||
files_exist "${FUNCNAME}" 3 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_4() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 4 200 400 600 || return 1
|
||||
aom_tsvc_encoder_aom_mode_4() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 4 200 400 600 || return 1
|
||||
# Mode 4 produces 3 streams
|
||||
files_exist "${FUNCNAME}" 3 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_5() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 5 200 400 600 || return 1
|
||||
aom_tsvc_encoder_aom_mode_5() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 5 200 400 600 || return 1
|
||||
# Mode 5 produces 3 streams
|
||||
files_exist "${FUNCNAME}" 3 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_6() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 6 200 400 600 || return 1
|
||||
aom_tsvc_encoder_aom_mode_6() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 6 200 400 600 || return 1
|
||||
# Mode 6 produces 3 streams
|
||||
files_exist "${FUNCNAME}" 3 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_7() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 7 200 400 600 800 1000 || return 1
|
||||
aom_tsvc_encoder_aom_mode_7() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 7 200 400 600 800 1000 || return 1
|
||||
# Mode 7 produces 5 streams
|
||||
files_exist "${FUNCNAME}" 5 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_8() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 8 200 400 || return 1
|
||||
aom_tsvc_encoder_aom_mode_8() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 8 200 400 || return 1
|
||||
# Mode 8 produces 2 streams
|
||||
files_exist "${FUNCNAME}" 2 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_9() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 9 200 400 600 || return 1
|
||||
aom_tsvc_encoder_aom_mode_9() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 9 200 400 600 || return 1
|
||||
# Mode 9 produces 3 streams
|
||||
files_exist "${FUNCNAME}" 3 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_10() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 10 200 400 600 || return 1
|
||||
aom_tsvc_encoder_aom_mode_10() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 10 200 400 600 || return 1
|
||||
# Mode 10 produces 3 streams
|
||||
files_exist "${FUNCNAME}" 3 || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_vp8_mode_11() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder vp8 "${FUNCNAME}" 11 200 400 600 || return 1
|
||||
aom_tsvc_encoder_aom_mode_11() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_tsvc_encoder aom "${FUNCNAME}" 11 200 400 600 || return 1
|
||||
# Mode 11 produces 3 streams
|
||||
files_exist "${FUNCNAME}" 3 || return 1
|
||||
fi
|
||||
|
@ -262,18 +262,18 @@ aom_tsvc_encoder_vp9_mode_11() {
|
|||
fi
|
||||
}
|
||||
|
||||
aom_tsvc_encoder_tests="aom_tsvc_encoder_vp8_mode_0
|
||||
aom_tsvc_encoder_vp8_mode_1
|
||||
aom_tsvc_encoder_vp8_mode_2
|
||||
aom_tsvc_encoder_vp8_mode_3
|
||||
aom_tsvc_encoder_vp8_mode_4
|
||||
aom_tsvc_encoder_vp8_mode_5
|
||||
aom_tsvc_encoder_vp8_mode_6
|
||||
aom_tsvc_encoder_vp8_mode_7
|
||||
aom_tsvc_encoder_vp8_mode_8
|
||||
aom_tsvc_encoder_vp8_mode_9
|
||||
aom_tsvc_encoder_vp8_mode_10
|
||||
aom_tsvc_encoder_vp8_mode_11
|
||||
aom_tsvc_encoder_tests="aom_tsvc_encoder_aom_mode_0
|
||||
aom_tsvc_encoder_aom_mode_1
|
||||
aom_tsvc_encoder_aom_mode_2
|
||||
aom_tsvc_encoder_aom_mode_3
|
||||
aom_tsvc_encoder_aom_mode_4
|
||||
aom_tsvc_encoder_aom_mode_5
|
||||
aom_tsvc_encoder_aom_mode_6
|
||||
aom_tsvc_encoder_aom_mode_7
|
||||
aom_tsvc_encoder_aom_mode_8
|
||||
aom_tsvc_encoder_aom_mode_9
|
||||
aom_tsvc_encoder_aom_mode_10
|
||||
aom_tsvc_encoder_aom_mode_11
|
||||
aom_tsvc_encoder_vp9_mode_0
|
||||
aom_tsvc_encoder_vp9_mode_1
|
||||
aom_tsvc_encoder_vp9_mode_2
|
||||
|
|
|
@ -8,30 +8,30 @@
|
|||
## in the file PATENTS. All contributing project authors may
|
||||
## be found in the AUTHORS file in the root of the source tree.
|
||||
##
|
||||
## This file tests the libaom vp8cx_set_ref example. To add new tests to this
|
||||
## This file tests the libaom aomcx_set_ref example. To add new tests to this
|
||||
## file, do the following:
|
||||
## 1. Write a shell function (this is your test).
|
||||
## 2. Add the function to vp8cx_set_ref_tests (on a new line).
|
||||
## 2. Add the function to aomcx_set_ref_tests (on a new line).
|
||||
##
|
||||
. $(dirname $0)/tools_common.sh
|
||||
|
||||
# Environment check: $YUV_RAW_INPUT is required.
|
||||
vp8cx_set_ref_verify_environment() {
|
||||
aomcx_set_ref_verify_environment() {
|
||||
if [ ! -e "${YUV_RAW_INPUT}" ]; then
|
||||
echo "Libaom test data must exist in LIBAOM_TEST_DATA_PATH."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Runs vp8cx_set_ref and updates the reference frame before encoding frame 90.
|
||||
# $1 is the codec name, which vp8cx_set_ref does not support at present: It's
|
||||
# Runs aomcx_set_ref and updates the reference frame before encoding frame 90.
|
||||
# $1 is the codec name, which aomcx_set_ref does not support at present: It's
|
||||
# currently used only to name the output file.
|
||||
# TODO(tomfinegan): Pass the codec param once the example is updated to support
|
||||
# AV1.
|
||||
aom_set_ref() {
|
||||
local encoder="${LIBAOM_BIN_PATH}/vp8cx_set_ref${AOM_TEST_EXE_SUFFIX}"
|
||||
local encoder="${LIBAOM_BIN_PATH}/aomcx_set_ref${AOM_TEST_EXE_SUFFIX}"
|
||||
local codec="$1"
|
||||
local output_file="${AOM_TEST_OUTPUT_DIR}/vp8cx_set_ref_${codec}.ivf"
|
||||
local output_file="${AOM_TEST_OUTPUT_DIR}/aomcx_set_ref_${codec}.ivf"
|
||||
local ref_frame_num=90
|
||||
|
||||
if [ ! -x "${encoder}" ]; then
|
||||
|
@ -46,12 +46,12 @@ aom_set_ref() {
|
|||
[ -e "${output_file}" ] || return 1
|
||||
}
|
||||
|
||||
vp8cx_set_ref_vp8() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aom_set_ref vp8 || return 1
|
||||
aomcx_set_ref_aom() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
aom_set_ref aom || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
vp8cx_set_ref_tests="vp8cx_set_ref_vp8"
|
||||
aomcx_set_ref_tests="aomcx_set_ref_aom"
|
||||
|
||||
run_tests vp8cx_set_ref_verify_environment "${vp8cx_set_ref_tests}"
|
||||
run_tests aomcx_set_ref_verify_environment "${aomcx_set_ref_tests}"
|
||||
|
|
|
@ -49,8 +49,8 @@ aomdec() {
|
|||
eval "${AOM_TEST_PREFIX}" "${decoder}" "$input" "$@" ${devnull}
|
||||
}
|
||||
|
||||
aomdec_can_decode_vp8() {
|
||||
if [ "$(vp8_decode_available)" = "yes" ]; then
|
||||
aomdec_can_decode_aom() {
|
||||
if [ "$(aom_decode_available)" = "yes" ]; then
|
||||
echo yes
|
||||
fi
|
||||
}
|
||||
|
@ -61,14 +61,14 @@ aomdec_can_decode_vp9() {
|
|||
fi
|
||||
}
|
||||
|
||||
aomdec_vp8_ivf() {
|
||||
if [ "$(aomdec_can_decode_vp8)" = "yes" ]; then
|
||||
aomdec_aom_ivf() {
|
||||
if [ "$(aomdec_can_decode_aom)" = "yes" ]; then
|
||||
aomdec "${AOM_IVF_FILE}" --summary --noblit
|
||||
fi
|
||||
}
|
||||
|
||||
aomdec_vp8_ivf_pipe_input() {
|
||||
if [ "$(aomdec_can_decode_vp8)" = "yes" ]; then
|
||||
aomdec_aom_ivf_pipe_input() {
|
||||
if [ "$(aomdec_can_decode_aom)" = "yes" ]; then
|
||||
aomdec_pipe "${AOM_IVF_FILE}" --summary --noblit
|
||||
fi
|
||||
}
|
||||
|
@ -107,8 +107,8 @@ aomdec_vp9_webm_less_than_50_frames() {
|
|||
fi
|
||||
}
|
||||
|
||||
aomdec_tests="aomdec_vp8_ivf
|
||||
aomdec_vp8_ivf_pipe_input
|
||||
aomdec_tests="aomdec_aom_ivf
|
||||
aomdec_aom_ivf_pipe_input
|
||||
aomdec_vp9_webm
|
||||
aomdec_vp9_webm_frame_parallel
|
||||
aomdec_vp9_webm_less_than_50_frames"
|
||||
|
|
|
@ -36,8 +36,8 @@ aomenc_verify_environment() {
|
|||
fi
|
||||
}
|
||||
|
||||
aomenc_can_encode_vp8() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
aomenc_can_encode_aom() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
echo yes
|
||||
fi
|
||||
}
|
||||
|
@ -65,9 +65,9 @@ y4m_input_720p() {
|
|||
}
|
||||
|
||||
# Echo default aomenc real time encoding params. $1 is the codec, which defaults
|
||||
# to vp8 if unspecified.
|
||||
# to aom if unspecified.
|
||||
aomenc_rt_params() {
|
||||
local readonly codec="${1:-vp8}"
|
||||
local readonly codec="${1:-aom}"
|
||||
echo "--codec=${codec}
|
||||
--buf-initial-sz=500
|
||||
--buf-optimal-sz=600
|
||||
|
@ -115,11 +115,11 @@ aomenc() {
|
|||
"$@" ${devnull}
|
||||
}
|
||||
|
||||
aomenc_vp8_ivf() {
|
||||
if [ "$(aomenc_can_encode_vp8)" = "yes" ]; then
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/vp8.ivf"
|
||||
aomenc_aom_ivf() {
|
||||
if [ "$(aomenc_can_encode_aom)" = "yes" ]; then
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/aom.ivf"
|
||||
aomenc $(yuv_input_hantro_collage) \
|
||||
--codec=vp8 \
|
||||
--codec=aom \
|
||||
--limit="${TEST_FRAMES}" \
|
||||
--ivf \
|
||||
--output="${output}"
|
||||
|
@ -131,12 +131,12 @@ aomenc_vp8_ivf() {
|
|||
fi
|
||||
}
|
||||
|
||||
aomenc_vp8_webm() {
|
||||
if [ "$(aomenc_can_encode_vp8)" = "yes" ] && \
|
||||
aomenc_aom_webm() {
|
||||
if [ "$(aomenc_can_encode_aom)" = "yes" ] && \
|
||||
[ "$(webm_io_available)" = "yes" ]; then
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/vp8.webm"
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/aom.webm"
|
||||
aomenc $(yuv_input_hantro_collage) \
|
||||
--codec=vp8 \
|
||||
--codec=aom \
|
||||
--limit="${TEST_FRAMES}" \
|
||||
--output="${output}"
|
||||
|
||||
|
@ -147,12 +147,12 @@ aomenc_vp8_webm() {
|
|||
fi
|
||||
}
|
||||
|
||||
aomenc_vp8_webm_rt() {
|
||||
if [ "$(aomenc_can_encode_vp8)" = "yes" ] && \
|
||||
aomenc_aom_webm_rt() {
|
||||
if [ "$(aomenc_can_encode_aom)" = "yes" ] && \
|
||||
[ "$(webm_io_available)" = "yes" ]; then
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/vp8_rt.webm"
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/aom_rt.webm"
|
||||
aomenc $(yuv_input_hantro_collage) \
|
||||
$(aomenc_rt_params vp8) \
|
||||
$(aomenc_rt_params aom) \
|
||||
--output="${output}"
|
||||
if [ ! -e "${output}" ]; then
|
||||
elog "Output file does not exist."
|
||||
|
@ -161,12 +161,12 @@ aomenc_vp8_webm_rt() {
|
|||
fi
|
||||
}
|
||||
|
||||
aomenc_vp8_webm_2pass() {
|
||||
if [ "$(aomenc_can_encode_vp8)" = "yes" ] && \
|
||||
aomenc_aom_webm_2pass() {
|
||||
if [ "$(aomenc_can_encode_aom)" = "yes" ] && \
|
||||
[ "$(webm_io_available)" = "yes" ]; then
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/vp8.webm"
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/aom.webm"
|
||||
aomenc $(yuv_input_hantro_collage) \
|
||||
--codec=vp8 \
|
||||
--codec=aom \
|
||||
--limit="${TEST_FRAMES}" \
|
||||
--output="${output}" \
|
||||
--passes=2
|
||||
|
@ -178,14 +178,14 @@ aomenc_vp8_webm_2pass() {
|
|||
fi
|
||||
}
|
||||
|
||||
aomenc_vp8_webm_lag10_frames20() {
|
||||
if [ "$(aomenc_can_encode_vp8)" = "yes" ] && \
|
||||
aomenc_aom_webm_lag10_frames20() {
|
||||
if [ "$(aomenc_can_encode_aom)" = "yes" ] && \
|
||||
[ "$(webm_io_available)" = "yes" ]; then
|
||||
local readonly lag_total_frames=20
|
||||
local readonly lag_frames=10
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/vp8_lag10_frames20.webm"
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/aom_lag10_frames20.webm"
|
||||
aomenc $(yuv_input_hantro_collage) \
|
||||
--codec=vp8 \
|
||||
--codec=aom \
|
||||
--limit="${lag_total_frames}" \
|
||||
--lag-in-frames="${lag_frames}" \
|
||||
--output="${output}" \
|
||||
|
@ -199,11 +199,11 @@ aomenc_vp8_webm_lag10_frames20() {
|
|||
fi
|
||||
}
|
||||
|
||||
aomenc_vp8_ivf_piped_input() {
|
||||
if [ "$(aomenc_can_encode_vp8)" = "yes" ]; then
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/vp8_piped_input.ivf"
|
||||
aomenc_aom_ivf_piped_input() {
|
||||
if [ "$(aomenc_can_encode_aom)" = "yes" ]; then
|
||||
local readonly output="${AOM_TEST_OUTPUT_DIR}/aom_piped_input.ivf"
|
||||
aomenc_pipe $(yuv_input_hantro_collage) \
|
||||
--codec=vp8 \
|
||||
--codec=aom \
|
||||
--limit="${TEST_FRAMES}" \
|
||||
--ivf \
|
||||
--output="${output}"
|
||||
|
@ -409,12 +409,12 @@ aomenc_vp9_webm_non_square_par() {
|
|||
fi
|
||||
}
|
||||
|
||||
aomenc_tests="aomenc_vp8_ivf
|
||||
aomenc_vp8_webm
|
||||
aomenc_vp8_webm_rt
|
||||
aomenc_vp8_webm_2pass
|
||||
aomenc_vp8_webm_lag10_frames20
|
||||
aomenc_vp8_ivf_piped_input
|
||||
aomenc_tests="aomenc_aom_ivf
|
||||
aomenc_aom_webm
|
||||
aomenc_aom_webm_rt
|
||||
aomenc_aom_webm_2pass
|
||||
aomenc_aom_webm_lag10_frames20
|
||||
aomenc_aom_ivf_piped_input
|
||||
aomenc_vp9_ivf
|
||||
aomenc_vp9_webm
|
||||
aomenc_vp9_webm_rt
|
||||
|
|
|
@ -47,8 +47,8 @@ bool Decoder::IsAOM() const {
|
|||
void DecoderTest::HandlePeekResult(Decoder *const decoder,
|
||||
CompressedVideoSource *video,
|
||||
const aom_codec_err_t res_peek) {
|
||||
const bool is_vp8 = decoder->IsAOM();
|
||||
if (is_vp8) {
|
||||
const bool is_aom = decoder->IsAOM();
|
||||
if (is_aom) {
|
||||
/* Vp8's implementation of PeekStream returns an error if the frame you
|
||||
* pass it is not a keyframe, so we only expect AOM_CODEC_OK on the first
|
||||
* frame, which must be a keyframe. */
|
||||
|
|
|
@ -49,12 +49,12 @@ decode_to_md5() {
|
|||
[ "${actual_md5}" = "${expected_md5}" ] || return 1
|
||||
}
|
||||
|
||||
decode_to_md5_vp8() {
|
||||
decode_to_md5_aom() {
|
||||
# expected MD5 sum for the last frame.
|
||||
local expected_md5="56794d911b02190212bca92f88ad60c6"
|
||||
|
||||
if [ "$(vp8_decode_available)" = "yes" ]; then
|
||||
decode_to_md5 "${AOM_IVF_FILE}" "vp8" "${expected_md5}"
|
||||
if [ "$(aom_decode_available)" = "yes" ]; then
|
||||
decode_to_md5 "${AOM_IVF_FILE}" "aom" "${expected_md5}"
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ decode_to_md5_vp9() {
|
|||
fi
|
||||
}
|
||||
|
||||
decode_to_md5_tests="decode_to_md5_vp8
|
||||
decode_to_md5_tests="decode_to_md5_aom
|
||||
decode_to_md5_vp9"
|
||||
|
||||
run_tests decode_to_md5_verify_environment "${decode_to_md5_tests}"
|
||||
|
|
|
@ -49,13 +49,13 @@ decode_with_drops() {
|
|||
# and once in pattern mode.
|
||||
# Note: This test assumes that $AOM_IVF_FILE has exactly 29 frames, and could
|
||||
# break if the file is modified.
|
||||
decode_with_drops_vp8() {
|
||||
if [ "$(vp8_decode_available)" = "yes" ]; then
|
||||
decode_with_drops_aom() {
|
||||
if [ "$(aom_decode_available)" = "yes" ]; then
|
||||
# Test sequence mode: Drop frames 2-28.
|
||||
decode_with_drops "${AOM_IVF_FILE}" "vp8" "2-28"
|
||||
decode_with_drops "${AOM_IVF_FILE}" "aom" "2-28"
|
||||
|
||||
# Test pattern mode: Drop 3 of every 4 frames.
|
||||
decode_with_drops "${AOM_IVF_FILE}" "vp8" "3/4"
|
||||
decode_with_drops "${AOM_IVF_FILE}" "aom" "3/4"
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -73,7 +73,7 @@ decode_with_drops_vp9() {
|
|||
fi
|
||||
}
|
||||
|
||||
decode_with_drops_tests="decode_with_drops_vp8
|
||||
decode_with_drops_tests="decode_with_drops_aom
|
||||
decode_with_drops_vp9"
|
||||
|
||||
run_tests decode_with_drops_verify_environment "${decode_with_drops_tests}"
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
*/
|
||||
|
||||
#include "./aom_config.h"
|
||||
#include "./vp8_rtcd.h"
|
||||
#include "./aom_rtcd.h"
|
||||
|
||||
#include "third_party/googletest/src/include/gtest/gtest.h"
|
||||
|
||||
|
@ -109,13 +109,13 @@ TEST_P(IDCTTest, TestWithData) {
|
|||
EXPECT_EQ(0, output[i]) << "i==" << i;
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(C, IDCTTest, ::testing::Values(vp8_short_idct4x4llm_c));
|
||||
INSTANTIATE_TEST_CASE_P(C, IDCTTest, ::testing::Values(aom_short_idct4x4llm_c));
|
||||
#if HAVE_MMX
|
||||
INSTANTIATE_TEST_CASE_P(MMX, IDCTTest,
|
||||
::testing::Values(vp8_short_idct4x4llm_mmx));
|
||||
::testing::Values(aom_short_idct4x4llm_mmx));
|
||||
#endif
|
||||
#if HAVE_MSA
|
||||
INSTANTIATE_TEST_CASE_P(MSA, IDCTTest,
|
||||
::testing::Values(vp8_short_idct4x4llm_msa));
|
||||
::testing::Values(aom_short_idct4x4llm_msa));
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -41,9 +41,9 @@ set_maps() {
|
|||
[ -e "${output_file}" ] || return 1
|
||||
}
|
||||
|
||||
set_maps_vp8() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
set_maps vp8 || return 1
|
||||
set_maps_aom() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
set_maps aom || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -53,7 +53,7 @@ set_maps_vp9() {
|
|||
fi
|
||||
}
|
||||
|
||||
set_maps_tests="set_maps_vp8
|
||||
set_maps_tests="set_maps_aom
|
||||
set_maps_vp9"
|
||||
|
||||
run_tests set_maps_verify_environment "${set_maps_tests}"
|
||||
|
|
|
@ -43,9 +43,9 @@ simple_decoder() {
|
|||
[ -e "${output_file}" ] || return 1
|
||||
}
|
||||
|
||||
simple_decoder_vp8() {
|
||||
if [ "$(vp8_decode_available)" = "yes" ]; then
|
||||
simple_decoder "${AOM_IVF_FILE}" vp8 || return 1
|
||||
simple_decoder_aom() {
|
||||
if [ "$(aom_decode_available)" = "yes" ]; then
|
||||
simple_decoder "${AOM_IVF_FILE}" aom || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ simple_decoder_vp9() {
|
|||
fi
|
||||
}
|
||||
|
||||
simple_decoder_tests="simple_decoder_vp8
|
||||
simple_decoder_tests="simple_decoder_aom
|
||||
simple_decoder_vp9"
|
||||
|
||||
run_tests simple_decoder_verify_environment "${simple_decoder_tests}"
|
||||
|
|
|
@ -41,9 +41,9 @@ simple_encoder() {
|
|||
[ -e "${output_file}" ] || return 1
|
||||
}
|
||||
|
||||
simple_encoder_vp8() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
simple_encoder vp8 || return 1
|
||||
simple_encoder_aom() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
simple_encoder aom || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -56,7 +56,7 @@ DISABLED_simple_encoder_vp9() {
|
|||
fi
|
||||
}
|
||||
|
||||
simple_encoder_tests="simple_encoder_vp8
|
||||
simple_encoder_tests="simple_encoder_aom
|
||||
DISABLED_simple_encoder_vp9"
|
||||
|
||||
run_tests simple_encoder_verify_environment "${simple_encoder_tests}"
|
||||
|
|
|
@ -383,7 +383,7 @@ if [ "$(is_windows_target)" = "yes" ]; then
|
|||
fi
|
||||
|
||||
# Variables shared by tests.
|
||||
AOM_IVF_FILE="${LIBAOM_TEST_DATA_PATH}/vp80-00-comprehensive-001.ivf"
|
||||
AOM_IVF_FILE="${LIBAOM_TEST_DATA_PATH}/aom0-00-comprehensive-001.ivf"
|
||||
AV1_IVF_FILE="${LIBAOM_TEST_DATA_PATH}/vp90-2-09-subpixel-00.ivf"
|
||||
|
||||
AV1_WEBM_FILE="${LIBAOM_TEST_DATA_PATH}/vp90-2-00-quantizer-00.webm"
|
||||
|
|
|
@ -41,9 +41,9 @@ twopass_encoder() {
|
|||
[ -e "${output_file}" ] || return 1
|
||||
}
|
||||
|
||||
twopass_encoder_vp8() {
|
||||
if [ "$(vp8_encode_available)" = "yes" ]; then
|
||||
twopass_encoder vp8 || return 1
|
||||
twopass_encoder_aom() {
|
||||
if [ "$(aom_encode_available)" = "yes" ]; then
|
||||
twopass_encoder aom || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -56,7 +56,7 @@ DISABLED_twopass_encoder_vp9() {
|
|||
fi
|
||||
}
|
||||
|
||||
twopass_encoder_tests="twopass_encoder_vp8
|
||||
twopass_encoder_tests="twopass_encoder_aom
|
||||
DISABLED_twopass_encoder_vp9"
|
||||
|
||||
run_tests twopass_encoder_verify_environment "${twopass_encoder_tests}"
|
||||
|
|
|
@ -109,7 +109,7 @@ static uint32_t variance_ref(const uint8_t *src, const uint8_t *ref, int l2w,
|
|||
* they calculate the bilinear factors directly instead of using a lookup table
|
||||
* and therefore upshift xoff and yoff by 1. Only every other calculated value
|
||||
* is used so the codec version shrinks the table to save space and maintain
|
||||
* compatibility with vp8.
|
||||
* compatibility with aom.
|
||||
*/
|
||||
static uint32_t subpel_variance_ref(const uint8_t *ref, const uint8_t *src,
|
||||
int l2w, int l2h, int xoff, int yoff,
|
||||
|
|
Загрузка…
Ссылка в новой задаче