[08/13] lavc: Move ff_cropTbl and ff_zigzag_direct from dsputil to mathtables

Message ID 1364995179-98359-8-git-send-email-martin@martin.st
State Committed
Headers show

Commit Message

Martin Storsjö April 3, 2013, 1:19 p.m.
From: "Ronald S. Bultje" <rsbultje@gmail.com>

These are widely used throughout libavcodec, nothing dsputil-specific.

Change ff_cropTbl to a statically initialized table, to avoid
having to call some certain function to initialize it.
---
 libavcodec/dsputil.c    |   18 ------------------
 libavcodec/dsputil.h    |    2 +-
 libavcodec/mathtables.c |   33 +++++++++++++++++++++++++++++++++
 3 files changed, 34 insertions(+), 19 deletions(-)

Comments

Luca Barbato April 3, 2013, 1:46 p.m. | #1
On 03/04/13 15:19, Martin Storsjö wrote:
> From: "Ronald S. Bultje" <rsbultje@gmail.com>
> 
> These are widely used throughout libavcodec, nothing dsputil-specific.
> 
> Change ff_cropTbl to a statically initialized table, to avoid
> having to call some certain function to initialize it.
> ---
>  libavcodec/dsputil.c    |   18 ------------------
>  libavcodec/dsputil.h    |    2 +-
>  libavcodec/mathtables.c |   33 +++++++++++++++++++++++++++++++++
>  3 files changed, 34 insertions(+), 19 deletions(-)

Looks fine. Not sure if adding a times256 macro would be more self
explaining though.

lu
Diego Biurrun April 4, 2013, 2:27 p.m. | #2
On Wed, Apr 03, 2013 at 04:19:34PM +0300, Martin Storsjö wrote:
> 
> Change ff_cropTbl to a statically initialized table, to avoid
> having to call some certain function to initialize it.

to avoid initializing it with a function call

> --- a/libavcodec/dsputil.c
> +++ b/libavcodec/dsputil.c
> @@ -59,17 +58,6 @@ uint32_t ff_squareTbl[512] = {0, };
>  
> -const uint8_t ff_zigzag_direct[64] = {
> -    0,   1,  8, 16,  9,  2,  3, 10,
> -    17, 24, 32, 25, 18, 11,  4,  5,
> -    12, 19, 26, 33, 40, 48, 41, 34,
> -    27, 20, 13,  6,  7, 14, 21, 28,
> -    35, 42, 49, 56, 57, 50, 43, 36,
> -    29, 22, 15, 23, 30, 37, 44, 51,
> -    58, 59, 52, 45, 38, 31, 39, 46,
> -    53, 60, 61, 54, 47, 55, 62, 63
> -};
> --- a/libavcodec/mathtables.c
> +++ b/libavcodec/mathtables.c
> @@ -85,3 +85,36 @@ const uint8_t ff_reverse[256] = {
> +
> +#define times4(x) x, x, x, x
> +
> +const uint8_t ff_cropTbl[256 + 2 * 1024] = {
> +times4(times4(times4(times4(times4(0x00))))),
> +0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
> +0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
> +0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
> +0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
> +0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
> +0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
> +0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
> +0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
> +0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
> +0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
> +0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
> +0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
> +0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
> +0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
> +0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
> +0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,
> +times4(times4(times4(times4(times4(0xFF)))))};

I know the formatting of the table is like the rest of the tables in the
file, but it's ugly.

The stacked times4 macro is duplicated, another define would be better IMO.

> +const uint8_t ff_zigzag_direct[64] = {
> +  0,   1,  8, 16,  9,  2,  3, 10,
> +  17, 24, 32, 25, 18, 11,  4,  5,
> +  12, 19, 26, 33, 40, 48, 41, 34,
> +  27, 20, 13,  6,  7, 14, 21, 28,
> +  35, 42, 49, 56, 57, 50, 43, 36,
> +  29, 22, 15, 23, 30, 37, 44, 51,
> +  58, 59, 52, 45, 38, 31, 39, 46,
> +  53, 60, 61, 54, 47, 55, 62, 63
> +};

Switching from 4-space indentation (in dsputil.c) to 2-space (in
mathtables.c) is pretty random...

Diego
Martin Storsjö April 4, 2013, 3:36 p.m. | #3
On Thu, 4 Apr 2013, Diego Biurrun wrote:

> On Wed, Apr 03, 2013 at 04:19:34PM +0300, Martin Storsjö wrote:
>>
>> Change ff_cropTbl to a statically initialized table, to avoid
>> having to call some certain function to initialize it.
>
> to avoid initializing it with a function call

Amended

>
>> --- a/libavcodec/dsputil.c
>> +++ b/libavcodec/dsputil.c
>> @@ -59,17 +58,6 @@ uint32_t ff_squareTbl[512] = {0, };
>>
>> -const uint8_t ff_zigzag_direct[64] = {
>> -    0,   1,  8, 16,  9,  2,  3, 10,
>> -    17, 24, 32, 25, 18, 11,  4,  5,
>> -    12, 19, 26, 33, 40, 48, 41, 34,
>> -    27, 20, 13,  6,  7, 14, 21, 28,
>> -    35, 42, 49, 56, 57, 50, 43, 36,
>> -    29, 22, 15, 23, 30, 37, 44, 51,
>> -    58, 59, 52, 45, 38, 31, 39, 46,
>> -    53, 60, 61, 54, 47, 55, 62, 63
>> -};
>> --- a/libavcodec/mathtables.c
>> +++ b/libavcodec/mathtables.c
>> @@ -85,3 +85,36 @@ const uint8_t ff_reverse[256] = {
>> +
>> +#define times4(x) x, x, x, x
>> +
>> +const uint8_t ff_cropTbl[256 + 2 * 1024] = {
>> +times4(times4(times4(times4(times4(0x00))))),
>> +0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
>> +0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
>> +0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
>> +0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
>> +0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
>> +0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
>> +0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
>> +0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
>> +0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
>> +0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
>> +0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
>> +0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
>> +0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
>> +0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
>> +0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
>> +0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,
>> +times4(times4(times4(times4(times4(0xFF)))))};
>
> I know the formatting of the table is like the rest of the tables in the
> file, but it's ugly.
>
> The stacked times4 macro is duplicated, another define would be better IMO.

Replaced this one with a times256 macro.

>> +const uint8_t ff_zigzag_direct[64] = {
>> +  0,   1,  8, 16,  9,  2,  3, 10,
>> +  17, 24, 32, 25, 18, 11,  4,  5,
>> +  12, 19, 26, 33, 40, 48, 41, 34,
>> +  27, 20, 13,  6,  7, 14, 21, 28,
>> +  35, 42, 49, 56, 57, 50, 43, 36,
>> +  29, 22, 15, 23, 30, 37, 44, 51,
>> +  58, 59, 52, 45, 38, 31, 39, 46,
>> +  53, 60, 61, 54, 47, 55, 62, 63
>> +};
>
> Switching from 4-space indentation (in dsputil.c) to 2-space (in
> mathtables.c) is pretty random...

Indeed, changed to keep 4-space indentation for this table.

// Martin

Patch

diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
index 3f2660b..492e1cb 100644
--- a/libavcodec/dsputil.c
+++ b/libavcodec/dsputil.c
@@ -41,7 +41,6 @@ 
 #include "mpegvideo.h"
 #include "config.h"
 
-uint8_t ff_cropTbl[256 + 2 * MAX_NEG_CROP] = {0, };
 uint32_t ff_squareTbl[512] = {0, };
 
 #define BIT_DEPTH 9
@@ -59,17 +58,6 @@  uint32_t ff_squareTbl[512] = {0, };
 #define pb_7f (~0UL/255 * 0x7f)
 #define pb_80 (~0UL/255 * 0x80)
 
-const uint8_t ff_zigzag_direct[64] = {
-    0,   1,  8, 16,  9,  2,  3, 10,
-    17, 24, 32, 25, 18, 11,  4,  5,
-    12, 19, 26, 33, 40, 48, 41, 34,
-    27, 20, 13,  6,  7, 14, 21, 28,
-    35, 42, 49, 56, 57, 50, 43, 36,
-    29, 22, 15, 23, 30, 37, 44, 51,
-    58, 59, 52, 45, 38, 31, 39, 46,
-    53, 60, 61, 54, 47, 55, 62, 63
-};
-
 /* Specific zigzag scan for 248 idct. NOTE that unlike the
    specification, we interleave the fields */
 const uint8_t ff_zigzag248_direct[64] = {
@@ -2538,12 +2526,6 @@  av_cold void ff_dsputil_static_init(void)
 {
     int i;
 
-    for(i=0;i<256;i++) ff_cropTbl[i + MAX_NEG_CROP] = i;
-    for(i=0;i<MAX_NEG_CROP;i++) {
-        ff_cropTbl[i] = 0;
-        ff_cropTbl[i + MAX_NEG_CROP + 256] = 255;
-    }
-
     for(i=0;i<512;i++) {
         ff_squareTbl[i] = (i - 256) * (i - 256);
     }
diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h
index aa34488..798e228 100644
--- a/libavcodec/dsputil.h
+++ b/libavcodec/dsputil.h
@@ -47,7 +47,7 @@  extern const uint8_t ff_zigzag248_direct[64];
 
 /* temporary */
 extern uint32_t ff_squareTbl[512];
-extern uint8_t ff_cropTbl[256 + 2 * MAX_NEG_CROP];
+extern const uint8_t ff_cropTbl[256 + 2 * MAX_NEG_CROP];
 
 void ff_put_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
 void ff_avg_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
diff --git a/libavcodec/mathtables.c b/libavcodec/mathtables.c
index 141aa78..46b6963 100644
--- a/libavcodec/mathtables.c
+++ b/libavcodec/mathtables.c
@@ -85,3 +85,36 @@  const uint8_t ff_reverse[256] = {
 0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7,
 0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF,
 };
+
+#define times4(x) x, x, x, x
+
+const uint8_t ff_cropTbl[256 + 2 * 1024] = {
+times4(times4(times4(times4(times4(0x00))))),
+0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,
+times4(times4(times4(times4(times4(0xFF)))))};
+
+const uint8_t ff_zigzag_direct[64] = {
+  0,   1,  8, 16,  9,  2,  3, 10,
+  17, 24, 32, 25, 18, 11,  4,  5,
+  12, 19, 26, 33, 40, 48, 41, 34,
+  27, 20, 13,  6,  7, 14, 21, 28,
+  35, 42, 49, 56, 57, 50, 43, 36,
+  29, 22, 15, 23, 30, 37, 44, 51,
+  58, 59, 52, 45, 38, 31, 39, 46,
+  53, 60, 61, 54, 47, 55, 62, 63
+};