168e1c830ade592be74773e249bf94e2bbfb50de7Johann/* 268e1c830ade592be74773e249bf94e2bbfb50de7Johann * Copyright (c) 2015 The WebM project authors. All Rights Reserved. 368e1c830ade592be74773e249bf94e2bbfb50de7Johann * 468e1c830ade592be74773e249bf94e2bbfb50de7Johann * Use of this source code is governed by a BSD-style license 568e1c830ade592be74773e249bf94e2bbfb50de7Johann * that can be found in the LICENSE file in the root of the source 668e1c830ade592be74773e249bf94e2bbfb50de7Johann * tree. An additional intellectual property rights grant can be found 768e1c830ade592be74773e249bf94e2bbfb50de7Johann * in the file PATENTS. All contributing project authors may 868e1c830ade592be74773e249bf94e2bbfb50de7Johann * be found in the AUTHORS file in the root of the source tree. 968e1c830ade592be74773e249bf94e2bbfb50de7Johann */ 1068e1c830ade592be74773e249bf94e2bbfb50de7Johann 1168e1c830ade592be74773e249bf94e2bbfb50de7Johann#include <stdlib.h> 1268e1c830ade592be74773e249bf94e2bbfb50de7Johann#include "./macros_msa.h" 1368e1c830ade592be74773e249bf94e2bbfb50de7Johann 147bc9febe8749e98a3812a0dc4380ceae75c29450Johannvoid vpx_plane_add_noise_msa(uint8_t *start_ptr, const int8_t *noise, 157bc9febe8749e98a3812a0dc4380ceae75c29450Johann int blackclamp, int whiteclamp, int width, 167bc9febe8749e98a3812a0dc4380ceae75c29450Johann int height, int32_t pitch) { 177bc9febe8749e98a3812a0dc4380ceae75c29450Johann int i, j; 187bc9febe8749e98a3812a0dc4380ceae75c29450Johann v16u8 pos0, pos1, ref0, ref1; 197bc9febe8749e98a3812a0dc4380ceae75c29450Johann v16i8 black_clamp, white_clamp, both_clamp; 207bc9febe8749e98a3812a0dc4380ceae75c29450Johann 217bc9febe8749e98a3812a0dc4380ceae75c29450Johann black_clamp = __msa_fill_b(blackclamp); 227bc9febe8749e98a3812a0dc4380ceae75c29450Johann white_clamp = __msa_fill_b(whiteclamp); 237bc9febe8749e98a3812a0dc4380ceae75c29450Johann both_clamp = black_clamp + white_clamp; 247bc9febe8749e98a3812a0dc4380ceae75c29450Johann both_clamp = -both_clamp; 2568e1c830ade592be74773e249bf94e2bbfb50de7Johann 2668e1c830ade592be74773e249bf94e2bbfb50de7Johann for (i = 0; i < height / 2; ++i) { 2768e1c830ade592be74773e249bf94e2bbfb50de7Johann uint8_t *pos0_ptr = start_ptr + (2 * i) * pitch; 287bc9febe8749e98a3812a0dc4380ceae75c29450Johann const int8_t *ref0_ptr = noise + (rand() & 0xff); 2968e1c830ade592be74773e249bf94e2bbfb50de7Johann uint8_t *pos1_ptr = start_ptr + (2 * i + 1) * pitch; 307bc9febe8749e98a3812a0dc4380ceae75c29450Johann const int8_t *ref1_ptr = noise + (rand() & 0xff); 3168e1c830ade592be74773e249bf94e2bbfb50de7Johann for (j = width / 16; j--;) { 3268e1c830ade592be74773e249bf94e2bbfb50de7Johann pos0 = LD_UB(pos0_ptr); 3368e1c830ade592be74773e249bf94e2bbfb50de7Johann ref0 = LD_UB(ref0_ptr); 3468e1c830ade592be74773e249bf94e2bbfb50de7Johann pos1 = LD_UB(pos1_ptr); 3568e1c830ade592be74773e249bf94e2bbfb50de7Johann ref1 = LD_UB(ref1_ptr); 367bc9febe8749e98a3812a0dc4380ceae75c29450Johann pos0 = __msa_subsus_u_b(pos0, black_clamp); 377bc9febe8749e98a3812a0dc4380ceae75c29450Johann pos1 = __msa_subsus_u_b(pos1, black_clamp); 387bc9febe8749e98a3812a0dc4380ceae75c29450Johann pos0 = __msa_subsus_u_b(pos0, both_clamp); 397bc9febe8749e98a3812a0dc4380ceae75c29450Johann pos1 = __msa_subsus_u_b(pos1, both_clamp); 407bc9febe8749e98a3812a0dc4380ceae75c29450Johann pos0 = __msa_subsus_u_b(pos0, white_clamp); 417bc9febe8749e98a3812a0dc4380ceae75c29450Johann pos1 = __msa_subsus_u_b(pos1, white_clamp); 4268e1c830ade592be74773e249bf94e2bbfb50de7Johann pos0 += ref0; 4368e1c830ade592be74773e249bf94e2bbfb50de7Johann ST_UB(pos0, pos0_ptr); 4468e1c830ade592be74773e249bf94e2bbfb50de7Johann pos1 += ref1; 4568e1c830ade592be74773e249bf94e2bbfb50de7Johann ST_UB(pos1, pos1_ptr); 4668e1c830ade592be74773e249bf94e2bbfb50de7Johann pos0_ptr += 16; 4768e1c830ade592be74773e249bf94e2bbfb50de7Johann pos1_ptr += 16; 4868e1c830ade592be74773e249bf94e2bbfb50de7Johann ref0_ptr += 16; 4968e1c830ade592be74773e249bf94e2bbfb50de7Johann ref1_ptr += 16; 5068e1c830ade592be74773e249bf94e2bbfb50de7Johann } 5168e1c830ade592be74773e249bf94e2bbfb50de7Johann } 5268e1c830ade592be74773e249bf94e2bbfb50de7Johann} 53