/* * 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.
*/
bool av1_resize_and_extend_frame_nonnormative(const YV12_BUFFER_CONFIG *src,
YV12_BUFFER_CONFIG *dst, int bd, int num_planes);
// Calculates the scaled dimensions from the given original dimensions and the // resize scale denominator. void av1_calculate_scaled_size(int *width, int *height, int resize_denom);
// Similar to above, but calculates scaled dimensions after superres from the // given original dimensions and superres scale denominator. void av1_calculate_scaled_superres_size(int *width, int *height, int superres_denom);
void av1_superres_upscale(AV1_COMMON *cm, BufferPool *const pool, bool alloc_pyramid);
bool av1_resize_plane_to_half(const uint8_t *const input, int height, int width, int in_stride, uint8_t *output, int height2, int width2, int out_stride);
void down2_symeven(const uint8_t *const input, int length, uint8_t *output, int start_offset);
bool should_resize_by_half(int height, int width, int height2, int width2);
// Returns 1 if a superres upscaled frame is scaled and 0 otherwise. staticinlineint av1_superres_scaled(const AV1_COMMON *cm) { // Note: for some corner cases (e.g. cm->width of 1), there may be no scaling // required even though cm->superres_scale_denominator != SCALE_NUMERATOR. // So, the following check is more accurate. return (cm->width != cm->superres_upscaled_width);
}
// The optimized scaler av1_resize_and_extend_frame() can only handle scaling // ratios >= 1/4 and <= 16. See comment in aom_scaled_2d_c() for detail. // Visual assessment shows that if the scaling ratio or its reciprocal is not a // multiple of 1/16, there are some artifacts in the output of the optimized // scaler, especially on lines, due to non-exact ratio representation. SSSE3 // and NEON have a specialized 3/4 version of av1_resize_and_extend_frame() // that does not have this issue. // // Use the non-normative scaler av1_resize_and_extend_frame_nonnormative() // for other scaling ratios. staticinlinebool av1_has_optimized_scaler(constint src_width, constint src_height, constint dst_width, constint dst_height) { bool has_optimized_scaler =
(dst_width * 4 >= src_width && dst_height * 4 >= src_height) &&
(dst_width <= src_width * 16 && dst_height <= src_height * 16) &&
(16 * dst_width % src_width == 0) && (16 * src_width % dst_width == 0) &&
(16 * dst_height % src_height == 0) &&
(16 * src_height % dst_height == 0); #if HAVE_SSSE3 || HAVE_NEON
has_optimized_scaler =
has_optimized_scaler ||
(4 * dst_width == 3 * src_width && 4 * dst_height == 3 * src_height); #endif return has_optimized_scaler;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.