mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
27dc9d2650
--HG-- extra : rebase_source : 8939f59496da5548509ebd64a515947b071c204d
90 lines
2.6 KiB
Diff
90 lines
2.6 KiB
Diff
diff --git a/media/liboggplay/include/oggplay/oggplay_tools.h b/media/liboggplay/include/oggplay/oggplay_tools.h
|
|
index 30531a4..19fe709 100644
|
|
--- a/media/liboggplay/include/oggplay/oggplay_tools.h
|
|
+++ b/media/liboggplay/include/oggplay/oggplay_tools.h
|
|
@@ -75,6 +75,9 @@ void
|
|
oggplay_yuv2rgb(OggPlayYUVChannels* yuv, OggPlayRGBChannels * rgb);
|
|
|
|
void
|
|
+oggplay_yuv2argb(OggPlayYUVChannels* yuv, OggPlayRGBChannels * rgb);
|
|
+
|
|
+void
|
|
oggplay_yuv2bgr(OggPlayYUVChannels* yuv, OggPlayRGBChannels * rgb);
|
|
|
|
ogg_int64_t
|
|
diff --git a/media/liboggplay/src/liboggplay/config.h b/media/liboggplay/src/liboggplay/config.h
|
|
index e1754e4..46faa8a 100644
|
|
--- a/media/liboggplay/src/liboggplay/config.h
|
|
+++ b/media/liboggplay/src/liboggplay/config.h
|
|
@@ -86,3 +86,8 @@
|
|
/* Define to empty if `const' does not conform to ANSI C. */
|
|
/* #undef const */
|
|
#undef HAVE_GLUT
|
|
+
|
|
+#include "prcpucfg.h"
|
|
+#ifdef IS_BIG_ENDIAN
|
|
+#define WORDS_BIGENDIAN
|
|
+#endif
|
|
diff --git a/media/liboggplay/src/liboggplay/oggplay_yuv2rgb.c b/media/liboggplay/src/liboggplay/oggplay_yuv2rgb.c
|
|
index 0e2cef0..e070dc7 100644
|
|
--- a/media/liboggplay/src/liboggplay/oggplay_yuv2rgb.c
|
|
+++ b/media/liboggplay/src/liboggplay/oggplay_yuv2rgb.c
|
|
@@ -396,6 +396,57 @@ void oggplay_yuv2rgb(OggPlayYUVChannels * yuv, OggPlayRGBChannels * rgb) {
|
|
}
|
|
}
|
|
|
|
+/* Vanilla implementation if YUV->ARGB conversion */
|
|
+void oggplay_yuv2argb(OggPlayYUVChannels * yuv, OggPlayRGBChannels * rgb) {
|
|
+
|
|
+ unsigned char * ptry = yuv->ptry;
|
|
+ unsigned char * ptru = yuv->ptru;
|
|
+ unsigned char * ptrv = yuv->ptrv;
|
|
+ unsigned char * ptro = rgb->ptro;
|
|
+ unsigned char * ptro2;
|
|
+ int i, j;
|
|
+
|
|
+ for (i = 0; i < yuv->y_height; i++) {
|
|
+ ptro2 = ptro;
|
|
+ for (j = 0; j < yuv->y_width; j += 2) {
|
|
+
|
|
+ short pr, pg, pb, y;
|
|
+ short r, g, b;
|
|
+
|
|
+ pr = (-56992 + ptrv[j/2] * 409) >> 8;
|
|
+ pg = (34784 - ptru[j/2] * 100 - ptrv[j/2] * 208) >> 8;
|
|
+ pb = (-70688 + ptru[j/2] * 516) >> 8;
|
|
+
|
|
+ y = 298*ptry[j] >> 8;
|
|
+ r = y + pr;
|
|
+ g = y + pg;
|
|
+ b = y + pb;
|
|
+
|
|
+ *ptro2++ = 255;
|
|
+ *ptro2++ = CLAMP(r);
|
|
+ *ptro2++ = CLAMP(g);
|
|
+ *ptro2++ = CLAMP(b);
|
|
+
|
|
+ y = 298*ptry[j + 1] >> 8;
|
|
+ r = y + pr;
|
|
+ g = y + pg;
|
|
+ b = y + pb;
|
|
+
|
|
+ *ptro2++ = 255;
|
|
+ *ptro2++ = CLAMP(r);
|
|
+ *ptro2++ = CLAMP(g);
|
|
+ *ptro2++ = CLAMP(b);
|
|
+ }
|
|
+ ptry += yuv->y_width;
|
|
+ if (i & 1) {
|
|
+ ptru += yuv->uv_width;
|
|
+ ptrv += yuv->uv_width;
|
|
+ }
|
|
+ ptro += rgb->rgb_width * 4;
|
|
+ }
|
|
+}
|
|
+
|
|
+
|
|
/* Vanilla implementation of YUV->BGR conversion*/
|
|
void oggplay_yuv2bgr(OggPlayYUVChannels * yuv, OggPlayRGBChannels * rgb) {
|
|
|