Chromium Code Reviews| Index: media/base/simd/convert_row.asm |
| =================================================================== |
| --- media/base/simd/convert_row.asm (revision 0) |
| +++ media/base/simd/convert_row.asm (revision 0) |
| @@ -0,0 +1,144 @@ |
| +; Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +; Use of this source code is governed by a BSD-style license that can be |
| +; found in the LICENSE file. |
| + |
| +%include "convert_row.inc" |
| + |
| +; |
| +; The numer of fractional bits used for fixed-point calculation. |
| +; |
| +%define SHIFT_BITS 12 |
| + |
| +; |
| +; Tables used for RGB-to-YV12 conversion and YV12-to-RGB conversion. These |
| +; tables represent the conversion matrices used for the conversions as listed in |
| +; following C++ snippet. Unfortunately, we need to use precalculated constants |
| +; here since the yasm preprocessor cannot handle complicated floating-point |
| +; calculation. |
| +; |
| +; #define FIX(n) ((n) * (1 << SHIFT_BITS) + 0.5) |
| +; |
| +; int16 SIMD_ConvertRGBAToYUV_kTable[8 * 3] = { |
|
fbarchard
2011/06/10 17:29:45
I suggest calling this SIMD_ConvertARGBToYUV which
|
| +; FIX(0.098), FIX(0.504), FIX(0.257), 0, |
| +; FIX(0.098), FIX(0.504), FIX(0.257), 0, |
| +; FIX(0.5), 0, FIX(0.5), 0, |
| +; FIX(0.5), 0, FIX(0.5), 0, |
| +; FIX(0.439), -FIX(0.291), -FIX(0.148), 0, |
| +; -FIX(0.071), -FIX(0.368), FIX(0.439), 0, |
| +; }; |
| +; |
| +; int16 SIMD_ConvertYUVtoRGBA_kTable[8 * 2] = { |
| +; -16, -128, -128, FIX(0.5), |
| +; FIX(1.164), 0, FIX(1.596), 1, |
| +; FIX(1.164), -FIX(0.391), -FIX(0.813), 1, |
| +; FIX(1.164), FIX(2.018), 0, 1, |
| +; }; |
| +; |
| + SECTION SEG_CONST |
| + |
| + global EXTN(SIMD_ConvertRGBAToYUVRow_kTable) PRIVATE |
| + |
| +EXTN(SIMD_ConvertRGBAToYUVRow_kTable): |
| +%if SHIFT_BITS == 8 |
| + dw 25, 129, 66, 0, 25, 129, 66, 0 |
| + dw 128, 0, 128, 0, 128, 0, 128, 0 |
| + dw 112, -74, -38, 0, -18, -94, 112, 0 |
| +%elif SHIFT_BITS == 12 |
| + dw 401, 2064, 1053, 0 |
| + dw 401, 2064, 1053, 0 |
| + dw 2048, 0, 2048, 0 |
|
rbultje
2011/06/10 18:26:33
You can "simplify" these tables using preprocessor
|
| + dw 2048, 0, 2048, 0 |
| + dw 1798, -1191, -605, 0 |
| + dw -290, -1506, 1798, 0 |
| +%endif |
| + |
| + global EXTN(SIMD_ConvertYUVtoRGBA_kTable) PRIVATE |
| + |
| +EXTN(SIMD_ConvertYUVtoRGBA_kTable): |
| +%if SHIFT_BITS == 8 |
| + dw -16, -128, -128, 128 |
| + dw 298, 0, 409, 1 |
| + dw 298, -100, -208, 1 |
| + dw 298, 516, 0, 1, |
| +%elif SHIFT_BITS == 12 |
| + dw -16, -128, -128, 2048 |
| + dw 4768, 0, 6537, 1 |
| + dw 4768, -1601, -3329, 1 |
| + dw 4768, 8266, 0, 1 |
| +%endif |
| + |
| + SECTION SEG_TEXT |
| + CPU PENTIUM4 |
| +; |
| +; void media::simd::ConvertRGBAToYUVRow(const uint8* rgba, |
| +; uint8* y, |
| +; uint8* u, |
| +; uint8* v, |
| +; int width); |
| +; |
| +%ifdef MACHO |
| +%define SYMBOL_NAME __ZN5media4simd19ConvertRGBAtoYUVRowEPKhPhS3_S3_i |
| +%elifdef ELF |
| +%define SYMBOL_NAME _ZN5media4simd19ConvertRGBAtoYUVRowEPKhPhS3_S3_i |
| +%elifdef MSVC |
| +%define SYMBOL_NAME ?ConvertRGBAtoYUVRow@simd@media@@YAXPBEPAE11H@Z |
| +%endif |
| + |
| +%define PIXELSIZE 4 |
| +%include "convert_row_rgb.inc" |
| + |
| +; |
| +; void media::simd::ConvertRGBAToYUVRow(const uint8* rgba, |
| +; uint8* y, |
| +; uint8* u, |
| +; uint8* v, |
| +; int width); |
| +; |
| +%ifdef MACHO |
| +%define SYMBOL_NAME __ZN5media4simd18ConvertRGBtoYUVRowEPKhPhS3_S3_i |
| +%elifdef ELF |
| +%define SYMBOL_NAME _ZN5media4simd18ConvertRGBtoYUVRowEPKhPhS3_S3_i |
| +%elifdef MSVC |
| +%define SYMBOL_NAME ?ConvertRGBtoYUVRow@simd@media@@YAXPBEPAE11H@Z |
| +%endif |
| + |
| +%define PIXELSIZE 3 |
| +%include "convert_row_rgb.inc" |
| + |
| +; |
| +; void media::simd::ConvertYUVtoRGBARow(const uint8* y, |
| +; const uint8* u, |
| +; const uint8* v, |
| +; const uint8* rgba, |
| +; int width); |
| +; |
| +%ifdef MACHO |
| +%define SYMBOL_NAME __ZN5media4simd19ConvertYUVtoRGBARowEPKhS2_S2_Phi |
| +%elifdef ELF |
| +%define SYMBOL_NAME _ZN5media4simd19ConvertYUVtoRGBARowEPKhS2_S2_Phi |
| +%elifdef MSVC |
| +%define SYMBOL_NAME ?ConvertYUVtoRGBARow@simd@media@@YAXPBE00PAEH@Z |
| +%endif |
| + |
| +%define PIXELSIZE 4 |
| +%define ALPHA 255 |
| +%include "convert_row_yuv.inc" |
| + |
| +; |
| +; void media::simd::ConvertYUVtoRGBRow(const uint8* y, |
| +; const uint8* u, |
| +; const uint8* v, |
| +; const uint8* rgb, |
| +; int width); |
| +; |
| +%ifdef MACHO |
| +%define SYMBOL_NAME __ZN5media4simd18ConvertYUVtoRGBRowEPKhS2_S2_Phi |
| +%elifdef ELF |
| +%define SYMBOL_NAME _ZN5media4simd18ConvertYUVtoRGBRowEPKhS2_S2_Phi |
| +%elifdef MSVC |
| +%define SYMBOL_NAME ?ConvertYUVtoRGBRow@simd@media@@YAXPBE00PAEH@Z |
| +%endif |
| + |
| +%define PIXELSIZE 3 |
| +%define ALPHA 0 |
| +%include "convert_row_yuv.inc" |
| Property changes on: media\base\simd\convert_row.asm |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |