Index: media/base/yuv_scale.cc |
=================================================================== |
--- media/base/yuv_scale.cc (revision 16299) |
+++ media/base/yuv_scale.cc (working copy) |
@@ -1,166 +0,0 @@ |
-// Copyright (c) 2009 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 "media/base/yuv_scale.h" |
-// yuv_row.h included to detect USE_MMX |
-#include "media/base/yuv_row.h" |
- |
-#ifdef _OPENMP |
-#include <omp.h> |
-#endif |
- |
-#ifdef _DEBUG |
-#include "base/logging.h" |
-#else |
-#define DCHECK(a) |
-#endif |
- |
-// TODO(fbarchard): Determine is HALF_TEST will be used or removed. |
-// Half test is a prototype function that may or may not be useful in the |
-// future. It is slower, but higher quality. The low level function |
-// Half2Row() is in yuv_row.h and yuv_row_win.cc. |
-// The function is small, so it has been left in, but if it turns out to |
-// be useless, it should be removed in the future. |
-// #define HALF_TEST 1 |
- |
-namespace media { |
- |
-// Scale a frame of YV12 (aka YUV420) to 32 bit ARGB. |
-void ScaleYV12ToRGB32(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* rgb_buf, |
- int width, |
- int height, |
- int scaled_width, |
- int scaled_height, |
- int y_pitch, |
- int uv_pitch, |
- int rgb_pitch, |
- Rotate view_rotate) { |
- // Rotations that start at right side of image. |
- if ((view_rotate == ROTATE_180) || |
- (view_rotate == ROTATE_270) || |
- (view_rotate == MIRROR_ROTATE_0) || |
- (view_rotate == MIRROR_ROTATE_90)) { |
- y_buf += width - 1; |
- u_buf += width / 2 - 1; |
- v_buf += width / 2 - 1; |
- width = -width; |
- } |
- // Rotations that start at bottom of image. |
- if ((view_rotate == ROTATE_90) || |
- (view_rotate == ROTATE_180) || |
- (view_rotate == MIRROR_ROTATE_90) || |
- (view_rotate == MIRROR_ROTATE_180)) { |
- y_buf += (height - 1) * y_pitch; |
- u_buf += (height / 2 - 1) * uv_pitch; |
- v_buf += (height / 2 - 1) * uv_pitch; |
- height = -height; |
- } |
- // Only these rotations are implemented. |
- DCHECK((view_rotate == ROTATE_0) || |
- (view_rotate == ROTATE_180) || |
- (view_rotate == MIRROR_ROTATE_0) || |
- (view_rotate == MIRROR_ROTATE_180)); |
- |
- int scaled_dx = width * 16 / scaled_width; |
-#ifdef _OPENMP |
-#pragma omp parallel for |
-#endif |
- for (int y = 0; y < scaled_height; ++y) { |
- uint8* dest_pixel = rgb_buf + y * rgb_pitch; |
- int scaled_y = (y * height / scaled_height); |
- const uint8* y_ptr = y_buf + scaled_y * y_pitch; |
- const uint8* u_ptr = u_buf + scaled_y / 2 * uv_pitch; |
- const uint8* v_ptr = v_buf + scaled_y / 2 * uv_pitch; |
- if (scaled_width == width) { |
- ConvertYV12ToRGB32Row(y_ptr, u_ptr, v_ptr, |
- dest_pixel, scaled_width); |
- } else if (scaled_width == (width / 2)) { |
-#if HALF_TEST |
- uint8 y_half[2048]; |
- uint8 u_half[1024]; |
- uint8 v_half[1024]; |
- Half2Row(y_ptr, y_ptr + y_pitch, y_half, scaled_width); |
- Half2Row(u_ptr, u_ptr + uv_pitch, u_half, scaled_width / 2); |
- Half2Row(v_ptr, v_ptr + uv_pitch, v_half, scaled_width / 2); |
- ConvertYV12ToRGB32Row(y_half, u_half, v_half, |
- dest_pixel, scaled_width); |
-#else |
- HalfYV12ToRGB32Row(y_ptr, u_ptr, v_ptr, |
- dest_pixel, scaled_width); |
-#endif |
- } else { |
- ScaleYV12ToRGB32Row(y_ptr, u_ptr, v_ptr, |
- dest_pixel, scaled_width, scaled_dx); |
- } |
- } |
- EMMS(); |
-} |
- |
-// Scale a frame of YV16 (aka YUV422) to 32 bit ARGB. |
-void ScaleYV16ToRGB32(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* rgb_buf, |
- int width, |
- int height, |
- int scaled_width, |
- int scaled_height, |
- int y_pitch, |
- int uv_pitch, |
- int rgb_pitch, |
- Rotate view_rotate) { |
- // Rotations that start at right side of image. |
- if ((view_rotate == ROTATE_180) || |
- (view_rotate == ROTATE_270) || |
- (view_rotate == MIRROR_ROTATE_0) || |
- (view_rotate == MIRROR_ROTATE_90)) { |
- y_buf += width - 1; |
- u_buf += width / 2 - 1; |
- v_buf += width / 2 - 1; |
- width = -width; |
- } |
- // Rotations that start at bottom of image. |
- if ((view_rotate == ROTATE_90) || |
- (view_rotate == ROTATE_180) || |
- (view_rotate == MIRROR_ROTATE_90) || |
- (view_rotate == MIRROR_ROTATE_180)) { |
- y_buf += (height - 1) * y_pitch; |
- u_buf += (height - 1) * uv_pitch; |
- v_buf += (height - 1) * uv_pitch; |
- height = -height; |
- } |
- // Only these rotations are implemented. |
- DCHECK((view_rotate == ROTATE_0) || |
- (view_rotate == ROTATE_180) || |
- (view_rotate == MIRROR_ROTATE_0) || |
- (view_rotate == MIRROR_ROTATE_180)); |
- int scaled_dx = width * 16 / scaled_width; |
-#ifdef _OPENMP |
-#pragma omp parallel for |
-#endif |
- for (int y = 0; y < scaled_height; ++y) { |
- uint8* dest_pixel = rgb_buf + y * rgb_pitch; |
- int scaled_y = (y * height / scaled_height); |
- const uint8* y_ptr = y_buf + scaled_y * y_pitch; |
- const uint8* u_ptr = u_buf + scaled_y * uv_pitch; |
- const uint8* v_ptr = v_buf + scaled_y * uv_pitch; |
- if (scaled_width == width) { |
- ConvertYV12ToRGB32Row(y_ptr, u_ptr, v_ptr, |
- dest_pixel, scaled_width); |
- } else if (scaled_width == (width / 2)) { |
- HalfYV12ToRGB32Row(y_ptr, u_ptr, v_ptr, |
- dest_pixel, scaled_width); |
- } else { |
- ScaleYV12ToRGB32Row(y_ptr, u_ptr, v_ptr, |
- dest_pixel, scaled_width, scaled_dx); |
- } |
- } |
- EMMS(); |
-} |
- |
-} // namespace media |
- |