Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Unified Diff: media/base/simd/convert_rgb_to_yuv_ssse3.inc

Issue 2694113002: Delete media/base/yuv_convert and dependents. Prefer libyuv. (Closed)
Patch Set: Fix media_unittests. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/simd/convert_rgb_to_yuv_ssse3.cc ('k') | media/base/simd/convert_rgb_to_yuv_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/simd/convert_rgb_to_yuv_ssse3.inc
diff --git a/media/base/simd/convert_rgb_to_yuv_ssse3.inc b/media/base/simd/convert_rgb_to_yuv_ssse3.inc
deleted file mode 100644
index 5217c69bd77f22969b8f20954b3b0e9ec8b2326f..0000000000000000000000000000000000000000
--- a/media/base/simd/convert_rgb_to_yuv_ssse3.inc
+++ /dev/null
@@ -1,200 +0,0 @@
-; 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.
-
-;
-; void SYMBOL(const uint8_t* argb, uint8_t* y, uint8_t* u, uint8_t* v, int width);
-;
-; The main code that converts RGB pixels to YUV pixels. This function roughly
-; consists of three parts: converting one ARGB pixel to YUV pixels, converting
-; two ARGB pixels to YUV pixels, and converting four ARGB pixels to YUV pixels.
-; To write the structure of this function in C, it becomes the snippet listed
-; below.
-;
-; if (width & 1) {
-; --width;
-; // Convert one ARGB pixel to one Y pixel, one U pixel, and one V pixel.
-; }
-;
-; if (width & 2) {
-; width -= 2;
-; // Convert two ARGB pixels to two Y pixels, one U pixel, and one V pixel.
-; }
-;
-; while (width) {
-; width -= 4;
-; // Convert four ARGB pixels to four Y pixels, two U pixels, and two V
-; // pixels.
-; }
-;
- EXPORT SYMBOL
- align function_align
-
-mangle(SYMBOL):
- %assign stack_offset 0
- PROLOGUE 5, 6, 8, ARGB, Y, U, V, WIDTH, TEMP
-
- ; Initialize constants used in this function. (We use immediates to avoid
- ; dependency onto GOT.)
- LOAD_XMM XMM_CONST_Y0, 0x00420219
- LOAD_XMM XMM_CONST_Y1, 0x00007F00
- LOAD_XMM XMM_CONST_U, 0x00DAB670
- LOAD_XMM XMM_CONST_V, 0x0070A2EE
- LOAD_XMM XMM_CONST_128, 0x00800080
-
-.convert_one_pixel:
- ; Divide the input width by two so it represents the offsets for u[] and v[].
- ; When the width is odd, We read the rightmost ARGB pixel and convert its
- ; colorspace to YUV. This code stores one Y pixel, one U pixel, and one V
- ; pixel.
- sar WIDTHq, 1
- jnc .convert_two_pixels
-
- ; Read one ARGB (or RGB) pixel.
- READ_ARGB xmm0, 1
-
- ; Calculate y[0] from one RGB pixel read above.
- CALC_Y xmm1, xmm0
- movd TEMPd, xmm1
- mov BYTE [Yq + WIDTHq * 2], TEMPb
-
- ; Calculate u[0] from one RGB pixel read above. If this is an odd line, the
- ; output pixel contains the U value calculated in the previous call. We also
- ; read this pixel and calculate their average.
- INIT_UV TEMPd, Uq, 4
- CALC_UV xmm1, xmm0, XMM_CONST_U, TEMPd
- movd TEMPd, xmm1
- mov BYTE [Uq + WIDTHq], TEMPb
-
- ; Calculate v[0] from one RGB pixel. Same as u[0], we read the result of the
- ; previous call and get their average.
- INIT_UV TEMPd, Uq, 4
- CALC_UV xmm1, xmm0, XMM_CONST_V, TEMPd
- movd TEMPd, xmm1
- mov BYTE [Vq + WIDTHq], TEMPb
-
-.convert_two_pixels:
- ; If the input width is not a multiple of four, read the rightmost two ARGB
- ; pixels and convert their colorspace to YUV. This code stores two Y pixels,
- ; one U pixel, and one V pixel.
- test WIDTHb, 2 / 2
- jz .convert_four_pixels
- sub WIDTHb, 2 / 2
-
- ; Read two ARGB (or RGB) pixels.
- READ_ARGB xmm0, 2
-
- ; Calculate r[0] and r[1] from two RGB pixels read above.
- CALC_Y xmm1, xmm0
- movd TEMPd, xmm1
- mov WORD [Yq + WIDTHq * 2], TEMPw
-
- ; Skip calculating u and v if the output buffer is NULL.
- test Uq, Uq
- jz .convert_four_pixels
-
- ; Calculate u[0] from two RGB pixels read above. (For details, read the above
- ; comment in .convert_one_pixel).
- INIT_UV TEMPd, Uq, 2
- CALC_UV xmm1, xmm0, XMM_CONST_U, TEMPd
- movd TEMPd, xmm1
- mov BYTE [Uq + WIDTHq], TEMPb
-
- ; Calculate v[0] from two RGB pixels read above.
- INIT_UV TEMPd, Vq, 2
- CALC_UV xmm1, xmm0, XMM_CONST_V, TEMPd
- movd TEMPd, xmm1
- mov BYTE [Vq + WIDTHq], TEMPb
-
-.convert_four_pixels:
- ; Read four ARGB pixels and convert their colorspace to YUV. This code stores
- ; four Y pixels, two U pixels, and two V pixels.
- test WIDTHq, WIDTHq
- jz .convert_finish
-
-%if PIXELSIZE == 4
- ; Check if the input buffer is aligned to a 16-byte boundary and use movdqa
- ; for reading the ARGB pixels.
- test ARGBw, 15
- jnz .convert_four_pixels_unaligned
-
-.convert_four_pixels_aligned:
- sub WIDTHq, 4 / 2
-
- ; Read four ARGB pixels. (We can use movdqa here since we have checked if the
- ; source address is aligned.)
- movdqa xmm0, DQWORD [ARGBq + WIDTHq * 4 * 2]
-
- ; Calculate y[0], y[1], y[2],and, y[3] from the input ARGB pixels.
- CALC_Y xmm1, xmm0
- movd DWORD [Yq + WIDTHq * 2], xmm1
-
-%if SUBSAMPLING == 0
- ; Skip calculating u and v if the output buffer is NULL, which means we are
- ; converting an odd line. (When we enable subsampling, these buffers must
- ; contain the u and v values for the previous call, i.e. these variables must
- ; not be NULL.)
- test Uq, Uq
- jz .convert_four_pixels_aligned_next
-%endif
-
- ; Calculate u[0] and u[1] from four ARGB pixels read above.
- INIT_UV TEMPd, Uq, 4
- CALC_UV xmm1, xmm0, XMM_CONST_U, TEMPd
- movd TEMPd, xmm1
- mov WORD [Uq + WIDTHq], TEMPw
-
- ; Calculate v[0] and v[1] from four ARGB pixels read above.
- INIT_UV TEMPd, Vq, 4
- CALC_UV xmm1, xmm0, XMM_CONST_V, TEMPd
- movd TEMPd, xmm1
- mov WORD [Vq + WIDTHq], TEMPw
-
-%if SUBSAMPLING == 0
-.convert_four_pixels_aligned_next:
-%endif
-
- test WIDTHq, WIDTHq
- jnz .convert_four_pixels_aligned
-
- jmp .convert_finish
-%endif
-
-.convert_four_pixels_unaligned:
- sub WIDTHq, 4 / 2
-
- ; Read four ARGB (or RGB) pixels.
- READ_ARGB xmm0, 4
-
- ; Calculate y[0], y[1], y[2],and, y[3] from the input ARGB pixels.
- CALC_Y xmm1, xmm0
- movd DWORD [Yq + WIDTHq * 2], xmm1
-
-%if SUBSAMPLING == 0
- ; Skip calculating u and v if the output buffer is NULL.
- test Uq, Uq
- jz .convert_four_pixels_unaligned_next
-%endif
-
- ; Calculate u[0] and u[1] from the input ARGB pixels.
- INIT_UV TEMPd, Uq, 4
- CALC_UV xmm1, xmm0, XMM_CONST_U, TEMPd
- movd TEMPd, xmm1
- mov WORD [Uq + WIDTHq], TEMPw
-
- ; Calculate v[0] and v[1] from the input ARGB pixels.
- INIT_UV TEMPd, Vq, 4
- CALC_UV xmm1, xmm0, XMM_CONST_V, TEMPd
- movd TEMPd, xmm1
- mov WORD [Vq + WIDTHq], TEMPw
-
-%if SUBSAMPLING == 0
-.convert_four_pixels_unaligned_next:
-%endif
-
- test WIDTHq, WIDTHq
- jnz .convert_four_pixels_unaligned
-
-.convert_finish:
- ; Just exit this function since this is a void function.
- RET
« no previous file with comments | « media/base/simd/convert_rgb_to_yuv_ssse3.cc ('k') | media/base/simd/convert_rgb_to_yuv_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698