summaryrefslogtreecommitdiffstats
path: root/media/base/yuv_convert.h
diff options
context:
space:
mode:
authorfbarchard@chromium.org <fbarchard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-18 22:17:38 +0000
committerfbarchard@chromium.org <fbarchard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-18 22:17:38 +0000
commitbe5a116b8a3465308174ccc4ab63351413d6dfe7 (patch)
tree2ba1202e427db0fda4d70037a5afda93e7f576fe /media/base/yuv_convert.h
parent3090eeb5afd49e828739b492eb400d8fcf734784 (diff)
downloadchromium_src-be5a116b8a3465308174ccc4ab63351413d6dfe7.zip
chromium_src-be5a116b8a3465308174ccc4ab63351413d6dfe7.tar.gz
chromium_src-be5a116b8a3465308174ccc4ab63351413d6dfe7.tar.bz2
YUV with clipping.
All functions do 2 pixels at a time. 90 and 270 rotations implemented. YV16 refactored. YV12 code accepts a YuvType that allows the same code to support YV16 as well. Special case for half size removed. Special case for doubling added. 3.62 ms versus 8.62 for general purpose code. Review URL: http://codereview.chromium.org/113407 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16334 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/yuv_convert.h')
-rw-r--r--media/base/yuv_convert.h72
1 files changed, 49 insertions, 23 deletions
diff --git a/media/base/yuv_convert.h b/media/base/yuv_convert.h
index 5f3c5c2..a757070 100644
--- a/media/base/yuv_convert.h
+++ b/media/base/yuv_convert.h
@@ -9,29 +9,55 @@
namespace media {
-// Convert a frame of YV12 (aka YUV420) to 32 bit ARGB.
-void ConvertYV12ToRGB32(const uint8* yplane,
- const uint8* uplane,
- const uint8* vplane,
- uint8* rgbframe,
- size_t frame_width,
- size_t frame_height,
- int ystride,
- int uvstride,
- int rgbstride);
-
-// Convert a frame of YV16 (aka YUV422) to 32 bit ARGB.
-void ConvertYV16ToRGB32(const uint8* yplane,
- const uint8* uplane,
- const uint8* vplane,
- uint8* rgbframe,
- size_t frame_width,
- size_t frame_height,
- int ystride,
- int uvstride,
- int rgbstride);
+// Type of YUV surface.
+// The value of these enums matter as they are used to shift vertical indices.
+enum YUVType {
+ YV16 = 0, // YV16 is half width and full height chroma channels.
+ YV12 = 1, // YV12 is half width and half height chroma channels.
+};
+
+// Mirror means flip the image horizontally, as in looking in a mirror.
+// Rotate happens after mirroring.
+enum Rotate {
+ ROTATE_0, // Rotation off.
+ ROTATE_90, // Rotate clockwise.
+ ROTATE_180, // Rotate upside down.
+ ROTATE_270, // Rotate counter clockwise.
+ MIRROR_ROTATE_0, // Mirror horizontally.
+ MIRROR_ROTATE_90, // Mirror then Rotate clockwise.
+ MIRROR_ROTATE_180, // Mirror vertically.
+ MIRROR_ROTATE_270, // Transpose.
+};
+
+// Convert a frame of YUV to 32 bit ARGB.
+// Pass in YV16/YV12 depending on source format
+void ConvertYUVToRGB32(const uint8* yplane,
+ const uint8* uplane,
+ const uint8* vplane,
+ uint8* rgbframe,
+ int frame_width,
+ int frame_height,
+ int ystride,
+ int uvstride,
+ int rgbstride,
+ YUVType yuv_type);
+
+// Scale a frame of YUV to 32 bit ARGB.
+// Supports rotation and mirroring.
+void ScaleYUVToRGB32(const uint8* yplane,
+ const uint8* uplane,
+ const uint8* vplane,
+ uint8* rgbframe,
+ int frame_width,
+ int frame_height,
+ int scaled_width,
+ int scaled_height,
+ int ystride,
+ int uvstride,
+ int rgbstride,
+ YUVType yuv_type,
+ Rotate view_rotate);
+} // namespace media
#endif // MEDIA_BASE_YUV_CONVERT_H_
-
-} // namespace media