15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/simd/filter_yuv.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media {
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FilterYUVRows_C(uint8* ybuf, const uint8* y0_ptr, const uint8* y1_ptr,
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int source_width, int source_y_fraction) {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int y1_fraction = source_y_fraction;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int y0_fraction = 256 - y1_fraction;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8* end = ybuf + source_width;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8* rounded_end = ybuf + (source_width & ~7);
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (ybuf < rounded_end) {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ybuf[0] = (y0_ptr[0] * y0_fraction + y1_ptr[0] * y1_fraction) >> 8;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ybuf[1] = (y0_ptr[1] * y0_fraction + y1_ptr[1] * y1_fraction) >> 8;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ybuf[2] = (y0_ptr[2] * y0_fraction + y1_ptr[2] * y1_fraction) >> 8;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ybuf[3] = (y0_ptr[3] * y0_fraction + y1_ptr[3] * y1_fraction) >> 8;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ybuf[4] = (y0_ptr[4] * y0_fraction + y1_ptr[4] * y1_fraction) >> 8;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ybuf[5] = (y0_ptr[5] * y0_fraction + y1_ptr[5] * y1_fraction) >> 8;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ybuf[6] = (y0_ptr[6] * y0_fraction + y1_ptr[6] * y1_fraction) >> 8;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ybuf[7] = (y0_ptr[7] * y0_fraction + y1_ptr[7] * y1_fraction) >> 8;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    y0_ptr += 8;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    y1_ptr += 8;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ybuf += 8;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (ybuf < end) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ybuf[0] = (y0_ptr[0] * y0_fraction + y1_ptr[0] * y1_fraction) >> 8;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++ybuf;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++y0_ptr;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++y1_ptr;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace media
39