void aom_upsampled_pred_sse2(MACROBLOCKD *xd, conststruct AV1Common *const cm,
int mi_row, int mi_col, const MV *const mv,
uint8_t *comp_pred, int width, int height,
int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride,
int subpel_search) {
if (aom_upsampled_pred_scaled(xd, cm, mi_row, mi_col, mv, comp_pred, width,
height)) { return;
}
const InterpFilterParams *filter = av1_get_filter(subpel_search); // (TODO:yunqing) 2-tap case uses 4-tap functions since there is no SIMD for // 2-tap yet.
int filter_taps = (subpel_search <= USE_4_TAPS) ? 4 : SUBPEL_TAPS;
#if CONFIG_AV1_HIGHBITDEPTH void aom_highbd_upsampled_pred_sse2(MACROBLOCKD *xd, conststruct AV1Common *const cm,
int mi_row, int mi_col, const MV *const mv,
uint8_t *comp_pred8, int width, int height,
int subpel_x_q3, int subpel_y_q3, const uint8_t *ref8, int ref_stride, int bd,
int subpel_search) {
if (aom_upsampled_pred_scaled(xd, cm, mi_row, mi_col, mv, comp_pred8, width,
height)) { return;
}
void aom_highbd_comp_avg_upsampled_pred_sse2(
MACROBLOCKD *xd, conststruct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred8, const uint8_t *pred8, int width,
int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref8,
int ref_stride, int bd, int subpel_search) {
aom_highbd_upsampled_pred(xd, cm, mi_row, mi_col, mv, comp_pred8, width,
height, subpel_x_q3, subpel_y_q3, ref8, ref_stride,
bd, subpel_search);
uint16_t *pred = CONVERT_TO_SHORTPTR(pred8);
uint16_t *comp_pred16 = CONVERT_TO_SHORTPTR(comp_pred8); /*The total number of pixels must be a multiple of 8 (e.g., 4x4).*/
assert(!(width * height & 7));
int n = width * height >> 3;
for (int i = 0; i < n; i++) {
__m128i s0 = _mm_loadu_si128((const __m128i *)comp_pred16);
__m128i p0 = _mm_loadu_si128((const __m128i *)pred);
_mm_storeu_si128((__m128i *)comp_pred16, _mm_avg_epu16(s0, p0));
comp_pred16 += 8;
pred += 8;
}
} #endif// CONFIG_AV1_HIGHBITDEPTH
void aom_comp_avg_upsampled_pred_sse2(
MACROBLOCKD *xd, conststruct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width,
int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref,
int ref_stride, int subpel_search) {
int n;
int i;
aom_upsampled_pred(xd, cm, mi_row, mi_col, mv, comp_pred, width, height,
subpel_x_q3, subpel_y_q3, ref, ref_stride, subpel_search); /*The total number of pixels must be a multiple of 16 (e.g., 4x4).*/
assert(!(width * height & 15));
n = width * height >> 4;
for (i = 0; i < n; i++) {
__m128i s0 = xx_loadu_128(comp_pred);
__m128i p0 = xx_loadu_128(pred);
xx_storeu_128(comp_pred, _mm_avg_epu8(s0, p0));
comp_pred += 16;
pred += 16;
}
}
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.