15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)#ifndef MEDIA_BASE_SIMD_CONVERT_RGB_TO_YUV_SSSE3_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MEDIA_BASE_SIMD_CONVERT_RGB_TO_YUV_SSSE3_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The header file for ASM functions that convert a row of RGB pixels with SSSE3 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// instructions so we can call them from C++ code. These functions are 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// implemented in "convert_rgb_to_yuv_ssse3.asm". 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// We use ptrdiff_t instead of int for yasm routine parameters to portably 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// sign-extend int. On Win64, MSVC does not sign-extend the value in the stack 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// home of int function parameters, and yasm routines are unaware of this lack 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// of extension and fault. ptrdiff_t is portably sign-extended and fixes this 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// issue on at least Win64. 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert a row of 24-bit RGB pixels to YV12 pixels. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConvertRGBToYUVRow_SSSE3(const uint8* rgb, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8* y, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8* u, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8* v, 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ptrdiff_t width); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert a row of 32-bit RGB pixels to YV12 pixels. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConvertARGBToYUVRow_SSSE3(const uint8* argb, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8* y, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8* u, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8* v, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ptrdiff_t width); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // MEDIA_BASE_SIMD_CONVERT_RGB_TO_YUV_SSSE3_H_ 41