зеркало из https://github.com/mozilla/gecko-dev.git
59 строки
2.0 KiB
Diff
59 строки
2.0 KiB
Diff
|
diff --git a/gfx/ycbcr/yuv_convert.cpp b/gfx/ycbcr/yuv_convert.cpp
|
||
|
--- a/gfx/ycbcr/yuv_convert.cpp
|
||
|
+++ b/gfx/ycbcr/yuv_convert.cpp
|
||
|
@@ -26,16 +26,32 @@ namespace mozilla {
|
||
|
|
||
|
namespace gfx {
|
||
|
|
||
|
// 16.16 fixed point arithmetic
|
||
|
const int kFractionBits = 16;
|
||
|
const int kFractionMax = 1 << kFractionBits;
|
||
|
const int kFractionMask = ((1 << kFractionBits) - 1);
|
||
|
|
||
|
+NS_GFX_(YUVType) TypeFromSize(int ywidth,
|
||
|
+ int yheight,
|
||
|
+ int cbcrwidth,
|
||
|
+ int cbcrheight)
|
||
|
+{
|
||
|
+ if (ywidth == cbcrwidth && yheight == cbcrheight) {
|
||
|
+ return YV24;
|
||
|
+ }
|
||
|
+ else if (ywidth / 2 == cbcrwidth && yheight == cbcrheight) {
|
||
|
+ return YV16;
|
||
|
+ }
|
||
|
+ else {
|
||
|
+ return YV12;
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
// Convert a frame of YUV to 32 bit ARGB.
|
||
|
NS_GFX_(void) ConvertYCbCrToRGB32(const uint8* y_buf,
|
||
|
const uint8* u_buf,
|
||
|
const uint8* v_buf,
|
||
|
uint8* rgb_buf,
|
||
|
int pic_x,
|
||
|
int pic_y,
|
||
|
int pic_width,
|
||
|
diff --git a/gfx/ycbcr/yuv_convert.h b/gfx/ycbcr/yuv_convert.h
|
||
|
--- a/gfx/ycbcr/yuv_convert.h
|
||
|
+++ b/gfx/ycbcr/yuv_convert.h
|
||
|
@@ -36,16 +36,18 @@ enum Rotate {
|
||
|
// Filter affects how scaling looks.
|
||
|
enum ScaleFilter {
|
||
|
FILTER_NONE = 0, // No filter (point sampled).
|
||
|
FILTER_BILINEAR_H = 1, // Bilinear horizontal filter.
|
||
|
FILTER_BILINEAR_V = 2, // Bilinear vertical filter.
|
||
|
FILTER_BILINEAR = 3 // Bilinear filter.
|
||
|
};
|
||
|
|
||
|
+NS_GFX_(YUVType) TypeFromSize(int ywidth, int yheight, int cbcrwidth, int cbcrheight);
|
||
|
+
|
||
|
// Convert a frame of YUV to 32 bit ARGB.
|
||
|
// Pass in YV16/YV12 depending on source format
|
||
|
NS_GFX_(void) ConvertYCbCrToRGB32(const uint8* yplane,
|
||
|
const uint8* uplane,
|
||
|
const uint8* vplane,
|
||
|
uint8* rgbframe,
|
||
|
int pic_x,
|
||
|
int pic_y,
|