Dither Variables moved to context, and adjusted swscale.c accordingly
TODO:
1)adjust yuv2rgb_template.c and yuv2rgb.c <- seems I can't do this
2)test
I need someone to correct that files before testing if things will work.
(Luca?)
--
Keiji Costantini
>From 1c1a4a862e0a1bcce0b2876d34bac1245b44181e Mon Sep 17 00:00:00 2001
From: Keiji Costantini <[EMAIL PROTECTED]>
Date: Thu, 10 Jul 2008 12:50:48 +0900
Subject: [PATCH] Dither Variables moved to context, and adjusted.
TODO:adjust yuv2rgb_template.c and test.
---
swscale.c | 84 ++++++++++++++++++++++++----------------------------
swscale_internal.h | 6 ++++
2 files changed, 45 insertions(+), 45 deletions(-)
diff --git a/swscale.c b/swscale.c
index 26d003b..71c8bcb 100644
--- a/swscale.c
+++ b/swscale.c
@@ -181,12 +181,6 @@ static unsigned char clip_table[768];
static SwsVector *sws_getConvVec(SwsVector *a, SwsVector *b);
-extern const uint8_t dither_2x2_4[2][8];
-extern const uint8_t dither_2x2_8[2][8];
-extern const uint8_t dither_8x8_32[8][8];
-extern const uint8_t dither_8x8_73[8][8];
-extern const uint8_t dither_8x8_220[8][8];
-
const char *sws_format_name(enum PixelFormat format)
{
switch (format) {
@@ -479,12 +473,12 @@ static inline void yuv2nv12XinC(int16_t *lumFilter,
int16_t **lumSrc, int lumFil
case PIX_FMT_RGB565:\
case PIX_FMT_BGR565:\
{\
- const int dr1= dither_2x2_8[y&1 ][0];\
- const int dg1= dither_2x2_4[y&1 ][0];\
- const int db1= dither_2x2_8[(y&1)^1][0];\
- const int dr2= dither_2x2_8[y&1 ][1];\
- const int dg2= dither_2x2_4[y&1 ][1];\
- const int db2= dither_2x2_8[(y&1)^1][1];\
+ const int dr1= c->dither_2x2_8[y&1 ][0];\
+ const int dg1= c->dither_2x2_4[y&1 ][0];\
+ const int db1= c->dither_2x2_8[(y&1)^1][0];\
+ const int dr2= c->dither_2x2_8[y&1 ][1];\
+ const int dg2= c->dither_2x2_4[y&1 ][1];\
+ const int db2= c->dither_2x2_8[(y&1)^1][1];\
func(uint16_t)\
((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];\
((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];\
@@ -494,12 +488,12 @@ static inline void yuv2nv12XinC(int16_t *lumFilter,
int16_t **lumSrc, int lumFil
case PIX_FMT_RGB555:\
case PIX_FMT_BGR555:\
{\
- const int dr1= dither_2x2_8[y&1 ][0];\
- const int dg1= dither_2x2_8[y&1 ][1];\
- const int db1= dither_2x2_8[(y&1)^1][0];\
- const int dr2= dither_2x2_8[y&1 ][1];\
- const int dg2= dither_2x2_8[y&1 ][0];\
- const int db2= dither_2x2_8[(y&1)^1][1];\
+ const int dr1= c->dither_2x2_8[y&1 ][0];\
+ const int dg1= c->dither_2x2_8[y&1 ][1];\
+ const int db1= c->dither_2x2_8[(y&1)^1][0];\
+ const int dr2= c->dither_2x2_8[y&1 ][1];\
+ const int dg2= c->dither_2x2_8[y&1 ][0];\
+ const int db2= c->dither_2x2_8[(y&1)^1][1];\
func(uint16_t)\
((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];\
((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];\
@@ -509,8 +503,8 @@ static inline void yuv2nv12XinC(int16_t *lumFilter, int16_t
**lumSrc, int lumFil
case PIX_FMT_RGB8:\
case PIX_FMT_BGR8:\
{\
- const uint8_t * const d64= dither_8x8_73[y&7];\
- const uint8_t * const d32= dither_8x8_32[y&7];\
+ const uint8_t * const d64= c->dither_8x8_73[y&7];\
+ const uint8_t * const d32= c->dither_8x8_32[y&7];\
func(uint8_t)\
((uint8_t*)dest)[i2+0]= r[Y1+d32[(i2+0)&7]] +
g[Y1+d32[(i2+0)&7]] + b[Y1+d64[(i2+0)&7]];\
((uint8_t*)dest)[i2+1]= r[Y2+d32[(i2+1)&7]] +
g[Y2+d32[(i2+1)&7]] + b[Y2+d64[(i2+1)&7]];\
@@ -520,8 +514,8 @@ static inline void yuv2nv12XinC(int16_t *lumFilter, int16_t
**lumSrc, int lumFil
case PIX_FMT_RGB4:\
case PIX_FMT_BGR4:\
{\
- const uint8_t * const d64= dither_8x8_73 [y&7];\
- const uint8_t * const d128=dither_8x8_220[y&7];\
+ const uint8_t * const d64= c->dither_8x8_73 [y&7];\
+ const uint8_t * const d128=c->dither_8x8_220[y&7];\
func(uint8_t)\
((uint8_t*)dest)[i]= r[Y1+d128[(i2+0)&7]] +
g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]]\
+ ((r[Y2+d128[(i2+1)&7]] +
g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]])<<4);\
@@ -531,8 +525,8 @@ static inline void yuv2nv12XinC(int16_t *lumFilter, int16_t
**lumSrc, int lumFil
case PIX_FMT_RGB4_BYTE:\
case PIX_FMT_BGR4_BYTE:\
{\
- const uint8_t * const d64= dither_8x8_73 [y&7];\
- const uint8_t * const d128=dither_8x8_220[y&7];\
+ const uint8_t * const d64= c->dither_8x8_73 [y&7];\
+ const uint8_t * const d128=c->dither_8x8_220[y&7];\
func(uint8_t)\
((uint8_t*)dest)[i2+0]= r[Y1+d128[(i2+0)&7]] +
g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]];\
((uint8_t*)dest)[i2+1]= r[Y2+d128[(i2+1)&7]] +
g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]];\
@@ -541,7 +535,7 @@ static inline void yuv2nv12XinC(int16_t *lumFilter, int16_t
**lumSrc, int lumFil
break;\
case PIX_FMT_MONOBLACK:\
{\
- const uint8_t * const d128=dither_8x8_220[y&7];\
+ const uint8_t * const d128=c->dither_8x8_220[y&7];\
uint8_t *g= c->table_gU[128] + c->table_gV[128];\
for (i=0; i<dstW-7; i+=8){\
int acc;\
@@ -569,7 +563,7 @@ static inline void yuv2nv12XinC(int16_t *lumFilter, int16_t
**lumSrc, int lumFil
int topLeft=0;\
int shift=0;\
int count=0;\
- const uint8_t * const d128=dither_8x8_220[y&7];\
+ const uint8_t * const d128=c->dither_8x8_220[y&7];\
int error_new=0;\
int error_in3=0;\
int f=0;\
@@ -661,12 +655,12 @@ static inline void yuv2packedXinC(SwsContext *c, int16_t
*lumFilter, int16_t **l
case PIX_FMT_RGB565:
case PIX_FMT_BGR565:
{
- const int dr1= dither_2x2_8[y&1 ][0];
- const int dg1= dither_2x2_4[y&1 ][0];
- const int db1= dither_2x2_8[(y&1)^1][0];
- const int dr2= dither_2x2_8[y&1 ][1];
- const int dg2= dither_2x2_4[y&1 ][1];
- const int db2= dither_2x2_8[(y&1)^1][1];
+ const int dr1= c->dither_2x2_8[y&1 ][0];
+ const int dg1= c->dither_2x2_4[y&1 ][0];
+ const int db1= c->dither_2x2_8[(y&1)^1][0];
+ const int dr2= c->dither_2x2_8[y&1 ][1];
+ const int dg2= c->dither_2x2_4[y&1 ][1];
+ const int db2= c->dither_2x2_8[(y&1)^1][1];
YSCALE_YUV_2_RGBX_C(uint16_t)
((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];
((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];
@@ -676,12 +670,12 @@ static inline void yuv2packedXinC(SwsContext *c, int16_t
*lumFilter, int16_t **l
case PIX_FMT_RGB555:
case PIX_FMT_BGR555:
{
- const int dr1= dither_2x2_8[y&1 ][0];
- const int dg1= dither_2x2_8[y&1 ][1];
- const int db1= dither_2x2_8[(y&1)^1][0];
- const int dr2= dither_2x2_8[y&1 ][1];
- const int dg2= dither_2x2_8[y&1 ][0];
- const int db2= dither_2x2_8[(y&1)^1][1];
+ const int dr1= c->dither_2x2_8[y&1 ][0];
+ const int dg1= c->dither_2x2_8[y&1 ][1];
+ const int db1= c->dither_2x2_8[(y&1)^1][0];
+ const int dr2= c->dither_2x2_8[y&1 ][1];
+ const int dg2= c->dither_2x2_8[y&1 ][0];
+ const int db2= c->dither_2x2_8[(y&1)^1][1];
YSCALE_YUV_2_RGBX_C(uint16_t)
((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];
((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];
@@ -691,8 +685,8 @@ static inline void yuv2packedXinC(SwsContext *c, int16_t
*lumFilter, int16_t **l
case PIX_FMT_RGB8:
case PIX_FMT_BGR8:
{
- const uint8_t * const d64= dither_8x8_73[y&7];
- const uint8_t * const d32= dither_8x8_32[y&7];
+ const uint8_t * const d64= c->dither_8x8_73[y&7];
+ const uint8_t * const d32= c->dither_8x8_32[y&7];
YSCALE_YUV_2_RGBX_C(uint8_t)
((uint8_t*)dest)[i2+0]= r[Y1+d32[(i2+0)&7]] +
g[Y1+d32[(i2+0)&7]] + b[Y1+d64[(i2+0)&7]];
((uint8_t*)dest)[i2+1]= r[Y2+d32[(i2+1)&7]] +
g[Y2+d32[(i2+1)&7]] + b[Y2+d64[(i2+1)&7]];
@@ -702,8 +696,8 @@ static inline void yuv2packedXinC(SwsContext *c, int16_t
*lumFilter, int16_t **l
case PIX_FMT_RGB4:
case PIX_FMT_BGR4:
{
- const uint8_t * const d64= dither_8x8_73 [y&7];
- const uint8_t * const d128=dither_8x8_220[y&7];
+ const uint8_t * const d64= c->dither_8x8_73 [y&7];
+ const uint8_t * const d128=c->dither_8x8_220[y&7];
YSCALE_YUV_2_RGBX_C(uint8_t)
((uint8_t*)dest)[i]= r[Y1+d128[(i2+0)&7]] +
g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]]
+((r[Y2+d128[(i2+1)&7]] +
g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]])<<4);
@@ -713,8 +707,8 @@ static inline void yuv2packedXinC(SwsContext *c, int16_t
*lumFilter, int16_t **l
case PIX_FMT_RGB4_BYTE:
case PIX_FMT_BGR4_BYTE:
{
- const uint8_t * const d64= dither_8x8_73 [y&7];
- const uint8_t * const d128=dither_8x8_220[y&7];
+ const uint8_t * const d64= c->dither_8x8_73 [y&7];
+ const uint8_t * const d128=c->dither_8x8_220[y&7];
YSCALE_YUV_2_RGBX_C(uint8_t)
((uint8_t*)dest)[i2+0]= r[Y1+d128[(i2+0)&7]] +
g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]];
((uint8_t*)dest)[i2+1]= r[Y2+d128[(i2+1)&7]] +
g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]];
@@ -723,7 +717,7 @@ static inline void yuv2packedXinC(SwsContext *c, int16_t
*lumFilter, int16_t **l
break;
case PIX_FMT_MONOBLACK:
{
- const uint8_t * const d128=dither_8x8_220[y&7];
+ const uint8_t * const d128=c->dither_8x8_220[y&7];
uint8_t *g= c->table_gU[128] + c->table_gV[128];
int acc=0;
for (i=0; i<dstW-1; i+=2){
diff --git a/swscale_internal.h b/swscale_internal.h
index e7bf2fc..57e9df9 100644
--- a/swscale_internal.h
+++ b/swscale_internal.h
@@ -132,6 +132,12 @@ typedef struct SwsContext{
uint64_t greenDither __attribute__((aligned(8)));
uint64_t blueDither __attribute__((aligned(8)));
+ const uint8_t dither_2x2_4[2][8];
+ const uint8_t dither_2x2_8[2][8];
+ const uint8_t dither_8x8_32[8][8];
+ const uint8_t dither_8x8_73[8][8];
+ const uint8_t dither_8x8_220[8][8];
+
uint64_t yCoeff __attribute__((aligned(8)));
uint64_t vrCoeff __attribute__((aligned(8)));
uint64_t ubCoeff __attribute__((aligned(8)));
--
1.5.4.5
_______________________________________________
FFmpeg-soc mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc