avcodec/idctdsp: Clear idct/idct_add for studio profile
[ffmpeg.git] / libavcodec / texturedspenc.c
index 5bd0777..3d68e0c 100644 (file)
 
 #include "texturedsp.h"
 
-const static uint8_t expand5[32] = {
+static const uint8_t expand5[32] = {
       0,   8,  16,  24,  33,  41,  49,  57,  66,  74,  82,  90,
      99, 107, 115, 123, 132, 140, 148, 156, 165, 173, 181, 189,
     198, 206, 214, 222, 231, 239, 247, 255,
 };
 
-const static uint8_t expand6[64] = {
+static const uint8_t expand6[64] = {
       0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  44,
      48,  52,  56,  60,  65,  69,  73,  77,  81,  85,  89,  93,
      97, 101, 105, 109, 113, 117, 121, 125, 130, 134, 138, 142,
@@ -47,7 +47,7 @@ const static uint8_t expand6[64] = {
     243, 247, 251, 255,
 };
 
-const static uint8_t match5[256][2] = {
+static const uint8_t match5[256][2] = {
     {  0,  0 }, {  0,  0 }, {  0,  1 }, {  0,  1 }, {  1,  0 }, {  1,  0 },
     {  1,  0 }, {  1,  1 }, {  1,  1 }, {  2,  0 }, {  2,  0 }, {  0,  4 },
     {  2,  1 }, {  2,  1 }, {  2,  1 }, {  3,  0 }, {  3,  0 }, {  3,  0 },
@@ -93,7 +93,7 @@ const static uint8_t match5[256][2] = {
     { 31, 30 }, { 31, 30 }, { 31, 31 }, { 31, 31 },
 };
 
-const static uint8_t match6[256][2] = {
+static const uint8_t match6[256][2] = {
     {  0,  0 }, {  0,  1 }, {  1,  0 }, {  1,  0 }, {  1,  1 }, {  2,  0 },
     {  2,  1 }, {  3,  0 }, {  3,  0 }, {  3,  1 }, {  4,  0 }, {  4,  0 },
     {  4,  1 }, {  5,  0 }, {  5,  1 }, {  6,  0 }, {  6,  0 }, {  6,  1 },
@@ -181,7 +181,7 @@ static unsigned int match_colors(const uint8_t *block, ptrdiff_t stride,
     int x, y, k = 0;
     int c0_point, half_point, c3_point;
     uint8_t color[16];
-    const int indexMap[8] = {
+    static const int indexMap[8] = {
         0 << 30, 2 << 30, 0 << 30, 2 << 30,
         3 << 30, 3 << 30, 1 << 30, 1 << 30,
     };
@@ -213,7 +213,7 @@ static unsigned int match_colors(const uint8_t *block, ptrdiff_t stride,
      * the same inside that subinterval.
      *
      * Relying on this 1d approximation isn't always optimal in terms of
-     * euclidean distance, but it's very close and a lot faster.
+     * Euclidean distance, but it's very close and a lot faster.
      *
      * http://cbloomrants.blogspot.com/2008/12/12-08-08-dxtc-summary.html */
     c0_point   = (stops[1] + stops[3]) >> 1;
@@ -309,7 +309,7 @@ static void optimize_colors(const uint8_t *block, ptrdiff_t stride,
     if (fabs(vfb) > magn)
         magn = fabs(vfb);
 
-    /* if magnitudo is too small, default to luminance */
+    /* if magnitude is too small, default to luminance */
     if (magn < 4.0f) {
         /* JPEG YCbCr luma coefs, scaled by 1000 */
         v_r = 299;
@@ -359,8 +359,8 @@ static int refine_colors(const uint8_t *block, ptrdiff_t stride,
     /* Additional magic to save a lot of multiplies in the accumulating loop.
      * The tables contain precomputed products of weights for least squares
      * system, accumulated inside one 32-bit register */
-    const int w1tab[4] = { 3, 0, 2, 1 };
-    const int prods[4] = { 0x090000, 0x000900, 0x040102, 0x010402 };
+    static const int w1tab[4] = { 3, 0, 2, 1 };
+    static const int prods[4] = { 0x090000, 0x000900, 0x040102, 0x010402 };
 
     /* Check if all pixels have the same index */
     if ((mask ^ (mask << 2)) < 4) {
@@ -583,14 +583,10 @@ static void rgba2ycocg(uint8_t *dst, const uint8_t *pixel)
     int b =  pixel[2];
     int t = (2 + r + b) >> 2;
 
-    int y  = av_clip_uint8(g + t);
-    int co = av_clip_uint8(128 + ((r - b + 1) >> 1));
-    int cg = av_clip_uint8(128 + g - t);
-
-    dst[0] = (uint8_t) co;
-    dst[1] = (uint8_t) cg;
+    dst[0] = av_clip_uint8(128 + ((r - b + 1) >> 1));   /* Co */
+    dst[1] = av_clip_uint8(128 + g - t);                /* Cg */
     dst[2] = 0;
-    dst[3] = (uint8_t) y;
+    dst[3] = av_clip_uint8(g + t);                      /* Y */
 }
 
 /**
@@ -651,9 +647,26 @@ static int dxt5ys_block(uint8_t *dst, ptrdiff_t stride, const uint8_t *block)
     return 16;
 }
 
+/**
+ * Compress one block of RGBA pixels in a RGTC1U texture and store the
+ * resulting bytes in 'dst'. Use the alpha channel of the input image.
+ *
+ * @param dst    output buffer.
+ * @param stride scanline in bytes.
+ * @param block  block to compress.
+ * @return how much texture data has been written.
+ */
+static int rgtc1u_alpha_block(uint8_t *dst, ptrdiff_t stride, const uint8_t *block)
+{
+    compress_alpha(dst, stride, block);
+
+    return 8;
+}
+
 av_cold void ff_texturedspenc_init(TextureDSPContext *c)
 {
-    c->dxt1_block   = dxt1_block;
-    c->dxt5_block   = dxt5_block;
-    c->dxt5ys_block = dxt5ys_block;
+    c->dxt1_block         = dxt1_block;
+    c->dxt5_block         = dxt5_block;
+    c->dxt5ys_block       = dxt5ys_block;
+    c->rgtc1u_alpha_block = rgtc1u_alpha_block;
 }