Browse code

Merge remote-tracking branch 'qatar/master'

* qatar/master:
fate: Add tests for more AAC features.
aacps: Add missing newline in error message.
fate: Add tests for vc1/wmapro in ism.
aacdec: Add a fate test for 5.1 channel SBR.
aacdec: Turn off PS for multichannel files that use PCE based configs.
cabac: remove put_cabac_u/ueg from cabac-test.
swscale: RGB4444 and BGR444 input
FATE: add test for xWMA demuxer.
FATE: add test for SMJPEG demuxer and associated IMA ADPCM audio decoder.
mpegaudiodec: optimized iMDCT transform
mpegaudiodec: change imdct window arrangment for better pointer alignment
mpegaudiodec: move imdct and windowing function to mpegaudiodsp
mpegaudiodec: interleave iMDCT buffer to simplify future SIMD implementations
swscale: convert yuy2/uyvy/nv12/nv21ToY/UV from inline asm to yasm.
FATE: test to exercise WTV demuxer.
mjpegdec: K&R formatting cosmetics
swscale: K&R formatting cosmetics for code examples
swscale: K&R reformatting cosmetics for header files
FATE test: cvid-grayscale; ensures that the grayscale Cinepak variant is exercised.

Conflicts:
libavcodec/cabac.c
libavcodec/mjpegdec.c
libavcodec/mpegaudiodec.c
libavcodec/mpegaudiodsp.c
libavcodec/mpegaudiodsp.h
libavcodec/mpegaudiodsp_template.c
libavcodec/x86/Makefile
libavcodec/x86/imdct36_sse.asm
libavcodec/x86/mpegaudiodec_mmx.c
libswscale/swscale-test.c
libswscale/swscale.c
libswscale/swscale_internal.h
libswscale/x86/swscale_template.c
tests/fate/demux.mak
tests/fate/microsoft.mak
tests/fate/video.mak
tests/fate/wma.mak
tests/ref/lavfi/pixfmts_scale

Merged-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2012/01/10 10:50:54
Showing 38 changed files
... ...
@@ -84,6 +84,7 @@ enum BandType {
84 84
 #define IS_CODEBOOK_UNSIGNED(x) ((x - 1) & 10)
85 85
 
86 86
 enum ChannelPosition {
87
+    AAC_CHANNEL_OFF   = 0,
87 88
     AAC_CHANNEL_FRONT = 1,
88 89
     AAC_CHANNEL_SIDE  = 2,
89 90
     AAC_CHANNEL_BACK  = 3,
... ...
@@ -163,6 +163,19 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
163 163
     }
164 164
 }
165 165
 
166
+static int count_channels(enum ChannelPosition che_pos[4][MAX_ELEM_ID])
167
+{
168
+    int i, type, sum = 0;
169
+    for (i = 0; i < MAX_ELEM_ID; i++) {
170
+        for (type = 0; type < 4; type++) {
171
+            sum += (1 + (type == TYPE_CPE)) *
172
+                (che_pos[type][i] != AAC_CHANNEL_OFF &&
173
+                 che_pos[type][i] != AAC_CHANNEL_CC);
174
+        }
175
+    }
176
+    return sum;
177
+}
178
+
166 179
 /**
167 180
  * Check for the channel element in the current channel position configuration.
168 181
  * If it exists, make sure the appropriate element is allocated and map the
... ...
@@ -437,6 +450,12 @@ static int decode_ga_specific_config(AACContext *ac, AVCodecContext *avctx,
437 437
         if ((ret = set_default_channel_config(avctx, new_che_pos, channel_config)))
438 438
             return ret;
439 439
     }
440
+
441
+    if (count_channels(new_che_pos) > 1) {
442
+        m4ac->ps = 0;
443
+    } else if (m4ac->sbr == 1 && m4ac->ps == -1)
444
+        m4ac->ps = 1;
445
+
440 446
     if (ac && (ret = output_configure(ac, ac->che_pos, new_che_pos, channel_config, OC_GLOBAL_HDR)))
441 447
         return ret;
442 448
 
... ...
@@ -495,8 +514,6 @@ static int decode_audio_specific_config(AACContext *ac,
495 495
         av_log(avctx, AV_LOG_ERROR, "invalid sampling rate index %d\n", m4ac->sampling_index);
496 496
         return -1;
497 497
     }
498
-    if (m4ac->sbr == 1 && m4ac->ps == -1)
499
-        m4ac->ps = 1;
500 498
 
501 499
     skip_bits_long(&gb, i);
502 500
 
... ...
@@ -223,7 +223,7 @@ int ff_ps_read_data(AVCodecContext *avctx, GetBitContext *gb_host, PSContext *ps
223 223
             cnt -= 2 + ps_read_extension_data(gb, ps, ps_extension_id);
224 224
         }
225 225
         if (cnt < 0) {
226
-            av_log(avctx, AV_LOG_ERROR, "ps extension overflow %d", cnt);
226
+            av_log(avctx, AV_LOG_ERROR, "ps extension overflow %d\n", cnt);
227 227
             goto err;
228 228
         }
229 229
         skip_bits(gb, cnt);
... ...
@@ -252,67 +252,6 @@ static int put_cabac_terminate(CABACContext *c, int bit){
252 252
     return (put_bits_count(&c->pb)+7)>>3;
253 253
 }
254 254
 
255
-/**
256
- * put (truncated) unary binarization.
257
- */
258
-static void put_cabac_u(CABACContext *c, uint8_t * state, int v, int max, int max_index, int truncated){
259
-    int i;
260
-
261
-    assert(v <= max);
262
-
263
-    for(i=0; i<v; i++){
264
-        put_cabac(c, state, 1);
265
-        if(i < max_index) state++;
266
-    }
267
-    if(truncated==0 || v<max)
268
-        put_cabac(c, state, 0);
269
-}
270
-
271
-/**
272
- * put unary exp golomb k-th order binarization.
273
- */
274
-static void put_cabac_ueg(CABACContext *c, uint8_t * state, int v, int max, int is_signed, int k, int max_index){
275
-    int i;
276
-
277
-    if(v==0)
278
-        put_cabac(c, state, 0);
279
-    else{
280
-        const int sign= v < 0;
281
-
282
-        if(is_signed) v= FFABS(v);
283
-
284
-        if(v<max){
285
-            for(i=0; i<v; i++){
286
-                put_cabac(c, state, 1);
287
-                if(i < max_index) state++;
288
-            }
289
-
290
-            put_cabac(c, state, 0);
291
-        }else{
292
-            int m= 1<<k;
293
-
294
-            for(i=0; i<max; i++){
295
-                put_cabac(c, state, 1);
296
-                if(i < max_index) state++;
297
-            }
298
-
299
-            v -= max;
300
-            while(v >= m){ //FIXME optimize
301
-                put_cabac_bypass(c, 1);
302
-                v-= m;
303
-                m+= m;
304
-            }
305
-            put_cabac_bypass(c, 0);
306
-            while(m>>=1){
307
-                put_cabac_bypass(c, v&m);
308
-            }
309
-        }
310
-
311
-        if(is_signed)
312
-            put_cabac_bypass(c, sign);
313
-    }
314
-}
315
-
316 255
 int main(void){
317 256
     CABACContext c;
318 257
     uint8_t b[9*SIZE];
... ...
@@ -342,19 +281,6 @@ START_TIMER
342 342
 STOP_TIMER("put_cabac")
343 343
     }
344 344
 
345
-#if 0
346
-    for(i=0; i<SIZE; i++){
347
-START_TIMER
348
-        put_cabac_u(&c, state, r[i], 6, 3, i&1);
349
-STOP_TIMER("put_cabac_u")
350
-    }
351
-
352
-    for(i=0; i<SIZE; i++){
353
-START_TIMER
354
-        put_cabac_ueg(&c, state, r[i], 3, 0, 1, 2);
355
-STOP_TIMER("put_cabac_ueg")
356
-    }
357
-#endif
358 345
     put_cabac_terminate(&c, 1);
359 346
 
360 347
     ff_init_cabac_decoder(&c, b, SIZE);
... ...
@@ -132,10 +132,6 @@ static uint16_t band_index_long[9][23];
132 132
 static INTFLOAT is_table[2][16];
133 133
 static INTFLOAT is_table_lsf[2][2][16];
134 134
 static INTFLOAT csa_table[8][4];
135
-/** Window for MDCT. Note that only the component [0,17] and [20,37] are used,
136
-    the components 18 and 19 are there only to assure 128-bit alignment for asm
137
- */
138
-DECLARE_ALIGNED(16, static INTFLOAT, mdct_win)[8][40];
139 135
 
140 136
 static int16_t division_tab3[1<<6 ];
141 137
 static int16_t division_tab5[1<<8 ];
... ...
@@ -422,45 +418,6 @@ static av_cold void decode_init_static(void)
422 422
         csa_table[i][3] = ca - cs;
423 423
 #endif
424 424
     }
425
-
426
-    /* compute mdct windows */
427
-    for (i = 0; i < 36; i++) {
428
-        for (j = 0; j < 4; j++) {
429
-            double d;
430
-
431
-            if (j == 2 && i % 3 != 1)
432
-                continue;
433
-
434
-            d = sin(M_PI * (i + 0.5) / 36.0);
435
-            if (j == 1) {
436
-                if      (i >= 30) d = 0;
437
-                else if (i >= 24) d = sin(M_PI * (i - 18 + 0.5) / 12.0);
438
-                else if (i >= 18) d = 1;
439
-            } else if (j == 3) {
440
-                if      (i <   6) d = 0;
441
-                else if (i <  12) d = sin(M_PI * (i -  6 + 0.5) / 12.0);
442
-                else if (i <  18) d = 1;
443
-            }
444
-            //merge last stage of imdct into the window coefficients
445
-            d *= 0.5 / cos(M_PI * (2 * i + 19) / 72);
446
-
447
-            if (j == 2)
448
-                mdct_win[j][i/3] = FIXHR((d / (1<<5)));
449
-            else {
450
-                int idx = i < 18 ? i : i + 2;
451
-                mdct_win[j][idx] = FIXHR((d / (1<<5)));
452
-            }
453
-        }
454
-    }
455
-
456
-    /* NOTE: we do frequency inversion adter the MDCT by changing
457
-        the sign of the right window coefs */
458
-    for (j = 0; j < 4; j++) {
459
-        for (i = 0; i < 40; i += 2) {
460
-            mdct_win[j + 4][i    ] =  mdct_win[j][i    ];
461
-            mdct_win[j + 4][i + 1] = -mdct_win[j][i + 1];
462
-        }
463
-    }
464 425
 }
465 426
 
466 427
 static av_cold int decode_init(AVCodecContext * avctx)
... ...
@@ -1284,59 +1241,53 @@ static void compute_imdct(MPADecodeContext *s, GranuleDef *g,
1284 1284
         mdct_long_end = sblimit;
1285 1285
     }
1286 1286
 
1287
-    buf = mdct_buf;
1288
-    ptr = g->sb_hybrid;
1289
-    for (j = 0; j < mdct_long_end; j++) {
1290
-        int win_idx = (g->switch_point && j < 2) ? 0 : g->block_type;
1291
-        /* apply window & overlap with previous buffer */
1292
-        out_ptr = sb_samples + j;
1293
-        /* select window */
1294
-        win = mdct_win[win_idx + (4 & -(j & 1))];
1295
-        s->mpadsp.RENAME(imdct36)(out_ptr, buf, ptr, win);
1296
-        out_ptr += 18 * SBLIMIT;
1297
-        ptr     += 18;
1298
-        buf     += 18;
1299
-    }
1287
+    s->mpadsp.RENAME(imdct36_blocks)(sb_samples, mdct_buf, g->sb_hybrid,
1288
+                                     mdct_long_end, g->switch_point,
1289
+                                     g->block_type);
1290
+
1291
+    buf = mdct_buf + 4*18*(mdct_long_end >> 2) + (mdct_long_end & 3);
1292
+    ptr = g->sb_hybrid + 18 * mdct_long_end;
1293
+
1300 1294
     for (j = mdct_long_end; j < sblimit; j++) {
1301 1295
         /* select frequency inversion */
1302
-        win     = mdct_win[2 + (4  & -(j & 1))];
1296
+        win     = RENAME(ff_mdct_win)[2 + (4  & -(j & 1))];
1303 1297
         out_ptr = sb_samples + j;
1304 1298
 
1305 1299
         for (i = 0; i < 6; i++) {
1306
-            *out_ptr = buf[i];
1300
+            *out_ptr = buf[4*i];
1307 1301
             out_ptr += SBLIMIT;
1308 1302
         }
1309 1303
         imdct12(out2, ptr + 0);
1310 1304
         for (i = 0; i < 6; i++) {
1311
-            *out_ptr     = MULH3(out2[i    ], win[i    ], 1) + buf[i + 6*1];
1312
-            buf[i + 6*2] = MULH3(out2[i + 6], win[i + 6], 1);
1305
+            *out_ptr     = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*1)];
1306
+            buf[4*(i + 6*2)] = MULH3(out2[i + 6], win[i + 6], 1);
1313 1307
             out_ptr += SBLIMIT;
1314 1308
         }
1315 1309
         imdct12(out2, ptr + 1);
1316 1310
         for (i = 0; i < 6; i++) {
1317
-            *out_ptr     = MULH3(out2[i    ], win[i    ], 1) + buf[i + 6*2];
1318
-            buf[i + 6*0] = MULH3(out2[i + 6], win[i + 6], 1);
1311
+            *out_ptr     = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*2)];
1312
+            buf[4*(i + 6*0)] = MULH3(out2[i + 6], win[i + 6], 1);
1319 1313
             out_ptr += SBLIMIT;
1320 1314
         }
1321 1315
         imdct12(out2, ptr + 2);
1322 1316
         for (i = 0; i < 6; i++) {
1323
-            buf[i + 6*0] = MULH3(out2[i    ], win[i    ], 1) + buf[i + 6*0];
1324
-            buf[i + 6*1] = MULH3(out2[i + 6], win[i + 6], 1);
1325
-            buf[i + 6*2] = 0;
1317
+            buf[4*(i + 6*0)] = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*0)];
1318
+            buf[4*(i + 6*1)] = MULH3(out2[i + 6], win[i + 6], 1);
1319
+            buf[4*(i + 6*2)] = 0;
1326 1320
         }
1327 1321
         ptr += 18;
1328
-        buf += 18;
1322
+        buf += (j&3) != 3 ? 1 : (4*18-3);
1329 1323
     }
1330 1324
     /* zero bands */
1331 1325
     for (j = sblimit; j < SBLIMIT; j++) {
1332 1326
         /* overlap */
1333 1327
         out_ptr = sb_samples + j;
1334 1328
         for (i = 0; i < 18; i++) {
1335
-            *out_ptr = buf[i];
1336
-            buf[i]   = 0;
1329
+            *out_ptr = buf[4*i];
1330
+            buf[4*i]   = 0;
1337 1331
             out_ptr += SBLIMIT;
1338 1332
         }
1339
-        buf += 18;
1333
+        buf += (j&3) != 3 ? 1 : (4*18-3);
1340 1334
     }
1341 1335
 }
1342 1336
 
... ...
@@ -28,6 +28,8 @@ void ff_mpadsp_init(MPADSPContext *s)
28 28
     DCTContext dct;
29 29
 
30 30
     ff_dct_init(&dct, 5, DCT_II);
31
+    ff_init_mpadsp_tabs_float();
32
+    ff_init_mpadsp_tabs_fixed();
31 33
 
32 34
     s->apply_window_float = ff_mpadsp_apply_window_float;
33 35
     s->apply_window_fixed = ff_mpadsp_apply_window_fixed;
... ...
@@ -35,8 +37,8 @@ void ff_mpadsp_init(MPADSPContext *s)
35 35
     s->dct32_float = dct.dct32;
36 36
     s->dct32_fixed = ff_dct32_fixed;
37 37
 
38
-    s->imdct36_float = ff_imdct36_float;
39
-    s->imdct36_fixed = ff_imdct36_fixed;
38
+    s->imdct36_blocks_float = ff_imdct36_blocks_float;
39
+    s->imdct36_blocks_fixed = ff_imdct36_blocks_fixed;
40 40
 
41 41
     if (ARCH_ARM)     ff_mpadsp_init_arm(s);
42 42
     if (HAVE_MMX)     ff_mpadsp_init_mmx(s);
... ...
@@ -20,6 +20,7 @@
20 20
 #define AVCODEC_MPEGAUDIODSP_H
21 21
 
22 22
 #include <stdint.h>
23
+#include "libavutil/common.h"
23 24
 
24 25
 typedef struct MPADSPContext {
25 26
     void (*apply_window_float)(float *synth_buf, float *window,
... ...
@@ -28,8 +29,11 @@ typedef struct MPADSPContext {
28 28
                                int *dither_state, int16_t *samples, int incr);
29 29
     void (*dct32_float)(float *dst, const float *src);
30 30
     void (*dct32_fixed)(int *dst, const int *src);
31
-    void (*imdct36_float)(float *out, float *buf, float *in, float *win);
32
-    void (*imdct36_fixed)(int *out, int *buf, int *in, int *win);
31
+
32
+    void (*imdct36_blocks_float)(float *out, float *buf, float *in,
33
+                                 int count, int switch_point, int block_type);
34
+    void (*imdct36_blocks_fixed)(int *out, int *buf, int *in,
35
+                                 int count, int switch_point, int block_type);
33 36
 } MPADSPContext;
34 37
 
35 38
 void ff_mpadsp_init(MPADSPContext *s);
... ...
@@ -63,7 +67,19 @@ void ff_mpadsp_apply_window_fixed(int32_t *synth_buf, int32_t *window,
63 63
                                   int *dither_state, int16_t *samples,
64 64
                                   int incr);
65 65
 
66
-void ff_imdct36_fixed(int *out, int *buf, int *in, int *win);
67
-void ff_imdct36_float(float *out, float *buf, float *in, float *win);
66
+void ff_imdct36_blocks_float(float *out, float *buf, float *in,
67
+                             int count, int switch_point, int block_type);
68
+
69
+void ff_imdct36_blocks_fixed(int *out, int *buf, int *in,
70
+                             int count, int switch_point, int block_type);
71
+
72
+void ff_init_mpadsp_tabs_float(void);
73
+void ff_init_mpadsp_tabs_fixed(void);
74
+
75
+/** For SSE implementation, MDCT_BUF_SIZE/2 should be 128-bit aligned */
76
+#define MDCT_BUF_SIZE FFALIGN(36, 2*4)
77
+
78
+extern int ff_mdct_win_fixed[8][MDCT_BUF_SIZE];
79
+extern float ff_mdct_win_float[8][MDCT_BUF_SIZE];
68 80
 
69 81
 #endif /* AVCODEC_MPEGAUDIODSP_H */
... ...
@@ -69,6 +69,12 @@ static inline int round_sample(int64_t *sum)
69 69
 #   define FIXHR(a)       ((int)((a) * (1LL<<32) + 0.5))
70 70
 #endif
71 71
 
72
+/** Window for MDCT. Actually only the elements in [0,17] and
73
+    [MDCT_BUF_SIZE/2, MDCT_BUF_SIZE/2 + 17] are actually used. The rest
74
+    is just to preserve alignment for SIMD implementations.
75
+*/
76
+DECLARE_ALIGNED(16, INTFLOAT, RENAME(ff_mdct_win))[8][MDCT_BUF_SIZE];
77
+
72 78
 DECLARE_ALIGNED(16, MPA_INT, RENAME(ff_mpa_synth_window))[512+256];
73 79
 
74 80
 #define SUM8(op, sum, w, p)               \
... ...
@@ -204,6 +210,7 @@ void av_cold RENAME(ff_mpa_synth_init)(MPA_INT *window)
204 204
             window[512 - i] = v;
205 205
     }
206 206
 
207
+
207 208
     // Needed for avoiding shuffles in ASM implementations
208 209
     for(i=0; i < 8; i++)
209 210
         for(j=0; j < 16; j++)
... ...
@@ -214,6 +221,48 @@ void av_cold RENAME(ff_mpa_synth_init)(MPA_INT *window)
214 214
             window[512+128+16*i+j] = window[64*i+48-j];
215 215
 }
216 216
 
217
+void RENAME(ff_init_mpadsp_tabs)(void)
218
+{
219
+    int i, j;
220
+    /* compute mdct windows */
221
+    for (i = 0; i < 36; i++) {
222
+        for (j = 0; j < 4; j++) {
223
+            double d;
224
+
225
+            if (j == 2 && i % 3 != 1)
226
+                continue;
227
+
228
+            d = sin(M_PI * (i + 0.5) / 36.0);
229
+            if (j == 1) {
230
+                if      (i >= 30) d = 0;
231
+                else if (i >= 24) d = sin(M_PI * (i - 18 + 0.5) / 12.0);
232
+                else if (i >= 18) d = 1;
233
+            } else if (j == 3) {
234
+                if      (i <   6) d = 0;
235
+                else if (i <  12) d = sin(M_PI * (i -  6 + 0.5) / 12.0);
236
+                else if (i <  18) d = 1;
237
+            }
238
+            //merge last stage of imdct into the window coefficients
239
+            d *= 0.5 / cos(M_PI * (2 * i + 19) / 72);
240
+
241
+            if (j == 2)
242
+                RENAME(ff_mdct_win)[j][i/3] = FIXHR((d / (1<<5)));
243
+            else {
244
+                int idx = i < 18 ? i : i + (MDCT_BUF_SIZE/2 - 18);
245
+                RENAME(ff_mdct_win)[j][idx] = FIXHR((d / (1<<5)));
246
+            }
247
+        }
248
+    }
249
+
250
+    /* NOTE: we do frequency inversion adter the MDCT by changing
251
+        the sign of the right window coefs */
252
+    for (j = 0; j < 4; j++) {
253
+        for (i = 0; i < MDCT_BUF_SIZE; i += 2) {
254
+            RENAME(ff_mdct_win)[j + 4][i    ] =  RENAME(ff_mdct_win)[j][i    ];
255
+            RENAME(ff_mdct_win)[j + 4][i + 1] = -RENAME(ff_mdct_win)[j][i + 1];
256
+        }
257
+    }
258
+}
217 259
 /* cos(pi*i/18) */
218 260
 #define C1 FIXHR(0.98480775301220805936/2)
219 261
 #define C2 FIXHR(0.93969262078590838405/2)
... ...
@@ -227,43 +276,42 @@ void av_cold RENAME(ff_mpa_synth_init)(MPA_INT *window)
227 227
 /* 0.5 / cos(pi*(2*i+1)/36) */
228 228
 static const INTFLOAT icos36[9] = {
229 229
     FIXR(0.50190991877167369479),
230
-    FIXR(0.51763809020504152469),
230
+    FIXR(0.51763809020504152469), //0
231 231
     FIXR(0.55168895948124587824),
232 232
     FIXR(0.61038729438072803416),
233
-    FIXR(0.70710678118654752439),
233
+    FIXR(0.70710678118654752439), //1
234 234
     FIXR(0.87172339781054900991),
235 235
     FIXR(1.18310079157624925896),
236
-    FIXR(1.93185165257813657349),
236
+    FIXR(1.93185165257813657349), //2
237 237
     FIXR(5.73685662283492756461),
238 238
 };
239 239
 
240 240
 /* 0.5 / cos(pi*(2*i+1)/36) */
241 241
 static const INTFLOAT icos36h[9] = {
242 242
     FIXHR(0.50190991877167369479/2),
243
-    FIXHR(0.51763809020504152469/2),
243
+    FIXHR(0.51763809020504152469/2), //0
244 244
     FIXHR(0.55168895948124587824/2),
245 245
     FIXHR(0.61038729438072803416/2),
246
-    FIXHR(0.70710678118654752439/2),
246
+    FIXHR(0.70710678118654752439/2), //1
247 247
     FIXHR(0.87172339781054900991/2),
248 248
     FIXHR(1.18310079157624925896/4),
249
-    FIXHR(1.93185165257813657349/4),
249
+    FIXHR(1.93185165257813657349/4), //2
250
+//    FIXHR(5.73685662283492756461),
250 251
 };
251 252
 
252
-
253 253
 /* using Lee like decomposition followed by hand coded 9 points DCT */
254
-void RENAME(ff_imdct36)(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in,
255
-                        INTFLOAT *win)
254
+static void imdct36(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in, INTFLOAT *win)
256 255
 {
257 256
     int i, j;
258 257
     INTFLOAT t0, t1, t2, t3, s0, s1, s2, s3;
259 258
     INTFLOAT tmp[18], *tmp1, *in1;
260 259
 
261
-    for(i=17;i>=1;i--)
260
+    for (i = 17; i >= 1; i--)
262 261
         in[i] += in[i-1];
263
-    for(i=17;i>=3;i-=2)
262
+    for (i = 17; i >= 3; i -= 2)
264 263
         in[i] += in[i-2];
265 264
 
266
-    for(j=0;j<2;j++) {
265
+    for (j = 0; j < 2; j++) {
267 266
         tmp1 = tmp + j;
268 267
         in1 = in + j;
269 268
 
... ...
@@ -295,7 +343,7 @@ void RENAME(ff_imdct36)(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in,
295 295
     }
296 296
 
297 297
     i = 0;
298
-    for(j=0;j<4;j++) {
298
+    for (j = 0; j < 4; j++) {
299 299
         t0 = tmp[i];
300 300
         t1 = tmp[i + 2];
301 301
         s0 = t1 + t0;
... ...
@@ -303,22 +351,22 @@ void RENAME(ff_imdct36)(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in,
303 303
 
304 304
         t2 = tmp[i + 1];
305 305
         t3 = tmp[i + 3];
306
-        s1 = MULH3(t3 + t2, icos36h[j], 2);
307
-        s3 = MULLx(t3 - t2, icos36[8 - j], FRAC_BITS);
306
+        s1 = MULH3(t3 + t2, icos36h[    j], 2);
307
+        s3 = MULLx(t3 - t2, icos36 [8 - j], FRAC_BITS);
308 308
 
309 309
         t0 = s0 + s1;
310 310
         t1 = s0 - s1;
311
-        out[(9 + j)*SBLIMIT] =  MULH3(t1, win[9 + j], 1) + buf[9 + j];
312
-        out[(8 - j)*SBLIMIT] =  MULH3(t1, win[8 - j], 1) + buf[8 - j];
313
-        buf[9 + j] = MULH3(t0, win[20 + 9 + j], 1);
314
-        buf[8 - j] = MULH3(t0, win[20 + 8 - j], 1);
311
+        out[(9 + j) * SBLIMIT] = MULH3(t1, win[     9 + j], 1) + buf[4*(9 + j)];
312
+        out[(8 - j) * SBLIMIT] = MULH3(t1, win[     8 - j], 1) + buf[4*(8 - j)];
313
+        buf[4 * ( 9 + j     )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + 9 + j], 1);
314
+        buf[4 * ( 8 - j     )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + 8 - j], 1);
315 315
 
316 316
         t0 = s2 + s3;
317 317
         t1 = s2 - s3;
318
-        out[(9 + 8 - j)*SBLIMIT] =  MULH3(t1, win[9 + 8 - j], 1) + buf[9 + 8 - j];
319
-        out[(        j)*SBLIMIT] =  MULH3(t1, win[        j], 1) + buf[        j];
320
-        buf[9 + 8 - j] = MULH3(t0, win[20 + 9 + 8 - j], 1);
321
-        buf[      + j] = MULH3(t0, win[20         + j], 1);
318
+        out[(9 + 8 - j) * SBLIMIT] = MULH3(t1, win[     9 + 8 - j], 1) + buf[4*(9 + 8 - j)];
319
+        out[         j  * SBLIMIT] = MULH3(t1, win[             j], 1) + buf[4*(        j)];
320
+        buf[4 * ( 9 + 8 - j     )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + 9 + 8 - j], 1);
321
+        buf[4 * (         j     )] = MULH3(t0, win[MDCT_BUF_SIZE/2         + j], 1);
322 322
         i += 4;
323 323
     }
324 324
 
... ...
@@ -326,9 +374,28 @@ void RENAME(ff_imdct36)(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in,
326 326
     s1 = MULH3(tmp[17], icos36h[4], 2);
327 327
     t0 = s0 + s1;
328 328
     t1 = s0 - s1;
329
-    out[(9 + 4)*SBLIMIT] =  MULH3(t1, win[9 + 4], 1) + buf[9 + 4];
330
-    out[(8 - 4)*SBLIMIT] =  MULH3(t1, win[8 - 4], 1) + buf[8 - 4];
331
-    buf[9 + 4] = MULH3(t0, win[20 + 9 + 4], 1);
332
-    buf[8 - 4] = MULH3(t0, win[20 + 8 - 4], 1);
329
+    out[(9 + 4) * SBLIMIT] = MULH3(t1, win[     9 + 4], 1) + buf[4*(9 + 4)];
330
+    out[(8 - 4) * SBLIMIT] = MULH3(t1, win[     8 - 4], 1) + buf[4*(8 - 4)];
331
+    buf[4 * ( 9 + 4     )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + 9 + 4], 1);
332
+    buf[4 * ( 8 - 4     )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + 8 - 4], 1);
333
+}
334
+
335
+void RENAME(ff_imdct36_blocks)(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in,
336
+                               int count, int switch_point, int block_type)
337
+{
338
+    int j;
339
+    for (j=0 ; j < count; j++) {
340
+        /* apply window & overlap with previous buffer */
341
+
342
+        /* select window */
343
+        int win_idx = (switch_point && j < 2) ? 0 : block_type;
344
+        INTFLOAT *win = RENAME(ff_mdct_win)[win_idx + (4 & -(j & 1))];
345
+
346
+        imdct36(out, buf, in, win);
347
+
348
+        in  += 18;
349
+        buf += ((j&3) != 3 ? 1 : (72-3));
350
+        out++;
351
+    }
333 352
 }
334 353
 
... ...
@@ -53,92 +53,118 @@ ps_cosh_sse3:  dd 1.0, -0.50190991877167369479,  1.0, -5.73685662283492756461
53 53
                dd 1.0, -0.61038729438072803416, -1.0,  0.87172339781054900991
54 54
                dd 1.0,  0.70710678118654752439,  0.0,  0.0
55 55
 
56
+costabs:  times 4 dd  0.98480773
57
+          times 4 dd  0.93969262
58
+          times 4 dd  0.86602539
59
+          times 4 dd -0.76604444
60
+          times 4 dd -0.64278764
61
+          times 4 dd  0.50000000
62
+          times 4 dd -0.50000000
63
+          times 4 dd -0.34202015
64
+          times 4 dd -0.17364818
65
+          times 4 dd  0.50190992
66
+          times 4 dd  0.51763808
67
+          times 4 dd  0.55168896
68
+          times 4 dd  0.61038726
69
+          times 4 dd  0.70710677
70
+          times 4 dd  0.87172341
71
+          times 4 dd  1.18310082
72
+          times 4 dd  1.93185163
73
+          times 4 dd  5.73685646
74
+
56 75
 %define SBLIMIT 32
57 76
 SECTION_TEXT
58 77
 
59
-%macro PSHUFD_SSE_AVX 3
60
-    shufps %1, %2, %2, %3
61
-%endmacro
62
-%macro PSHUFD_SSE2 3
78
+%macro PSHUFD 3
79
+%if cpuflag(sse2) && notcpuflag(avx)
63 80
     pshufd %1, %2, %3
81
+%else
82
+    shufps %1, %2, %2, %3
83
+%endif
64 84
 %endmacro
65 85
 
66
-; input  %1={x1,x2,x3,x4}, %2={y1,y2,y3,y4}
67
-; output %3={x3,x4,y1,y2}
68
-%macro BUILDINVHIGHLOW_SSE 3
69
-    movlhps %3, %2
70
-    movhlps %3, %1
71
-%endmacro
72
-%macro BUILDINVHIGHLOW_AVX 3
73
-    shufps %3, %1, %2, 0x4e
86
+; input  %2={x1,x2,x3,x4}, %3={y1,y2,y3,y4}
87
+; output %1={x3,x4,y1,y2}
88
+%macro BUILDINVHIGHLOW 3
89
+%if cpuflag(avx)
90
+    shufps %1, %2, %3, 0x4e
91
+%else
92
+    movlhps %1, %3
93
+    movhlps %1, %2
94
+%endif
74 95
 %endmacro
75 96
 
76
-; input  %1={x1,x2,x3,x4}, %2={y1,y2,y3,y4}
77
-; output %3={x4,y1,y2,y3}
78
-%macro ROTLEFT_SSE 3
97
+; input  %2={x1,x2,x3,x4}, %3={y1,y2,y3,y4}
98
+; output %1={x4,y1,y2,y3}
99
+%macro ROTLEFT 3
100
+%if cpuflag(ssse3)
101
+    palignr  %1, %3, %2, 12
102
+%else
79 103
     BUILDINVHIGHLOW %1, %2, %3
80
-    shufps  %3, %3, %2, 0x99
81
-%endmacro
82
-
83
-%macro ROTLEFT_SSSE3 3
84
-    palignr  %3, %2, %1, 12
104
+    shufps  %1, %1, %3, 0x99
105
+%endif
85 106
 %endmacro
86 107
 
87
-%macro INVERTHL_SSE1 2
108
+%macro INVERTHL 2
109
+%if cpuflag(sse2)
110
+    PSHUFD  %1, %2, 0x4e
111
+%else
88 112
     movhlps %1, %2
89 113
     movlhps %1, %2
114
+%endif
90 115
 %endmacro
91 116
 
92
-%macro INVERTHL_SSE2 2
93
-    PSHUFD  %1, %2, 0x4e
94
-%endmacro
95
-
96
-%macro BUTTERF_SSE12 3
117
+%macro BUTTERF 3
97 118
     INVERTHL %2, %1
98 119
     xorps    %1, [ps_p1p1m1m1]
99 120
     addps    %1, %2
121
+%if cpuflag(sse3)
122
+    mulps    %1, %1, [ps_cosh_sse3 + %3]
123
+    PSHUFD   %2, %1, 0xb1
124
+    addsubps %1, %1, %2
125
+%else
100 126
     mulps    %1, [ps_cosh + %3]
101 127
     PSHUFD   %2, %1, 0xb1
102 128
     xorps    %1, [ps_p1m1p1m1]
103 129
     addps    %1, %2
104
-%endmacro
105
-%macro BUTTERF_SSE3 3
106
-    INVERTHL %2, %1
107
-    xorps    %1, %1, [ps_p1p1m1m1]
108
-    addps    %1, %1, %2
109
-    mulps    %1, %1, [ps_cosh_sse3 + %3]
110
-    PSHUFD   %2, %1, 0xb1
111
-    addsubps %1, %1, %2
130
+%endif
112 131
 %endmacro
113 132
 
114
-%macro STORE 3
133
+%macro STORE 4
115 134
     movhlps %2, %1
116
-    movss   [%3             ], %1
117
-    movss   [%3 +  8*SBLIMIT], %2
135
+    movss   [%3       ], %1
136
+    movss   [%3 + 2*%4], %2
118 137
     shufps  %1, %1, 0xb1
119
-    movss   [%3 +  4*SBLIMIT], %1
138
+    movss   [%3 +   %4], %1
120 139
     movhlps %2, %1
121
-    movss   [%3 + 12*SBLIMIT], %2
140
+    movss   [%3 + 3*%4], %2
141
+%endmacro
142
+
143
+%macro LOAD 4
144
+    movlps  %1, [%3       ]
145
+    movhps  %1, [%3 +   %4]
146
+    movlps  %2, [%3 + 2*%4]
147
+    movhps  %2, [%3 + 3*%4]
148
+    shufps  %1, %2, 0x88
122 149
 %endmacro
123 150
 
124 151
 %macro LOADA64 2
152
+%if cpuflag(avx)
153
+   movu     %1, [%2]
154
+%else
125 155
    movlps   %1, [%2]
126 156
    movhps   %1, [%2 + 8]
157
+%endif
127 158
 %endmacro
128 159
 
129
-%macro STOREA64 2
130
-   movlps   [%1    ], %2
131
-   movhps   [%1 + 8], %2
132
-%endmacro
133
-
134
-%macro DEFINE_IMDCT 1
135
-cglobal imdct36_float_%1, 4,4,9, out, buf, in, win
160
+%macro DEFINE_IMDCT 0
161
+cglobal imdct36_float, 4,4,9, out, buf, in, win
136 162
 
137 163
     ; for(i=17;i>=1;i--) in[i] += in[i-1];
138 164
     LOADA64 m0, inq
139 165
     LOADA64 m1, inq + 16
140 166
 
141
-    ROTLEFT m0, m1, m5
167
+    ROTLEFT m5, m0, m1
142 168
 
143 169
     PSHUFD  m6, m0, 0x93
144 170
     andps   m6, m6, [ps_mask]
... ...
@@ -146,16 +172,16 @@ cglobal imdct36_float_%1, 4,4,9, out, buf, in, win
146 146
 
147 147
     LOADA64 m2, inq + 32
148 148
 
149
-    ROTLEFT m1, m2, m7
149
+    ROTLEFT m7, m1, m2
150 150
 
151 151
     addps   m1, m1, m5
152 152
     LOADA64 m3, inq + 48
153 153
 
154
-    ROTLEFT m2, m3, m5
154
+    ROTLEFT m5, m2, m3
155 155
 
156 156
     xorps   m4, m4, m4
157 157
     movlps  m4, [inq+64]
158
-    BUILDINVHIGHLOW m3, m4, m6
158
+    BUILDINVHIGHLOW m6, m3, m4
159 159
     shufps  m6, m6, m4, 0xa9
160 160
 
161 161
     addps   m4, m4, m6
... ...
@@ -166,17 +192,17 @@ cglobal imdct36_float_%1, 4,4,9, out, buf, in, win
166 166
     movlhps m5, m5, m0
167 167
     andps   m5, m5, [ps_mask3]
168 168
 
169
-    BUILDINVHIGHLOW m0, m1, m7
169
+    BUILDINVHIGHLOW m7, m0, m1
170 170
     andps   m7, m7, [ps_mask2]
171 171
 
172 172
     addps   m0, m0, m5
173 173
 
174
-    BUILDINVHIGHLOW m1, m2, m6
174
+    BUILDINVHIGHLOW m6, m1, m2
175 175
     andps   m6, m6, [ps_mask2]
176 176
 
177 177
     addps  m1, m1, m7
178 178
 
179
-    BUILDINVHIGHLOW m2, m3, m7
179
+    BUILDINVHIGHLOW m7, m2, m3
180 180
     andps   m7, m7, [ps_mask2]
181 181
 
182 182
     addps   m2, m2, m6
... ...
@@ -245,7 +271,7 @@ cglobal imdct36_float_%1, 4,4,9, out, buf, in, win
245 245
     subps  m0, m0, m1
246 246
     addps  m0, m0, m6
247 247
 
248
-    BUILDINVHIGHLOW m2, m3, m4
248
+    BUILDINVHIGHLOW m4, m2, m3
249 249
     shufps  m3, m3, m2, 0x4e
250 250
 
251 251
     ; we have tmp = {SwAPLH(m0), SwAPLH(m7), m3, m4, m5}
... ...
@@ -280,7 +306,9 @@ cglobal imdct36_float_%1, 4,4,9, out, buf, in, win
280 280
     ; permutation done
281 281
 
282 282
     PSHUFD  m6, m2, 0xb1
283
-    movlps  m7, [bufq + 64]
283
+    movss   m4, [bufq + 4*68]
284
+    movss   m7, [bufq + 4*64]
285
+    unpcklps  m7, m7, m4
284 286
     mulps   m6, m6, [winq + 16*4]
285 287
     addps   m6, m6, m7
286 288
     movss   [outq + 64*SBLIMIT], m6
... ...
@@ -288,74 +316,406 @@ cglobal imdct36_float_%1, 4,4,9, out, buf, in, win
288 288
     movss   [outq + 68*SBLIMIT], m6
289 289
 
290 290
     mulps   m6, m3, [winq + 4*4]
291
-    LOADA64 m4, bufq + 16
291
+    LOAD    m4, m7, bufq + 4*16, 16
292 292
     addps   m6, m6, m4
293
-    STORE   m6, m7, outq + 16*SBLIMIT
293
+    STORE   m6, m7, outq + 16*SBLIMIT, 4*SBLIMIT
294 294
 
295 295
     shufps  m4, m0, m3, 0xb5
296 296
     mulps   m4, m4, [winq + 8*4]
297
-    LOADA64 m7, bufq + 32
297
+    LOAD    m7, m6, bufq + 4*32, 16
298 298
     addps   m4, m4, m7
299
-    STORE   m4, m6, outq + 32*SBLIMIT
299
+    STORE   m4, m6, outq + 32*SBLIMIT, 4*SBLIMIT
300 300
 
301 301
     shufps  m3, m3, m2, 0xb1
302 302
     mulps   m3, m3, [winq + 12*4]
303
-    LOADA64 m7, bufq + 48
303
+    LOAD    m7, m6, bufq + 4*48, 16
304 304
     addps   m3, m3, m7
305
-    STORE   m3, m7, outq + 48*SBLIMIT
305
+    STORE   m3, m7, outq + 48*SBLIMIT, 4*SBLIMIT
306 306
 
307 307
     mulps   m2, m2, [winq]
308
-    LOADA64 m6, bufq
308
+    LOAD    m6, m7, bufq, 16
309 309
     addps   m2, m2, m6
310
-    STORE   m2, m7, outq
310
+    STORE   m2, m7, outq, 4*SBLIMIT
311 311
 
312 312
     mulps    m4, m1, [winq + 20*4]
313
-    STOREA64 bufq, m4
313
+    STORE    m4, m7, bufq, 16
314 314
 
315 315
     mulps    m3, m5, [winq + 24*4]
316
-    STOREA64 bufq + 16, m3
316
+    STORE    m3, m7, bufq + 4*16, 16
317 317
 
318 318
     shufps   m0, m0, m5, 0xb0
319 319
     mulps    m0, m0, [winq + 28*4]
320
-    STOREA64 bufq + 32, m0
320
+    STORE    m0, m7, bufq + 4*32, 16
321 321
 
322 322
     shufps   m5, m5, m1, 0xb1
323 323
     mulps    m5, m5, [winq + 32*4]
324
-    STOREA64 bufq + 48, m5
324
+    STORE    m5, m7, bufq + 4*48, 16
325 325
 
326 326
     shufps   m1, m1, m1, 0xb1
327 327
     mulps    m1, m1, [winq + 36*4]
328
-    movlps  [bufq + 64], m1
328
+    movss    [bufq + 4*64], m1
329
+    shufps   m1, m1, 0xb1
330
+    movss    [bufq + 4*68], m1
329 331
     RET
330 332
 %endmacro
331 333
 
332
-%define PSHUFD PSHUFD_SSE_AVX
333
-%define INVERTHL INVERTHL_SSE1
334
-%define BUTTERF  BUTTERF_SSE12
335
-%define BUTTERF0 BUTTERF0_SSE12
336
-%define BUILDINVHIGHLOW BUILDINVHIGHLOW_SSE
337
-%define ROTLEFT ROTLEFT_SSE
334
+INIT_XMM sse
335
+DEFINE_IMDCT
338 336
 
339
-INIT_XMM
337
+INIT_XMM sse2
338
+DEFINE_IMDCT
340 339
 
341
-DEFINE_IMDCT sse
340
+INIT_XMM sse3
341
+DEFINE_IMDCT
342 342
 
343
-%define PSHUFD PSHUFD_SSE2
344
-%define INVERTHL INVERTHL_SSE2
343
+INIT_XMM ssse3
344
+DEFINE_IMDCT
345 345
 
346
-DEFINE_IMDCT sse2
346
+INIT_XMM avx
347
+DEFINE_IMDCT
347 348
 
348
-%define BUTTERF  BUTTERF_SSE3
349
-%define BUTTERF0 BUTTERF0_SSE3
349
+INIT_XMM sse
350 350
 
351
-DEFINE_IMDCT sse3
352
-
353
-%define ROTLEFT ROTLEFT_SSSE3
351
+%ifdef ARCH_X86_64
352
+%define SPILL SWAP
353
+%define UNSPILL SWAP
354
+%define SPILLED(x) m %+ x
355
+%else
356
+%define SPILLED(x) [tmpq+(x-8)*16 + 32*4]
357
+%macro SPILL 2 ; xmm#, mempos
358
+    movaps SPILLED(%2), m%1
359
+%endmacro
360
+%macro UNSPILL 2
361
+    movaps m%1, SPILLED(%2)
362
+%endmacro
363
+%endif
354 364
 
355
-DEFINE_IMDCT ssse3
365
+%macro DEFINE_FOUR_IMDCT 0
366
+cglobal four_imdct36_float, 5,5,8, out, buf, in, win, tmp
367
+    movlps  m0, [inq+64]
368
+    movhps  m0, [inq+64 +   72]
369
+    movlps  m3, [inq+64 + 2*72]
370
+    movhps  m3, [inq+64 + 3*72]
371
+
372
+    shufps  m5, m0, m3, 0xdd
373
+    shufps  m0, m0, m3, 0x88
374
+
375
+    mova     m1, [inq+48]
376
+    movu     m6, [inq+48 +   72]
377
+    mova     m7, [inq+48 + 2*72]
378
+    movu     m3, [inq+48 + 3*72]
379
+
380
+    TRANSPOSE4x4PS 1, 6, 7, 3, 4
381
+
382
+    addps   m4, m6, m7
383
+    mova    [tmpq+4*28], m4
384
+
385
+    addps    m7, m3
386
+    addps    m6, m1
387
+    addps    m3, m0
388
+    addps    m0, m5
389
+    addps    m0, m7
390
+    addps    m7, m6
391
+    mova    [tmpq+4*12], m7
392
+    SPILL   3, 12
393
+
394
+    mova     m4, [inq+32]
395
+    movu     m5, [inq+32 +   72]
396
+    mova     m2, [inq+32 + 2*72]
397
+    movu     m7, [inq+32 + 3*72]
398
+
399
+    TRANSPOSE4x4PS 4, 5, 2, 7, 3
400
+
401
+    addps   m1, m7
402
+    SPILL   1, 11
403
+
404
+    addps   m3, m5, m2
405
+    SPILL   3, 13
406
+
407
+    addps    m7, m2
408
+    addps    m5, m4
409
+    addps    m6, m7
410
+    mova    [tmpq], m6
411
+    addps   m7, m5
412
+    mova    [tmpq+4*16], m7
413
+
414
+    mova    m2, [inq+16]
415
+    movu    m7, [inq+16 +   72]
416
+    mova    m1, [inq+16 + 2*72]
417
+    movu    m6, [inq+16 + 3*72]
418
+
419
+    TRANSPOSE4x4PS 2, 7, 1, 6, 3
420
+
421
+    addps   m4, m6
422
+    addps   m6, m1
423
+    addps   m1, m7
424
+    addps   m7, m2
425
+    addps   m5, m6
426
+    SPILL   5, 15
427
+    addps   m6, m7
428
+    mulps   m6, [costabs + 16*2]
429
+    mova    [tmpq+4*8], m6
430
+    SPILL   1, 10
431
+    SPILL   0, 14
432
+
433
+    mova    m1, [inq]
434
+    movu    m6, [inq +   72]
435
+    mova    m3, [inq + 2*72]
436
+    movu    m5, [inq + 3*72]
437
+
438
+    TRANSPOSE4x4PS 1, 6, 3, 5, 0
439
+
440
+    addps    m2, m5
441
+    addps    m5, m3
442
+    addps    m7, m5
443
+    addps    m3, m6
444
+    addps    m6, m1
445
+    SPILL    7, 8
446
+    addps    m5, m6
447
+    SPILL    6, 9
448
+    addps    m6, m4, SPILLED(12)
449
+    subps    m6, m2
450
+    UNSPILL  7, 11
451
+    SPILL    5, 11
452
+    subps    m5, m1, m7
453
+    mulps    m7, [costabs + 16*5]
454
+    addps    m7, m1
455
+    mulps    m0, m6, [costabs + 16*6]
456
+    addps    m0, m5
457
+    mova     [tmpq+4*24], m0
458
+    addps    m6, m5
459
+    mova     [tmpq+4*4], m6
460
+    addps    m6, m4, m2
461
+    mulps    m6, [costabs + 16*1]
462
+    subps    m4, SPILLED(12)
463
+    mulps    m4, [costabs + 16*8]
464
+    addps    m2, SPILLED(12)
465
+    mulps    m2, [costabs + 16*3]
466
+    subps    m5, m7, m6
467
+    subps    m5, m2
468
+    addps    m6, m7
469
+    addps    m6, m4
470
+    addps    m7, m2
471
+    subps    m7, m4
472
+    mova     [tmpq+4*20], m7
473
+    mova     m2, [tmpq+4*28]
474
+    mova     [tmpq+4*28], m5
475
+    UNSPILL  7, 13
476
+    subps    m5, m7, m2
477
+    mulps    m5, [costabs + 16*7]
478
+    UNSPILL  1, 10
479
+    mulps    m1, [costabs + 16*2]
480
+    addps    m4, m3, m2
481
+    mulps    m4, [costabs + 16*4]
482
+    addps    m2, m7
483
+    addps    m7, m3
484
+    mulps    m7, [costabs]
485
+    subps    m3, m2
486
+    mulps    m3, [costabs + 16*2]
487
+    addps    m2, m7, m5
488
+    addps    m2, m1
489
+    SPILL    2, 10
490
+    addps    m7, m4
491
+    subps    m7, m1
492
+    SPILL    7, 12
493
+    subps    m5, m4
494
+    subps    m5, m1
495
+    UNSPILL  0, 14
496
+    SPILL    5, 13
497
+    addps    m1, m0, SPILLED(15)
498
+    subps    m1, SPILLED(8)
499
+    mova     m4, [costabs + 16*5]
500
+    mulps    m4, [tmpq]
501
+    UNSPILL  2, 9
502
+    addps    m4, m2
503
+    subps    m2, [tmpq]
504
+    mulps    m5, m1, [costabs + 16*6]
505
+    addps    m5, m2
506
+    SPILL    5, 9
507
+    addps    m2, m1
508
+    SPILL    2, 14
509
+    UNSPILL  5, 15
510
+    subps    m7, m5, m0
511
+    addps    m5, SPILLED(8)
512
+    mulps    m5, [costabs + 16*1]
513
+    mulps    m7, [costabs + 16*8]
514
+    addps    m0, SPILLED(8)
515
+    mulps    m0, [costabs + 16*3]
516
+    subps    m2, m4, m5
517
+    subps    m2, m0
518
+    SPILL    2, 15
519
+    addps    m5, m4
520
+    addps    m5, m7
521
+    addps    m4, m0
522
+    subps    m4, m7
523
+    SPILL    4, 8
524
+    mova     m7, [tmpq+4*16]
525
+    mova     m2, [tmpq+4*12]
526
+    addps    m0, m7, m2
527
+    subps    m0, SPILLED(11)
528
+    mulps    m0, [costabs + 16*2]
529
+    addps    m4, m7, SPILLED(11)
530
+    mulps    m4, [costabs]
531
+    subps    m7, m2
532
+    mulps    m7, [costabs + 16*7]
533
+    addps    m2, SPILLED(11)
534
+    mulps    m2, [costabs + 16*4]
535
+    addps    m1, m7, [tmpq+4*8]
536
+    addps    m1, m4
537
+    addps    m4, m2
538
+    subps    m4, [tmpq+4*8]
539
+    SPILL    4, 11
540
+    subps    m7, m2
541
+    subps    m7, [tmpq+4*8]
542
+    addps    m4, m6, SPILLED(10)
543
+    subps    m6, SPILLED(10)
544
+    addps    m2, m5, m1
545
+    mulps    m2, [costabs + 16*9]
546
+    subps    m5, m1
547
+    mulps    m5, [costabs + 16*17]
548
+    subps    m1, m4, m2
549
+    addps    m4, m2
550
+    mulps    m2, m1, [winq+4*36]
551
+    addps    m2, [bufq+4*36]
552
+    mova     [outq+1152], m2
553
+    mulps    m1, [winq+4*32]
554
+    addps    m1, [bufq+4*32]
555
+    mova     [outq+1024], m1
556
+    mulps    m1, m4, [winq+4*116]
557
+    mova     [bufq+4*36], m1
558
+    mulps    m4, [winq+4*112]
559
+    mova     [bufq+4*32], m4
560
+    addps    m2, m6, m5
561
+    subps    m6, m5
562
+    mulps    m1, m6, [winq+4*68]
563
+    addps    m1, [bufq+4*68]
564
+    mova     [outq+2176], m1
565
+    mulps    m6, [winq]
566
+    addps    m6, [bufq]
567
+    mova     [outq], m6
568
+    mulps    m1, m2, [winq+4*148]
569
+    mova     [bufq+4*68], m1
570
+    mulps    m2, [winq+4*80]
571
+    mova     [bufq], m2
572
+    addps    m5, m3, [tmpq+4*24]
573
+    mova     m2, [tmpq+4*24]
574
+    subps    m2, m3
575
+    mova     m1, SPILLED(9)
576
+    subps    m1, m0
577
+    mulps    m1, [costabs + 16*10]
578
+    addps    m0, SPILLED(9)
579
+    mulps    m0, [costabs + 16*16]
580
+    addps    m6, m5, m1
581
+    subps    m5, m1
582
+    mulps    m3, m5, [winq+4*40]
583
+    addps    m3, [bufq+4*40]
584
+    mova     [outq+1280], m3
585
+    mulps    m5, [winq+4*28]
586
+    addps    m5, [bufq+4*28]
587
+    mova     [outq+896], m5
588
+    mulps    m1, m6, [winq+4*120]
589
+    mova     [bufq+4*40], m1
590
+    mulps    m6, [winq+4*108]
591
+    mova     [bufq+4*28], m6
592
+    addps    m1, m2, m0
593
+    subps    m2, m0
594
+    mulps    m5, m2, [winq+4*64]
595
+    addps    m5, [bufq+4*64]
596
+    mova     [outq+2048], m5
597
+    mulps    m2, [winq+4*4]
598
+    addps    m2, [bufq+4*4]
599
+    mova     [outq+128], m2
600
+    mulps    m0, m1, [winq+4*144]
601
+    mova     [bufq+4*64], m0
602
+    mulps    m1, [winq+4*84]
603
+    mova     [bufq+4*4], m1
604
+    mova     m1, [tmpq+4*28]
605
+    mova     m5, m1
606
+    addps    m1, SPILLED(13)
607
+    subps    m5, SPILLED(13)
608
+    UNSPILL  3, 15
609
+    addps    m2, m7, m3
610
+    mulps    m2, [costabs + 16*11]
611
+    subps    m3, m7
612
+    mulps    m3, [costabs + 16*15]
613
+    addps    m0, m2, m1
614
+    subps    m1, m2
615
+    SWAP     m0, m2
616
+    mulps    m6, m1, [winq+4*44]
617
+    addps    m6, [bufq+4*44]
618
+    mova     [outq+1408], m6
619
+    mulps    m1, [winq+4*24]
620
+    addps    m1, [bufq+4*24]
621
+    mova     [outq+768], m1
622
+    mulps    m0, m2, [winq+4*124]
623
+    mova     [bufq+4*44], m0
624
+    mulps    m2, [winq+4*104]
625
+    mova     [bufq+4*24], m2
626
+    addps    m0, m5, m3
627
+    subps    m5, m3
628
+    mulps    m1, m5, [winq+4*60]
629
+    addps    m1, [bufq+4*60]
630
+    mova     [outq+1920], m1
631
+    mulps    m5, [winq+4*8]
632
+    addps    m5, [bufq+4*8]
633
+    mova     [outq+256], m5
634
+    mulps    m1, m0, [winq+4*140]
635
+    mova     [bufq+4*60], m1
636
+    mulps    m0, [winq+4*88]
637
+    mova     [bufq+4*8], m0
638
+    mova     m1, [tmpq+4*20]
639
+    addps    m1, SPILLED(12)
640
+    mova     m2, [tmpq+4*20]
641
+    subps    m2, SPILLED(12)
642
+    UNSPILL  7, 8
643
+    subps    m0, m7, SPILLED(11)
644
+    addps    m7, SPILLED(11)
645
+    mulps    m4, m7, [costabs + 16*12]
646
+    mulps    m0, [costabs + 16*14]
647
+    addps    m5, m1, m4
648
+    subps    m1, m4
649
+    mulps    m7, m1, [winq+4*48]
650
+    addps    m7, [bufq+4*48]
651
+    mova     [outq+1536], m7
652
+    mulps    m1, [winq+4*20]
653
+    addps    m1, [bufq+4*20]
654
+    mova     [outq+640], m1
655
+    mulps    m1, m5, [winq+4*128]
656
+    mova     [bufq+4*48], m1
657
+    mulps    m5, [winq+4*100]
658
+    mova     [bufq+4*20], m5
659
+    addps    m6, m2, m0
660
+    subps    m2, m0
661
+    mulps    m1, m2, [winq+4*56]
662
+    addps    m1, [bufq+4*56]
663
+    mova     [outq+1792], m1
664
+    mulps    m2, [winq+4*12]
665
+    addps    m2, [bufq+4*12]
666
+    mova     [outq+384], m2
667
+    mulps    m0, m6, [winq+4*136]
668
+    mova    [bufq+4*56], m0
669
+    mulps    m6, [winq+4*92]
670
+    mova     [bufq+4*12], m6
671
+    UNSPILL  0, 14
672
+    mulps    m0, [costabs + 16*13]
673
+    mova     m3, [tmpq+4*4]
674
+    addps    m2, m0, m3
675
+    subps    m3, m0
676
+    mulps    m0, m3, [winq+4*52]
677
+    addps    m0, [bufq+4*52]
678
+    mova     [outq+1664], m0
679
+    mulps    m3, [winq+4*16]
680
+    addps    m3, [bufq+4*16]
681
+    mova     [outq+512], m3
682
+    mulps    m0, m2, [winq+4*132]
683
+    mova     [bufq+4*52], m0
684
+    mulps    m2, [winq+4*96]
685
+    mova     [bufq+4*16], m2
686
+    RET
687
+%endmacro
356 688
 
357
-%define BUILDINVHIGHLOW BUILDINVHIGHLOW_AVX
358
-%define PSHUFD PSHUFD_SSE_AVX
689
+INIT_XMM sse
690
+DEFINE_FOUR_IMDCT
359 691
 
360
-INIT_AVX
361
-DEFINE_IMDCT avx
692
+INIT_XMM avx
693
+DEFINE_FOUR_IMDCT
... ...
@@ -29,6 +29,12 @@ void ff_imdct36_float_sse2(float *out, float *buf, float *in, float *win);
29 29
 void ff_imdct36_float_sse3(float *out, float *buf, float *in, float *win);
30 30
 void ff_imdct36_float_ssse3(float *out, float *buf, float *in, float *win);
31 31
 void ff_imdct36_float_avx(float *out, float *buf, float *in, float *win);
32
+void ff_four_imdct36_float_sse(float *out, float *buf, float *in, float *win,
33
+                               float *tmpbuf);
34
+void ff_four_imdct36_float_avx(float *out, float *buf, float *in, float *win,
35
+                               float *tmpbuf);
36
+
37
+DECLARE_ALIGNED(16, static float, mdct_win_sse)[2][4][4*40];
32 38
 
33 39
 #define MACS(rt, ra, rb) rt+=(ra)*(rb)
34 40
 #define MLSS(rt, ra, rb) rt-=(ra)*(rb)
... ...
@@ -153,26 +159,79 @@ static void apply_window_mp3(float *in, float *win, int *unused, float *out,
153 153
     *out = sum;
154 154
 }
155 155
 
156
+
157
+#define DECL_IMDCT_BLOCKS(CPU1, CPU2)                                       \
158
+static void imdct36_blocks_ ## CPU1(float *out, float *buf, float *in,      \
159
+                               int count, int switch_point, int block_type) \
160
+{                                                                           \
161
+    int align_end = count - (count & 3);                                \
162
+    int j;                                                              \
163
+    for (j = 0; j < align_end; j+= 4) {                                 \
164
+        LOCAL_ALIGNED_16(float, tmpbuf, [1024]);                        \
165
+        float *win = mdct_win_sse[switch_point && j < 4][block_type];   \
166
+        /* apply window & overlap with previous buffer */               \
167
+                                                                        \
168
+        /* select window */                                             \
169
+        ff_four_imdct36_float_ ## CPU2(out, buf, in, win, tmpbuf);      \
170
+        in      += 4*18;                                                \
171
+        buf     += 4*18;                                                \
172
+        out     += 4;                                                   \
173
+    }                                                                   \
174
+    for (; j < count; j++) {                                            \
175
+        /* apply window & overlap with previous buffer */               \
176
+                                                                        \
177
+        /* select window */                                             \
178
+        int win_idx = (switch_point && j < 2) ? 0 : block_type;         \
179
+        float *win = ff_mdct_win_float[win_idx + (4 & -(j & 1))];       \
180
+                                                                        \
181
+        ff_imdct36_float_ ## CPU1(out, buf, in, win);                   \
182
+                                                                        \
183
+        in  += 18;                                                      \
184
+        buf++;                                                          \
185
+        out++;                                                          \
186
+    }                                                                   \
187
+}
188
+
189
+DECL_IMDCT_BLOCKS(sse,sse)
190
+DECL_IMDCT_BLOCKS(sse2,sse)
191
+DECL_IMDCT_BLOCKS(sse3,sse)
192
+DECL_IMDCT_BLOCKS(ssse3,sse)
193
+DECL_IMDCT_BLOCKS(avx,avx)
194
+
156 195
 void ff_mpadsp_init_mmx(MPADSPContext *s)
157 196
 {
158 197
     int mm_flags = av_get_cpu_flags();
159 198
 
199
+    int i, j;
200
+    for (j = 0; j < 4; j++) {
201
+        for (i = 0; i < 40; i ++) {
202
+            mdct_win_sse[0][j][4*i    ] = ff_mdct_win_float[j    ][i];
203
+            mdct_win_sse[0][j][4*i + 1] = ff_mdct_win_float[j + 4][i];
204
+            mdct_win_sse[0][j][4*i + 2] = ff_mdct_win_float[j    ][i];
205
+            mdct_win_sse[0][j][4*i + 3] = ff_mdct_win_float[j + 4][i];
206
+            mdct_win_sse[1][j][4*i    ] = ff_mdct_win_float[0    ][i];
207
+            mdct_win_sse[1][j][4*i + 1] = ff_mdct_win_float[4    ][i];
208
+            mdct_win_sse[1][j][4*i + 2] = ff_mdct_win_float[j    ][i];
209
+            mdct_win_sse[1][j][4*i + 3] = ff_mdct_win_float[j + 4][i];
210
+        }
211
+    }
212
+
160 213
     if (mm_flags & AV_CPU_FLAG_SSE2) {
161 214
         s->apply_window_float = apply_window_mp3;
162 215
     }
163
-    if (HAVE_YASM && mm_flags & AV_CPU_FLAG_AVX && HAVE_AVX) {
164
-        s->imdct36_float = ff_imdct36_float_avx;
165
-    }
166
-    else if (HAVE_YASM && mm_flags & AV_CPU_FLAG_SSSE3 && HAVE_SSE) {
167
-        s->imdct36_float = ff_imdct36_float_ssse3;
168
-    }
169
-    else if (HAVE_YASM && mm_flags & AV_CPU_FLAG_SSE3 && HAVE_SSE) {
170
-        s->imdct36_float = ff_imdct36_float_sse3;
171
-    }
172
-    else if (HAVE_YASM && mm_flags & AV_CPU_FLAG_SSE2 && HAVE_SSE) {
173
-        s->imdct36_float = ff_imdct36_float_sse2;
174
-    }
175
-    else if (HAVE_YASM && mm_flags & AV_CPU_FLAG_SSE && HAVE_SSE) {
176
-        s->imdct36_float = ff_imdct36_float_sse;
216
+#if HAVE_YASM
217
+    if (mm_flags & AV_CPU_FLAG_AVX && HAVE_AVX) {
218
+        s->imdct36_blocks_float = imdct36_blocks_avx;
219
+#if HAVE_SSE
220
+    } else if (mm_flags & AV_CPU_FLAG_SSSE3) {
221
+        s->imdct36_blocks_float = imdct36_blocks_ssse3;
222
+    } else if (mm_flags & AV_CPU_FLAG_SSE3) {
223
+        s->imdct36_blocks_float = imdct36_blocks_sse3;
224
+    } else if (mm_flags & AV_CPU_FLAG_SSE2) {
225
+        s->imdct36_blocks_float = imdct36_blocks_sse2;
226
+    } else if (mm_flags & AV_CPU_FLAG_SSE) {
227
+        s->imdct36_blocks_float = imdct36_blocks_sse;
228
+#endif /* HAVE_SSE */
177 229
     }
230
+#endif /* HAVE_YASM */
178 231
 }
... ...
@@ -931,6 +931,8 @@ AVX_INSTR minpd, 1, 0, 1
931 931
 AVX_INSTR minps, 1, 0, 1
932 932
 AVX_INSTR minsd, 1, 0, 1
933 933
 AVX_INSTR minss, 1, 0, 1
934
+AVX_INSTR movhlps, 1, 0, 0
935
+AVX_INSTR movlhps, 1, 0, 0
934 936
 AVX_INSTR movsd, 1, 0, 0
935 937
 AVX_INSTR movss, 1, 0, 0
936 938
 AVX_INSTR mpsadbw, 0, 1, 0
... ...
@@ -19,7 +19,8 @@ OBJS-$(HAVE_MMX)           +=  x86/rgb2rgb.o            \
19 19
                                x86/swscale_mmx.o        \
20 20
                                x86/yuv2rgb_mmx.o
21 21
 OBJS-$(HAVE_VIS)           +=  sparc/yuv2rgb_vis.o
22
-MMX-OBJS-$(HAVE_YASM)      +=  x86/output.o             \
22
+MMX-OBJS-$(HAVE_YASM)      +=  x86/input.o              \
23
+                               x86/output.o             \
23 24
                                x86/scale.o
24 25
 
25 26
 $(SUBDIR)x86/swscale_mmx.o: CFLAGS += $(NOREDZONE_FLAGS)
... ...
@@ -27,19 +27,19 @@
27 27
 #include "swscale.h"
28 28
 #include "rgb2rgb.h"
29 29
 
30
-#define SIZE 1000
30
+#define SIZE    1000
31 31
 #define srcByte 0x55
32 32
 #define dstByte 0xBB
33 33
 
34
-#define FUNC(s,d,n) {s,d,#n,n}
34
+#define FUNC(s, d, n) { s, d, #n, n }
35 35
 
36 36
 int main(int argc, char **argv)
37 37
 {
38 38
     int i, funcNum;
39 39
     uint8_t *srcBuffer = av_malloc(SIZE);
40 40
     uint8_t *dstBuffer = av_malloc(SIZE);
41
-    int failedNum=0;
42
-    int passedNum=0;
41
+    int failedNum      = 0;
42
+    int passedNum      = 0;
43 43
 
44 44
     if (!srcBuffer || !dstBuffer)
45 45
         return -1;
... ...
@@ -47,7 +47,7 @@ int main(int argc, char **argv)
47 47
     av_log(NULL, AV_LOG_INFO, "memory corruption test ...\n");
48 48
     sws_rgb2rgb_init();
49 49
 
50
-    for(funcNum=0; ; funcNum++) {
50
+    for (funcNum = 0; ; funcNum++) {
51 51
         struct func_info_s {
52 52
             int src_bpp;
53 53
             int dst_bpp;
... ...
@@ -85,67 +85,78 @@ int main(int argc, char **argv)
85 85
             FUNC(0, 0, NULL)
86 86
         };
87 87
         int width;
88
-        int failed=0;
89
-        int srcBpp=0;
90
-        int dstBpp=0;
88
+        int failed = 0;
89
+        int srcBpp = 0;
90
+        int dstBpp = 0;
91 91
 
92
-        if (!func_info[funcNum].func) break;
92
+        if (!func_info[funcNum].func)
93
+            break;
93 94
 
94
-        av_log(NULL, AV_LOG_INFO,".");
95
+        av_log(NULL, AV_LOG_INFO, ".");
95 96
         memset(srcBuffer, srcByte, SIZE);
96 97
 
97
-        for(width=63; width>0; width--) {
98
+        for (width = 63; width > 0; width--) {
98 99
             int dstOffset;
99
-            for(dstOffset=128; dstOffset<196; dstOffset+=4) {
100
+            for (dstOffset = 128; dstOffset < 196; dstOffset += 4) {
100 101
                 int srcOffset;
101 102
                 memset(dstBuffer, dstByte, SIZE);
102 103
 
103
-                for(srcOffset=128; srcOffset<196; srcOffset+=4) {
104
-                    uint8_t *src= srcBuffer+srcOffset;
105
-                    uint8_t *dst= dstBuffer+dstOffset;
106
-                    const char *name=NULL;
104
+                for (srcOffset = 128; srcOffset < 196; srcOffset += 4) {
105
+                    uint8_t *src     = srcBuffer + srcOffset;
106
+                    uint8_t *dst     = dstBuffer + dstOffset;
107
+                    const char *name = NULL;
107 108
 
108
-                    if(failed) break; //don't fill the screen with shit ...
109
+                    // don't fill the screen with shit ...
110
+                    if (failed)
111
+                        break;
109 112
 
110 113
                     srcBpp = func_info[funcNum].src_bpp;
111 114
                     dstBpp = func_info[funcNum].dst_bpp;
112 115
                     name   = func_info[funcNum].name;
113 116
 
114
-                    func_info[funcNum].func(src, dst, width*srcBpp);
117
+                    func_info[funcNum].func(src, dst, width * srcBpp);
115 118
 
116
-                    if(!srcBpp) break;
119
+                    if (!srcBpp)
120
+                        break;
117 121
 
118
-                    for(i=0; i<SIZE; i++) {
119
-                        if(srcBuffer[i]!=srcByte) {
120
-                            av_log(NULL, AV_LOG_INFO, "src damaged at %d w:%d src:%d dst:%d %s\n",
122
+                    for (i = 0; i < SIZE; i++) {
123
+                        if (srcBuffer[i] != srcByte) {
124
+                            av_log(NULL, AV_LOG_INFO,
125
+                                   "src damaged at %d w:%d src:%d dst:%d %s\n",
121 126
                                    i, width, srcOffset, dstOffset, name);
122
-                            failed=1;
127
+                            failed = 1;
123 128
                             break;
124 129
                         }
125 130
                     }
126
-                    for(i=0; i<dstOffset; i++) {
127
-                        if(dstBuffer[i]!=dstByte) {
128
-                            av_log(NULL, AV_LOG_INFO, "dst damaged at %d w:%d src:%d dst:%d %s\n",
131
+                    for (i = 0; i < dstOffset; i++) {
132
+                        if (dstBuffer[i] != dstByte) {
133
+                            av_log(NULL, AV_LOG_INFO,
134
+                                   "dst damaged at %d w:%d src:%d dst:%d %s\n",
129 135
                                    i, width, srcOffset, dstOffset, name);
130
-                            failed=1;
136
+                            failed = 1;
131 137
                             break;
132 138
                         }
133 139
                     }
134
-                    for(i=dstOffset + width*dstBpp; i<SIZE; i++) {
135
-                        if(dstBuffer[i]!=dstByte) {
136
-                            av_log(NULL, AV_LOG_INFO, "dst damaged at %d w:%d src:%d dst:%d %s\n",
140
+                    for (i = dstOffset + width * dstBpp; i < SIZE; i++) {
141
+                        if (dstBuffer[i] != dstByte) {
142
+                            av_log(NULL, AV_LOG_INFO,
143
+                                   "dst damaged at %d w:%d src:%d dst:%d %s\n",
137 144
                                    i, width, srcOffset, dstOffset, name);
138
-                            failed=1;
145
+                            failed = 1;
139 146
                             break;
140 147
                         }
141 148
                     }
142 149
                 }
143 150
             }
144 151
         }
145
-        if(failed) failedNum++;
146
-        else if(srcBpp) passedNum++;
152
+        if (failed)
153
+            failedNum++;
154
+        else if (srcBpp)
155
+            passedNum++;
147 156
     }
148 157
 
149
-    av_log(NULL, AV_LOG_INFO, "\n%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum);
158
+    av_log(NULL, AV_LOG_INFO,
159
+           "\n%d converters passed, %d converters randomly overwrote memory\n",
160
+           passedNum, failedNum);
150 161
     return failedNum;
151 162
 }
... ...
@@ -24,13 +24,18 @@
24 24
 #ifndef SWSCALE_PPC_YUV2RGB_ALTIVEC_H
25 25
 #define SWSCALE_PPC_YUV2RGB_ALTIVEC_H
26 26
 
27
-#define YUV2PACKEDX_HEADER(suffix) \
28
-void ff_yuv2 ## suffix ## _X_altivec(SwsContext *c, const int16_t *lumFilter, \
29
-                            const int16_t **lumSrc, int lumFilterSize, \
30
-                            const int16_t *chrFilter, const int16_t **chrUSrc, \
31
-                            const int16_t **chrVSrc, int chrFilterSize, \
32
-                            const int16_t **alpSrc, uint8_t *dest, \
33
-                            int dstW, int dstY);
27
+#define YUV2PACKEDX_HEADER(suffix)                                  \
28
+    void ff_yuv2 ## suffix ## _X_altivec(SwsContext *c,             \
29
+                                         const int16_t *lumFilter,  \
30
+                                         const int16_t **lumSrc,    \
31
+                                         int lumFilterSize,         \
32
+                                         const int16_t *chrFilter,  \
33
+                                         const int16_t **chrUSrc,   \
34
+                                         const int16_t **chrVSrc,   \
35
+                                         int chrFilterSize,         \
36
+                                         const int16_t **alpSrc,    \
37
+                                         uint8_t *dest,             \
38
+                                         int dstW, int dstY);
34 39
 
35 40
 YUV2PACKEDX_HEADER(abgr);
36 41
 YUV2PACKEDX_HEADER(bgra);
... ...
@@ -36,32 +36,33 @@ extern void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, int src_size);
36 36
 extern void (*rgb24tobgr16)(const uint8_t *src, uint8_t *dst, int src_size);
37 37
 extern void (*rgb24tobgr15)(const uint8_t *src, uint8_t *dst, int src_size);
38 38
 extern void (*rgb32tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
39
-extern void (*rgb32to16)   (const uint8_t *src, uint8_t *dst, int src_size);
40
-extern void (*rgb32to15)   (const uint8_t *src, uint8_t *dst, int src_size);
41
-extern void (*rgb15to16)   (const uint8_t *src, uint8_t *dst, int src_size);
39
+extern void    (*rgb32to16)(const uint8_t *src, uint8_t *dst, int src_size);
40
+extern void    (*rgb32to15)(const uint8_t *src, uint8_t *dst, int src_size);
41
+extern void    (*rgb15to16)(const uint8_t *src, uint8_t *dst, int src_size);
42 42
 extern void (*rgb15tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
43
-extern void (*rgb15to32)   (const uint8_t *src, uint8_t *dst, int src_size);
44
-extern void (*rgb16to15)   (const uint8_t *src, uint8_t *dst, int src_size);
43
+extern void    (*rgb15to32)(const uint8_t *src, uint8_t *dst, int src_size);
44
+extern void    (*rgb16to15)(const uint8_t *src, uint8_t *dst, int src_size);
45 45
 extern void (*rgb16tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
46
-extern void (*rgb16to32)   (const uint8_t *src, uint8_t *dst, int src_size);
46
+extern void    (*rgb16to32)(const uint8_t *src, uint8_t *dst, int src_size);
47 47
 extern void (*rgb24tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
48
-extern void (*rgb24to16)   (const uint8_t *src, uint8_t *dst, int src_size);
49
-extern void (*rgb24to15)   (const uint8_t *src, uint8_t *dst, int src_size);
50
-extern void (*shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size);
48
+extern void    (*rgb24to16)(const uint8_t *src, uint8_t *dst, int src_size);
49
+extern void    (*rgb24to15)(const uint8_t *src, uint8_t *dst, int src_size);
51 50
 extern void (*rgb32tobgr16)(const uint8_t *src, uint8_t *dst, int src_size);
52 51
 extern void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, int src_size);
53 52
 
54
-void rgb24to32   (const uint8_t *src, uint8_t *dst, int src_size);
55
-void rgb32to24   (const uint8_t *src, uint8_t *dst, int src_size);
53
+extern void (*shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size);
54
+
55
+void    rgb24to32(const uint8_t *src, uint8_t *dst, int src_size);
56
+void    rgb32to24(const uint8_t *src, uint8_t *dst, int src_size);
56 57
 void rgb16tobgr32(const uint8_t *src, uint8_t *dst, int src_size);
57
-void rgb16to24   (const uint8_t *src, uint8_t *dst, int src_size);
58
+void    rgb16to24(const uint8_t *src, uint8_t *dst, int src_size);
58 59
 void rgb16tobgr16(const uint8_t *src, uint8_t *dst, int src_size);
59 60
 void rgb16tobgr15(const uint8_t *src, uint8_t *dst, int src_size);
60 61
 void rgb15tobgr32(const uint8_t *src, uint8_t *dst, int src_size);
61
-void rgb15to24   (const uint8_t *src, uint8_t *dst, int src_size);
62
+void    rgb15to24(const uint8_t *src, uint8_t *dst, int src_size);
62 63
 void rgb15tobgr16(const uint8_t *src, uint8_t *dst, int src_size);
63 64
 void rgb15tobgr15(const uint8_t *src, uint8_t *dst, int src_size);
64
-void bgr8torgb8  (const uint8_t *src, uint8_t *dst, int src_size);
65
+void   bgr8torgb8(const uint8_t *src, uint8_t *dst, int src_size);
65 66
 
66 67
 void shuffle_bytes_0321(const uint8_t *src, uint8_t *dst, int src_size);
67 68
 void shuffle_bytes_1230(const uint8_t *src, uint8_t *dst, int src_size);
... ...
@@ -138,7 +139,6 @@ extern void (*yvu9_to_yuy2)(const uint8_t *src1, const uint8_t *src2, const uint
138 138
                             int srcStride1, int srcStride2,
139 139
                             int srcStride3, int dstStride);
140 140
 
141
-
142 141
 extern void (*uyvytoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
143 142
                             int width, int height,
144 143
                             int lumStride, int chromStride, int srcStride);
... ...
@@ -35,33 +35,32 @@
35 35
 
36 36
 /* HACK Duplicated from swscale_internal.h.
37 37
  * Should be removed when a cleaner pixel format system exists. */
38
-#define isGray(x)       (           \
39
-           (x)==PIX_FMT_GRAY8       \
40
-        || (x)==PIX_FMT_GRAY16BE    \
41
-        || (x)==PIX_FMT_GRAY16LE    \
42
-    )
43
-#define hasChroma(x)   (!(          \
44
-            isGray(x)               \
45
-        || (x)==PIX_FMT_MONOBLACK   \
46
-        || (x)==PIX_FMT_MONOWHITE   \
47
-    ))
48
-#define isALPHA(x)      (           \
49
-           (x)==PIX_FMT_BGR32       \
50
-        || (x)==PIX_FMT_BGR32_1     \
51
-        || (x)==PIX_FMT_RGB32       \
52
-        || (x)==PIX_FMT_RGB32_1     \
53
-        || (x)==PIX_FMT_YUVA420P    \
54
-    )
55
-
56
-static uint64_t getSSD(uint8_t *src1, uint8_t *src2, int stride1, int stride2, int w, int h)
38
+#define isGray(x)                      \
39
+    ((x) == PIX_FMT_GRAY8       ||     \
40
+     (x) == PIX_FMT_Y400A       ||     \
41
+     (x) == PIX_FMT_GRAY16BE    ||     \
42
+     (x) == PIX_FMT_GRAY16LE)
43
+#define hasChroma(x)                   \
44
+    (!(isGray(x)                ||     \
45
+       (x) == PIX_FMT_MONOBLACK ||     \
46
+       (x) == PIX_FMT_MONOWHITE))
47
+#define isALPHA(x)                     \
48
+    ((x) == PIX_FMT_BGR32   ||         \
49
+     (x) == PIX_FMT_BGR32_1 ||         \
50
+     (x) == PIX_FMT_RGB32   ||         \
51
+     (x) == PIX_FMT_RGB32_1 ||         \
52
+     (x) == PIX_FMT_YUVA420P)
53
+
54
+static uint64_t getSSD(uint8_t *src1, uint8_t *src2, int stride1,
55
+                       int stride2, int w, int h)
57 56
 {
58
-    int x,y;
59
-    uint64_t ssd=0;
57
+    int x, y;
58
+    uint64_t ssd = 0;
60 59
 
61
-    for (y=0; y<h; y++) {
62
-        for (x=0; x<w; x++) {
63
-            int d= src1[x + y*stride1] - src2[x + y*stride2];
64
-            ssd+= d*d;
60
+    for (y = 0; y < h; y++) {
61
+        for (x = 0; x < w; x++) {
62
+            int d = src1[x + y * stride1] - src2[x + y * stride2];
63
+            ssd += d * d;
65 64
         }
66 65
     }
67 66
     return ssd;
... ...
@@ -86,14 +85,14 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
86 86
     static int cur_srcW, cur_srcH;
87 87
     static uint8_t *src[4];
88 88
     static int srcStride[4];
89
-    uint8_t *dst[4] = {0};
90
-    uint8_t *out[4] = {0};
89
+    uint8_t *dst[4] = { 0 };
90
+    uint8_t *out[4] = { 0 };
91 91
     int dstStride[4];
92 92
     int i;
93
-    uint64_t ssdY, ssdU=0, ssdV=0, ssdA=0;
93
+    uint64_t ssdY, ssdU = 0, ssdV = 0, ssdA = 0;
94 94
     struct SwsContext *dstContext = NULL, *outContext = NULL;
95 95
     uint32_t crc = 0;
96
-    int res = 0;
96
+    int res      = 0;
97 97
 
98 98
     if (cur_srcFormat != srcFormat || cur_srcW != srcW || cur_srcH != srcH) {
99 99
         struct SwsContext *srcContext = NULL;
... ...
@@ -106,11 +105,10 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
106 106
         for (p = 0; p < 4; p++) {
107 107
             srcStride[p] = FFALIGN(srcStride[p], 16);
108 108
             if (srcStride[p])
109
-                src[p] = av_mallocz(srcStride[p]*srcH+16);
109
+                src[p] = av_mallocz(srcStride[p] * srcH + 16);
110 110
             if (srcStride[p] && !src[p]) {
111 111
                 perror("Malloc");
112 112
                 res = -1;
113
-
114 113
                 goto end;
115 114
             }
116 115
         }
... ...
@@ -121,19 +119,18 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
121 121
                     av_pix_fmt_descriptors[PIX_FMT_YUVA420P].name,
122 122
                     av_pix_fmt_descriptors[srcFormat].name);
123 123
             res = -1;
124
-
125 124
             goto end;
126 125
         }
127 126
         sws_scale(srcContext, ref, refStride, 0, h, src, srcStride);
128 127
         sws_freeContext(srcContext);
129 128
 
130 129
         cur_srcFormat = srcFormat;
131
-        cur_srcW = srcW;
132
-        cur_srcH = srcH;
130
+        cur_srcW      = srcW;
131
+        cur_srcH      = srcH;
133 132
     }
134 133
 
135 134
     av_image_fill_linesizes(dstStride, dstFormat, dstW);
136
-    for (i=0; i<4; i++) {
135
+    for (i = 0; i < 4; i++) {
137 136
         /* Image buffers passed into libswscale can be allocated any way you
138 137
          * prefer, as long as they're aligned enough for the architecture, and
139 138
          * they're freed appropriately (such as using av_free for buffers
... ...
@@ -142,7 +139,7 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
142 142
          * out of bounds. */
143 143
         dstStride[i] = FFALIGN(dstStride[i], 16);
144 144
         if (dstStride[i])
145
-            dst[i]= av_mallocz(dstStride[i]*dstH+16);
145
+            dst[i] = av_mallocz(dstStride[i] * dstH + 16);
146 146
         if (dstStride[i] && !dst[i]) {
147 147
             perror("Malloc");
148 148
             res = -1;
... ...
@@ -151,13 +148,13 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
151 151
         }
152 152
     }
153 153
 
154
-    dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL, NULL);
154
+    dstContext = sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat,
155
+                                flags, NULL, NULL, NULL);
155 156
     if (!dstContext) {
156 157
         fprintf(stderr, "Failed to get %s ---> %s\n",
157 158
                 av_pix_fmt_descriptors[srcFormat].name,
158 159
                 av_pix_fmt_descriptors[dstFormat].name);
159 160
         res = -1;
160
-
161 161
         goto end;
162 162
     }
163 163
 
... ...
@@ -169,9 +166,9 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
169 169
 
170 170
     sws_scale(dstContext, src, srcStride, 0, srcH, dst, dstStride);
171 171
 
172
-    for (i = 0; i < 4 && dstStride[i]; i++) {
173
-        crc = av_crc(av_crc_get_table(AV_CRC_32_IEEE), crc, dst[i], dstStride[i] * dstH);
174
-    }
172
+    for (i = 0; i < 4 && dstStride[i]; i++)
173
+        crc = av_crc(av_crc_get_table(AV_CRC_32_IEEE), crc, dst[i],
174
+                     dstStride[i] * dstH);
175 175
 
176 176
     if (r && crc == r->crc) {
177 177
         ssdY = r->ssdY;
... ...
@@ -179,61 +176,60 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
179 179
         ssdV = r->ssdV;
180 180
         ssdA = r->ssdA;
181 181
     } else {
182
-        for (i=0; i<4; i++) {
182
+        for (i = 0; i < 4; i++) {
183 183
             refStride[i] = FFALIGN(refStride[i], 16);
184 184
             if (refStride[i])
185
-                out[i]= av_mallocz(refStride[i]*h);
185
+                out[i] = av_mallocz(refStride[i] * h);
186 186
             if (refStride[i] && !out[i]) {
187 187
                 perror("Malloc");
188 188
                 res = -1;
189
-
190 189
                 goto end;
191 190
             }
192 191
         }
193
-        outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUVA420P, SWS_BILINEAR, NULL, NULL, NULL);
192
+        outContext = sws_getContext(dstW, dstH, dstFormat, w, h,
193
+                                    PIX_FMT_YUVA420P, SWS_BILINEAR,
194
+                                    NULL, NULL, NULL);
194 195
         if (!outContext) {
195 196
             fprintf(stderr, "Failed to get %s ---> %s\n",
196 197
                     av_pix_fmt_descriptors[dstFormat].name,
197 198
                     av_pix_fmt_descriptors[PIX_FMT_YUVA420P].name);
198 199
             res = -1;
199
-
200 200
             goto end;
201 201
         }
202 202
         sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride);
203 203
 
204
-        ssdY= getSSD(ref[0], out[0], refStride[0], refStride[0], w, h);
204
+        ssdY = getSSD(ref[0], out[0], refStride[0], refStride[0], w, h);
205 205
         if (hasChroma(srcFormat) && hasChroma(dstFormat)) {
206 206
             //FIXME check that output is really gray
207
-            ssdU= getSSD(ref[1], out[1], refStride[1], refStride[1], (w+1)>>1, (h+1)>>1);
208
-            ssdV= getSSD(ref[2], out[2], refStride[2], refStride[2], (w+1)>>1, (h+1)>>1);
207
+            ssdU = getSSD(ref[1], out[1], refStride[1], refStride[1],
208
+                          (w + 1) >> 1, (h + 1) >> 1);
209
+            ssdV = getSSD(ref[2], out[2], refStride[2], refStride[2],
210
+                          (w + 1) >> 1, (h + 1) >> 1);
209 211
         }
210 212
         if (isALPHA(srcFormat) && isALPHA(dstFormat))
211
-            ssdA= getSSD(ref[3], out[3], refStride[3], refStride[3], w, h);
213
+            ssdA = getSSD(ref[3], out[3], refStride[3], refStride[3], w, h);
212 214
 
213
-        ssdY/= w*h;
214
-        ssdU/= w*h/4;
215
-        ssdV/= w*h/4;
216
-        ssdA/= w*h;
215
+        ssdY /= w * h;
216
+        ssdU /= w * h / 4;
217
+        ssdV /= w * h / 4;
218
+        ssdA /= w * h;
217 219
 
218 220
         sws_freeContext(outContext);
219 221
 
220
-        for (i=0; i<4; i++) {
222
+        for (i = 0; i < 4; i++)
221 223
             if (refStride[i])
222 224
                 av_free(out[i]);
223
-        }
224 225
     }
225 226
 
226
-    printf(" CRC=%08x SSD=%5"PRId64",%5"PRId64",%5"PRId64",%5"PRId64"\n",
227
+    printf(" CRC=%08x SSD=%5"PRId64 ",%5"PRId64 ",%5"PRId64 ",%5"PRId64 "\n",
227 228
            crc, ssdY, ssdU, ssdV, ssdA);
228 229
 
229 230
 end:
230
-
231 231
     sws_freeContext(dstContext);
232 232
 
233
-    for (i=0; i<4; i++) {
233
+    for (i = 0; i < 4; i++)
234 234
         if (dstStride[i])
235 235
             av_free(dst[i]);
236
-    }
237 236
 
238 237
     return res;
239 238
 }
... ...
@@ -242,18 +238,18 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h,
242 242
                      enum PixelFormat srcFormat_in,
243 243
                      enum PixelFormat dstFormat_in)
244 244
 {
245
-    const int flags[] = { SWS_FAST_BILINEAR,
246
-                          SWS_BILINEAR, SWS_BICUBIC,
247
-                          SWS_X       , SWS_POINT  , SWS_AREA, 0 };
248
-    const int srcW = w;
249
-    const int srcH = h;
250
-    const int dstW[] = { srcW - srcW/3, srcW, srcW + srcW/3, 0 };
251
-    const int dstH[] = { srcH - srcH/3, srcH, srcH + srcH/3, 0 };
245
+    const int flags[] = { SWS_FAST_BILINEAR, SWS_BILINEAR, SWS_BICUBIC,
246
+                          SWS_X, SWS_POINT, SWS_AREA, 0 };
247
+    const int srcW   = w;
248
+    const int srcH   = h;
249
+    const int dstW[] = { srcW - srcW / 3, srcW, srcW + srcW / 3, 0 };
250
+    const int dstH[] = { srcH - srcH / 3, srcH, srcH + srcH / 3, 0 };
252 251
     enum PixelFormat srcFormat, dstFormat;
253 252
 
254 253
     for (srcFormat = srcFormat_in != PIX_FMT_NONE ? srcFormat_in : 0;
255 254
          srcFormat < PIX_FMT_NB; srcFormat++) {
256
-        if (!sws_isSupportedInput(srcFormat) || !sws_isSupportedOutput(srcFormat))
255
+        if (!sws_isSupportedInput(srcFormat) ||
256
+            !sws_isSupportedOutput(srcFormat))
257 257
             continue;
258 258
 
259 259
         for (dstFormat = dstFormat_in != PIX_FMT_NONE ? dstFormat_in : 0;
... ...
@@ -261,7 +257,8 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h,
261 261
             int i, j, k;
262 262
             int res = 0;
263 263
 
264
-            if (!sws_isSupportedInput(dstFormat) || !sws_isSupportedOutput(dstFormat))
264
+            if (!sws_isSupportedInput(dstFormat) ||
265
+                !sws_isSupportedOutput(dstFormat))
265 266
                 continue;
266 267
 
267 268
             printf("%s -> %s\n",
... ...
@@ -269,14 +266,13 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h,
269 269
                    av_pix_fmt_descriptors[dstFormat].name);
270 270
             fflush(stdout);
271 271
 
272
-            for (k = 0; flags[k] && !res; k++) {
272
+            for (k = 0; flags[k] && !res; k++)
273 273
                 for (i = 0; dstW[i] && !res; i++)
274 274
                     for (j = 0; dstH[j] && !res; j++)
275 275
                         res = doTest(ref, refStride, w, h,
276 276
                                      srcFormat, dstFormat,
277 277
                                      srcW, srcH, dstW[i], dstH[j], flags[k],
278 278
                                      NULL);
279
-            }
280 279
             if (dstFormat_in != PIX_FMT_NONE)
281 280
                 break;
282 281
         }
... ...
@@ -302,13 +298,14 @@ static int fileTest(uint8_t *ref[4], int refStride[4], int w, int h, FILE *fp,
302 302
         int flags;
303 303
         int ret;
304 304
 
305
-        ret = sscanf(buf, " %12s %dx%d -> %12s %dx%d flags=%d CRC=%x"
306
-                          " SSD=%"PRId64", %"PRId64", %"PRId64", %"PRId64"\n",
307
-                          srcStr, &srcW, &srcH, dstStr, &dstW, &dstH,
308
-                          &flags, &r.crc, &r.ssdY, &r.ssdU, &r.ssdV, &r.ssdA);
305
+        ret = sscanf(buf,
306
+                     " %12s %dx%d -> %12s %dx%d flags=%d CRC=%x"
307
+                     " SSD=%"PRId64 ", %"PRId64 ", %"PRId64 ", %"PRId64 "\n",
308
+                     srcStr, &srcW, &srcH, dstStr, &dstW, &dstH,
309
+                     &flags, &r.crc, &r.ssdY, &r.ssdU, &r.ssdV, &r.ssdA);
309 310
         if (ret != 12) {
310 311
             srcStr[0] = dstStr[0] = 0;
311
-            ret = sscanf(buf, "%12s -> %12s\n", srcStr, dstStr);
312
+            ret       = sscanf(buf, "%12s -> %12s\n", srcStr, dstStr);
312 313
         }
313 314
 
314 315
         srcFormat = av_get_pix_fmt(srcStr);
... ...
@@ -342,12 +339,12 @@ int main(int argc, char **argv)
342 342
 {
343 343
     enum PixelFormat srcFormat = PIX_FMT_NONE;
344 344
     enum PixelFormat dstFormat = PIX_FMT_NONE;
345
-    uint8_t *rgb_data = av_malloc (W*H*4);
346
-    uint8_t *rgb_src[3]= {rgb_data, NULL, NULL};
347
-    int rgb_stride[3]={4*W, 0, 0};
348
-    uint8_t *data = av_malloc (4*W*H);
349
-    uint8_t *src[4]= {data, data+W*H, data+W*H*2, data+W*H*3};
350
-    int stride[4]={W, W, W, W};
345
+    uint8_t *rgb_data   = av_malloc(W * H * 4);
346
+    uint8_t *rgb_src[3] = { rgb_data, NULL, NULL };
347
+    int rgb_stride[3]   = { 4 * W, 0, 0 };
348
+    uint8_t *data       = av_malloc(4 * W * H);
349
+    uint8_t *src[4]     = { data, data + W * H, data + W * H * 2, data + W * H * 3 };
350
+    int stride[4]       = { W, W, W, W };
351 351
     int x, y;
352 352
     struct SwsContext *sws;
353 353
     AVLFG rand;
... ...
@@ -357,41 +354,40 @@ int main(int argc, char **argv)
357 357
     if (!rgb_data || !data)
358 358
         return -1;
359 359
 
360
-    sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUVA420P, SWS_BILINEAR, NULL, NULL, NULL);
360
+    sws = sws_getContext(W / 12, H / 12, PIX_FMT_RGB32, W, H,
361
+                         PIX_FMT_YUVA420P, SWS_BILINEAR, NULL, NULL, NULL);
361 362
 
362 363
     av_lfg_init(&rand, 1);
363 364
 
364
-    for (y=0; y<H; y++) {
365
-        for (x=0; x<W*4; x++) {
366
-            rgb_data[ x + y*4*W]= av_lfg_get(&rand);
367
-        }
368
-    }
365
+    for (y = 0; y < H; y++)
366
+        for (x = 0; x < W * 4; x++)
367
+            rgb_data[ x + y * 4 * W] = av_lfg_get(&rand);
369 368
     sws_scale(sws, rgb_src, rgb_stride, 0, H, src, stride);
370 369
     sws_freeContext(sws);
371 370
     av_free(rgb_data);
372 371
 
373 372
     for (i = 1; i < argc; i += 2) {
374
-        if (argv[i][0] != '-' || i+1 == argc)
373
+        if (argv[i][0] != '-' || i + 1 == argc)
375 374
             goto bad_option;
376 375
         if (!strcmp(argv[i], "-ref")) {
377
-            FILE *fp = fopen(argv[i+1], "r");
376
+            FILE *fp = fopen(argv[i + 1], "r");
378 377
             if (!fp) {
379
-                fprintf(stderr, "could not open '%s'\n", argv[i+1]);
378
+                fprintf(stderr, "could not open '%s'\n", argv[i + 1]);
380 379
                 goto error;
381 380
             }
382 381
             res = fileTest(src, stride, W, H, fp, srcFormat, dstFormat);
383 382
             fclose(fp);
384 383
             goto end;
385 384
         } else if (!strcmp(argv[i], "-src")) {
386
-            srcFormat = av_get_pix_fmt(argv[i+1]);
385
+            srcFormat = av_get_pix_fmt(argv[i + 1]);
387 386
             if (srcFormat == PIX_FMT_NONE) {
388
-                fprintf(stderr, "invalid pixel format %s\n", argv[i+1]);
387
+                fprintf(stderr, "invalid pixel format %s\n", argv[i + 1]);
389 388
                 return -1;
390 389
             }
391 390
         } else if (!strcmp(argv[i], "-dst")) {
392
-            dstFormat = av_get_pix_fmt(argv[i+1]);
391
+            dstFormat = av_get_pix_fmt(argv[i + 1]);
393 392
             if (dstFormat == PIX_FMT_NONE) {
394
-                fprintf(stderr, "invalid pixel format %s\n", argv[i+1]);
393
+                fprintf(stderr, "invalid pixel format %s\n", argv[i + 1]);
395 394
                 return -1;
396 395
             }
397 396
         } else {
... ...
@@ -1637,12 +1637,16 @@ rgb16_32_wrapper(PIX_FMT_RGB32,    rgb32,   0, 0, 16, 0,   0x00FF, 0xFF00, 0xFF0
1637 1637
 rgb16_32_wrapper(PIX_FMT_RGB32_1,  rgb321,  0, 0, 16, 8,   0x00FF, 0xFF00, 0xFF0000,  8, 0,  8, RGB2YUV_SHIFT+8)
1638 1638
 rgb16_32_wrapper(PIX_FMT_BGR565LE, bgr16le, 0, 0,  0, 0,   0x001F, 0x07E0,   0xF800, 11, 5,  0, RGB2YUV_SHIFT+8)
1639 1639
 rgb16_32_wrapper(PIX_FMT_BGR555LE, bgr15le, 0, 0,  0, 0,   0x001F, 0x03E0,   0x7C00, 10, 5,  0, RGB2YUV_SHIFT+7)
1640
+rgb16_32_wrapper(PIX_FMT_BGR444LE, bgr12le, 0, 0,  0, 0,   0x000F, 0x00F0,   0x0F00,  8, 4,  0, RGB2YUV_SHIFT+4)
1640 1641
 rgb16_32_wrapper(PIX_FMT_RGB565LE, rgb16le, 0, 0,  0, 0,   0xF800, 0x07E0,   0x001F,  0, 5, 11, RGB2YUV_SHIFT+8)
1641 1642
 rgb16_32_wrapper(PIX_FMT_RGB555LE, rgb15le, 0, 0,  0, 0,   0x7C00, 0x03E0,   0x001F,  0, 5, 10, RGB2YUV_SHIFT+7)
1643
+rgb16_32_wrapper(PIX_FMT_RGB444LE, rgb12le, 0, 0,  0, 0,   0x0F00, 0x00F0,   0x000F,  0, 4,  8, RGB2YUV_SHIFT+4)
1642 1644
 rgb16_32_wrapper(PIX_FMT_BGR565BE, bgr16be, 0, 0,  0, 0,   0x001F, 0x07E0,   0xF800, 11, 5,  0, RGB2YUV_SHIFT+8)
1643 1645
 rgb16_32_wrapper(PIX_FMT_BGR555BE, bgr15be, 0, 0,  0, 0,   0x001F, 0x03E0,   0x7C00, 10, 5,  0, RGB2YUV_SHIFT+7)
1646
+rgb16_32_wrapper(PIX_FMT_BGR444BE, bgr12be, 0, 0,  0, 0,   0x000F, 0x00F0,   0x0F00,  8, 4,  0, RGB2YUV_SHIFT+4)
1644 1647
 rgb16_32_wrapper(PIX_FMT_RGB565BE, rgb16be, 0, 0,  0, 0,   0xF800, 0x07E0,   0x001F,  0, 5, 11, RGB2YUV_SHIFT+8)
1645 1648
 rgb16_32_wrapper(PIX_FMT_RGB555BE, rgb15be, 0, 0,  0, 0,   0x7C00, 0x03E0,   0x001F,  0, 5, 10, RGB2YUV_SHIFT+7)
1649
+rgb16_32_wrapper(PIX_FMT_RGB444BE, rgb12be, 0, 0,  0, 0,   0x0F00, 0x00F0,   0x000F,  0, 4,  8, RGB2YUV_SHIFT+4)
1646 1650
 
1647 1651
 static void gbr24pToUV_half_c(uint16_t *dstU, uint16_t *dstV,
1648 1652
                          const uint8_t *gsrc, const uint8_t *bsrc, const uint8_t *rsrc,
... ...
@@ -2887,6 +2891,8 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
2887 2887
         case PIX_FMT_BGR565BE: c->chrToYV12 = bgr16beToUV_half_c; break;
2888 2888
         case PIX_FMT_BGR555LE: c->chrToYV12 = bgr15leToUV_half_c; break;
2889 2889
         case PIX_FMT_BGR555BE: c->chrToYV12 = bgr15beToUV_half_c; break;
2890
+        case PIX_FMT_BGR444LE: c->chrToYV12 = bgr12leToUV_half_c; break;
2891
+        case PIX_FMT_BGR444BE: c->chrToYV12 = bgr12beToUV_half_c; break;
2890 2892
         case PIX_FMT_BGR32   : c->chrToYV12 = rgb32ToUV_half_c;   break;
2891 2893
         case PIX_FMT_BGR32_1 : c->chrToYV12 = rgb321ToUV_half_c;  break;
2892 2894
         case PIX_FMT_RGB24   : c->chrToYV12 = rgb24ToUV_half_c;   break;
... ...
@@ -2895,6 +2901,8 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
2895 2895
         case PIX_FMT_RGB555LE: c->chrToYV12 = rgb15leToUV_half_c; break;
2896 2896
         case PIX_FMT_RGB555BE: c->chrToYV12 = rgb15beToUV_half_c; break;
2897 2897
         case PIX_FMT_GBR24P  : c->chrToYV12 = gbr24pToUV_half_c;  break;
2898
+        case PIX_FMT_RGB444LE: c->chrToYV12 = rgb12leToUV_half_c; break;
2899
+        case PIX_FMT_RGB444BE: c->chrToYV12 = rgb12beToUV_half_c; break;
2898 2900
         }
2899 2901
     } else {
2900 2902
         switch(srcFormat) {
... ...
@@ -2909,6 +2917,8 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
2909 2909
         case PIX_FMT_BGR565BE: c->chrToYV12 = bgr16beToUV_c; break;
2910 2910
         case PIX_FMT_BGR555LE: c->chrToYV12 = bgr15leToUV_c; break;
2911 2911
         case PIX_FMT_BGR555BE: c->chrToYV12 = bgr15beToUV_c; break;
2912
+        case PIX_FMT_BGR444LE: c->chrToYV12 = bgr12leToUV_c; break;
2913
+        case PIX_FMT_BGR444BE: c->chrToYV12 = bgr12beToUV_c; break;
2912 2914
         case PIX_FMT_BGR32   : c->chrToYV12 = rgb32ToUV_c;   break;
2913 2915
         case PIX_FMT_BGR32_1 : c->chrToYV12 = rgb321ToUV_c;  break;
2914 2916
         case PIX_FMT_RGB24   : c->chrToYV12 = rgb24ToUV_c;   break;
... ...
@@ -2916,6 +2926,8 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
2916 2916
         case PIX_FMT_RGB565BE: c->chrToYV12 = rgb16beToUV_c; break;
2917 2917
         case PIX_FMT_RGB555LE: c->chrToYV12 = rgb15leToUV_c; break;
2918 2918
         case PIX_FMT_RGB555BE: c->chrToYV12 = rgb15beToUV_c; break;
2919
+        case PIX_FMT_RGB444LE: c->chrToYV12 = rgb12leToUV_c; break;
2920
+        case PIX_FMT_RGB444BE: c->chrToYV12 = rgb12beToUV_c; break;
2919 2921
         }
2920 2922
     }
2921 2923
 
... ...
@@ -2960,11 +2972,15 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
2960 2960
     case PIX_FMT_BGR565BE : c->lumToYV12 = bgr16beToY_c; break;
2961 2961
     case PIX_FMT_BGR555LE : c->lumToYV12 = bgr15leToY_c; break;
2962 2962
     case PIX_FMT_BGR555BE : c->lumToYV12 = bgr15beToY_c; break;
2963
+    case PIX_FMT_BGR444LE : c->lumToYV12 = bgr12leToY_c; break;
2964
+    case PIX_FMT_BGR444BE : c->lumToYV12 = bgr12beToY_c; break;
2963 2965
     case PIX_FMT_RGB24    : c->lumToYV12 = rgb24ToY_c;   break;
2964 2966
     case PIX_FMT_RGB565LE : c->lumToYV12 = rgb16leToY_c; break;
2965 2967
     case PIX_FMT_RGB565BE : c->lumToYV12 = rgb16beToY_c; break;
2966 2968
     case PIX_FMT_RGB555LE : c->lumToYV12 = rgb15leToY_c; break;
2967 2969
     case PIX_FMT_RGB555BE : c->lumToYV12 = rgb15beToY_c; break;
2970
+    case PIX_FMT_RGB444LE : c->lumToYV12 = rgb12leToY_c; break;
2971
+    case PIX_FMT_RGB444BE : c->lumToYV12 = rgb12beToY_c; break;
2968 2972
     case PIX_FMT_RGB8     :
2969 2973
     case PIX_FMT_BGR8     :
2970 2974
     case PIX_FMT_PAL8     :
... ...
@@ -135,7 +135,6 @@ const char *swscale_license(void);
135 135
  */
136 136
 const int *sws_getCoefficients(int colorspace);
137 137
 
138
-
139 138
 // when used for filters they must have an odd number of elements
140 139
 // coeffs cannot be shared between vectors
141 140
 typedef struct {
... ...
@@ -235,9 +234,9 @@ struct SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat
235 235
  *                  the destination image
236 236
  * @return          the height of the output slice
237 237
  */
238
-int sws_scale(struct SwsContext *c, const uint8_t* const srcSlice[],
238
+int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[],
239 239
               const int srcStride[], int srcSliceY, int srcSliceH,
240
-              uint8_t* const dst[], const int dstStride[]);
240
+              uint8_t *const dst[], const int dstStride[]);
241 241
 
242 242
 /**
243 243
  * @param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x]
... ...
@@ -32,9 +32,9 @@
32 32
 #include "libavutil/pixfmt.h"
33 33
 #include "libavutil/pixdesc.h"
34 34
 
35
-#define STR(s)         AV_TOSTRING(s) //AV_STRINGIFY is too long
35
+#define STR(s) AV_TOSTRING(s) // AV_STRINGIFY is too long
36 36
 
37
-#define FAST_BGR2YV12 //use 7-bit instead of 15-bit coefficients
37
+#define FAST_BGR2YV12 // use 7-bit instead of 15-bit coefficients
38 38
 
39 39
 #define MAX_FILTER_SIZE 256
40 40
 
... ...
@@ -47,21 +47,20 @@
47 47
 #endif
48 48
 
49 49
 #if ARCH_X86_64
50
-#   define APCK_PTR2 8
50
+#   define APCK_PTR2  8
51 51
 #   define APCK_COEF 16
52 52
 #   define APCK_SIZE 24
53 53
 #else
54
-#   define APCK_PTR2 4
55
-#   define APCK_COEF 8
54
+#   define APCK_PTR2  4
55
+#   define APCK_COEF  8
56 56
 #   define APCK_SIZE 16
57 57
 #endif
58 58
 
59 59
 struct SwsContext;
60 60
 
61
-typedef int (*SwsFunc)(struct SwsContext *context, const uint8_t* src[],
61
+typedef int (*SwsFunc)(struct SwsContext *context, const uint8_t *src[],
62 62
                        int srcStride[], int srcSliceY, int srcSliceH,
63
-                       uint8_t* dst[], int dstStride[]);
64
-
63
+                       uint8_t *dst[], int dstStride[]);
65 64
 
66 65
 /**
67 66
  * Write one line of horizontally scaled data to planar output
... ...
@@ -75,8 +74,8 @@ typedef int (*SwsFunc)(struct SwsContext *context, const uint8_t* src[],
75 75
  * @param dither  ordered dither array of type int16_t and size 8
76 76
  * @param offset  Dither offset
77 77
  */
78
-typedef void (*yuv2planar1_fn) (const int16_t *src, uint8_t *dest, int dstW,
79
-                                const uint8_t *dither, int offset);
78
+typedef void (*yuv2planar1_fn)(const int16_t *src, uint8_t *dest, int dstW,
79
+                               const uint8_t *dither, int offset);
80 80
 
81 81
 /**
82 82
  * Write one line of horizontally scaled data to planar output
... ...
@@ -91,9 +90,9 @@ typedef void (*yuv2planar1_fn) (const int16_t *src, uint8_t *dest, int dstW,
91 91
  * @param dstW          width of destination pixels
92 92
  * @param offset        Dither offset
93 93
  */
94
-typedef void (*yuv2planarX_fn) (const int16_t *filter, int filterSize,
95
-                                const int16_t **src, uint8_t *dest, int dstW,
96
-                                const uint8_t *dither, int offset);
94
+typedef void (*yuv2planarX_fn)(const int16_t *filter, int filterSize,
95
+                               const int16_t **src, uint8_t *dest, int dstW,
96
+                               const uint8_t *dither, int offset);
97 97
 
98 98
 /**
99 99
  * Write one line of horizontally scaled chroma to interleaved output
... ...
@@ -110,9 +109,12 @@ typedef void (*yuv2planarX_fn) (const int16_t *filter, int filterSize,
110 110
  *                      output, this is in uint16_t
111 111
  * @param dstW          width of chroma planes
112 112
  */
113
-typedef void (*yuv2interleavedX_fn) (struct SwsContext *c, const int16_t *chrFilter, int chrFilterSize,
114
-                                     const int16_t **chrUSrc, const int16_t **chrVSrc,
115
-                                     uint8_t *dest, int dstW);
113
+typedef void (*yuv2interleavedX_fn)(struct SwsContext *c,
114
+                                    const int16_t *chrFilter,
115
+                                    int chrFilterSize,
116
+                                    const int16_t **chrUSrc,
117
+                                    const int16_t **chrVSrc,
118
+                                    uint8_t *dest, int dstW);
116 119
 
117 120
 /**
118 121
  * Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB
... ...
@@ -143,10 +145,11 @@ typedef void (*yuv2interleavedX_fn) (struct SwsContext *c, const int16_t *chrFil
143 143
  *                but can be used to generate comfort noise using dithering
144 144
  *                for some output formats.
145 145
  */
146
-typedef void (*yuv2packed1_fn) (struct SwsContext *c,  const int16_t *lumSrc,
147
-                                const int16_t *chrUSrc[2], const int16_t *chrVSrc[2],
148
-                                const int16_t *alpSrc,  uint8_t *dest,
149
-                                int dstW, int uvalpha, int y);
146
+typedef void (*yuv2packed1_fn)(struct SwsContext *c, const int16_t *lumSrc,
147
+                               const int16_t *chrUSrc[2],
148
+                               const int16_t *chrVSrc[2],
149
+                               const int16_t *alpSrc, uint8_t *dest,
150
+                               int dstW, int uvalpha, int y);
150 151
 /**
151 152
  * Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB
152 153
  * output by doing bilinear scaling between two input lines.
... ...
@@ -175,10 +178,12 @@ typedef void (*yuv2packed1_fn) (struct SwsContext *c,  const int16_t *lumSrc,
175 175
  *                but can be used to generate comfort noise using dithering
176 176
  *                for some output formats.
177 177
  */
178
-typedef void (*yuv2packed2_fn) (struct SwsContext *c,  const int16_t *lumSrc[2],
179
-                                const int16_t *chrUSrc[2], const int16_t *chrVSrc[2],
180
-                                const int16_t *alpSrc[2], uint8_t *dest,
181
-                                int dstW, int yalpha, int uvalpha, int y);
178
+typedef void (*yuv2packed2_fn)(struct SwsContext *c, const int16_t *lumSrc[2],
179
+                               const int16_t *chrUSrc[2],
180
+                               const int16_t *chrVSrc[2],
181
+                               const int16_t *alpSrc[2],
182
+                               uint8_t *dest,
183
+                               int dstW, int yalpha, int uvalpha, int y);
182 184
 /**
183 185
  * Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB
184 186
  * output by doing multi-point vertical scaling between input pixels.
... ...
@@ -205,12 +210,13 @@ typedef void (*yuv2packed2_fn) (struct SwsContext *c,  const int16_t *lumSrc[2],
205 205
  *                      but can be used to generate comfort noise using dithering
206 206
  *                      or some output formats.
207 207
  */
208
-typedef void (*yuv2packedX_fn) (struct SwsContext *c, const int16_t *lumFilter,
209
-                                const int16_t **lumSrc, int lumFilterSize,
210
-                                const int16_t *chrFilter, const int16_t **chrUSrc,
211
-                                const int16_t **chrVSrc, int chrFilterSize,
212
-                                const int16_t **alpSrc, uint8_t *dest,
213
-                                int dstW, int y);
208
+typedef void (*yuv2packedX_fn)(struct SwsContext *c, const int16_t *lumFilter,
209
+                               const int16_t **lumSrc, int lumFilterSize,
210
+                               const int16_t *chrFilter,
211
+                               const int16_t **chrUSrc,
212
+                               const int16_t **chrVSrc, int chrFilterSize,
213
+                               const int16_t **alpSrc, uint8_t *dest,
214
+                               int dstW, int y);
214 215
 
215 216
 /* This struct should be aligned on at least a 32-byte boundary. */
216 217
 typedef struct SwsContext {
... ...
@@ -263,12 +269,12 @@ typedef struct SwsContext {
263 263
     int16_t **chrUPixBuf;         ///< Ring buffer for scaled horizontal chroma plane lines to be fed to the vertical scaler.
264 264
     int16_t **chrVPixBuf;         ///< Ring buffer for scaled horizontal chroma plane lines to be fed to the vertical scaler.
265 265
     int16_t **alpPixBuf;          ///< Ring buffer for scaled horizontal alpha  plane lines to be fed to the vertical scaler.
266
-    int       vLumBufSize;        ///< Number of vertical luma/alpha lines allocated in the ring buffer.
267
-    int       vChrBufSize;        ///< Number of vertical chroma     lines allocated in the ring buffer.
268
-    int       lastInLumBuf;       ///< Last scaled horizontal luma/alpha line from source in the ring buffer.
269
-    int       lastInChrBuf;       ///< Last scaled horizontal chroma     line from source in the ring buffer.
270
-    int       lumBufIndex;        ///< Index in ring buffer of the last scaled horizontal luma/alpha line from source.
271
-    int       chrBufIndex;        ///< Index in ring buffer of the last scaled horizontal chroma     line from source.
266
+    int vLumBufSize;              ///< Number of vertical luma/alpha lines allocated in the ring buffer.
267
+    int vChrBufSize;              ///< Number of vertical chroma     lines allocated in the ring buffer.
268
+    int lastInLumBuf;             ///< Last scaled horizontal luma/alpha line from source in the ring buffer.
269
+    int lastInChrBuf;             ///< Last scaled horizontal chroma     line from source in the ring buffer.
270
+    int lumBufIndex;              ///< Index in ring buffer of the last scaled horizontal luma/alpha line from source.
271
+    int chrBufIndex;              ///< Index in ring buffer of the last scaled horizontal chroma     line from source.
272 272
     //@}
273 273
 
274 274
     uint8_t *formatConvBuffer;
... ...
@@ -295,10 +301,10 @@ typedef struct SwsContext {
295 295
     int16_t *hChrFilterPos;       ///< Array of horizontal filter starting positions for each dst[i] for chroma     planes.
296 296
     int16_t *vLumFilterPos;       ///< Array of vertical   filter starting positions for each dst[i] for luma/alpha planes.
297 297
     int16_t *vChrFilterPos;       ///< Array of vertical   filter starting positions for each dst[i] for chroma     planes.
298
-    int      hLumFilterSize;      ///< Horizontal filter size for luma/alpha pixels.
299
-    int      hChrFilterSize;      ///< Horizontal filter size for chroma     pixels.
300
-    int      vLumFilterSize;      ///< Vertical   filter size for luma/alpha pixels.
301
-    int      vChrFilterSize;      ///< Vertical   filter size for chroma     pixels.
298
+    int hLumFilterSize;           ///< Horizontal filter size for luma/alpha pixels.
299
+    int hChrFilterSize;           ///< Horizontal filter size for chroma     pixels.
300
+    int vLumFilterSize;           ///< Vertical   filter size for luma/alpha pixels.
301
+    int vChrFilterSize;           ///< Vertical   filter size for chroma     pixels.
302 302
     //@}
303 303
 
304 304
     int lumMmx2FilterCodeSize;    ///< Runtime-generated MMX2 horizontal fast bilinear scaler code size for luma/alpha planes.
... ...
@@ -310,11 +316,11 @@ typedef struct SwsContext {
310 310
 
311 311
     int dstY;                     ///< Last destination vertical line output from last slice.
312 312
     int flags;                    ///< Flags passed by the user to select scaler algorithm, optimizations, subsampling, etc...
313
-    void * yuvTable;            // pointer to the yuv->rgb table start so it can be freed()
314
-    uint8_t * table_rV[256];
315
-    uint8_t * table_gU[256];
316
-    int    table_gV[256];
317
-    uint8_t * table_bU[256];
313
+    void *yuvTable;             // pointer to the yuv->rgb table start so it can be freed()
314
+    uint8_t *table_rV[256];
315
+    uint8_t *table_gU[256];
316
+    int table_gV[256];
317
+    uint8_t *table_bU[256];
318 318
 
319 319
     //Colorspace stuff
320 320
     int contrast, brightness, saturation;    // for sws_getColorspaceDetails
... ...
@@ -366,15 +372,15 @@ typedef struct SwsContext {
366 366
     DECLARE_ALIGNED(8, uint64_t, yOffset);
367 367
     DECLARE_ALIGNED(8, uint64_t, uOffset);
368 368
     DECLARE_ALIGNED(8, uint64_t, vOffset);
369
-    int32_t  lumMmxFilter[4*MAX_FILTER_SIZE];
370
-    int32_t  chrMmxFilter[4*MAX_FILTER_SIZE];
369
+    int32_t lumMmxFilter[4 * MAX_FILTER_SIZE];
370
+    int32_t chrMmxFilter[4 * MAX_FILTER_SIZE];
371 371
     int dstW;                     ///< Width  of destination luma/alpha planes.
372 372
     DECLARE_ALIGNED(8, uint64_t, esp);
373 373
     DECLARE_ALIGNED(8, uint64_t, vRounder);
374 374
     DECLARE_ALIGNED(8, uint64_t, u_temp);
375 375
     DECLARE_ALIGNED(8, uint64_t, v_temp);
376 376
     DECLARE_ALIGNED(8, uint64_t, y_temp);
377
-    int32_t  alpMmxFilter[4*MAX_FILTER_SIZE];
377
+    int32_t alpMmxFilter[4 * MAX_FILTER_SIZE];
378 378
     // alignment of these values is not necessary, but merely here
379 379
     // to maintain the same offset across x8632 and x86-64. Once we
380 380
     // use proper offset macros in the asm, they can be removed.
... ...
@@ -393,7 +399,7 @@ typedef struct SwsContext {
393 393
     vector signed short   CGV;
394 394
     vector signed short   OY;
395 395
     vector unsigned short CSHIFT;
396
-    vector signed short   *vYCoeffsBank, *vCCoeffsBank;
396
+    vector signed short  *vYCoeffsBank, *vCCoeffsBank;
397 397
 #endif
398 398
 
399 399
 #if ARCH_BFIN
... ...
@@ -423,21 +429,25 @@ typedef struct SwsContext {
423 423
     yuv2packed2_fn yuv2packed2;
424 424
     yuv2packedX_fn yuv2packedX;
425 425
 
426
+    /// Unscaled conversion of luma plane to YV12 for horizontal scaler.
426 427
     void (*lumToYV12)(uint8_t *dst, const uint8_t *src, const uint8_t *src2, const uint8_t *src3,
427
-                      int width, uint32_t *pal); ///< Unscaled conversion of luma plane to YV12 for horizontal scaler.
428
+                      int width, uint32_t *pal);
429
+    /// Unscaled conversion of alpha plane to YV12 for horizontal scaler.
428 430
     void (*alpToYV12)(uint8_t *dst, const uint8_t *src, const uint8_t *src2, const uint8_t *src3,
429
-                      int width, uint32_t *pal); ///< Unscaled conversion of alpha plane to YV12 for horizontal scaler.
431
+                      int width, uint32_t *pal);
432
+    /// Unscaled conversion of chroma planes to YV12 for horizontal scaler.
430 433
     void (*chrToYV12)(uint8_t *dstU, uint8_t *dstV,
431 434
                       const uint8_t *src1, const uint8_t *src2, const uint8_t *src3,
432
-                      int width, uint32_t *pal); ///< Unscaled conversion of chroma planes to YV12 for horizontal scaler.
435
+                      int width, uint32_t *pal);
433 436
 
434 437
     /**
435
-      * Functions to read planar input, such as planar RGB, and convert
436
-      * internally to Y/UV.
437
-      */
438
+     * Functions to read planar input, such as planar RGB, and convert
439
+     * internally to Y/UV.
440
+     */
438 441
     /** @{ */
439 442
     void (*readLumPlanar)(uint8_t *dst, const uint8_t *src[4], int width);
440
-    void (*readChrPlanar)(uint8_t *dstU, uint8_t *dstV, const uint8_t *src[4], int width);
443
+    void (*readChrPlanar)(uint8_t *dstU, uint8_t *dstV, const uint8_t *src[4],
444
+                          int width);
441 445
     /** @} */
442 446
 
443 447
     /**
... ...
@@ -499,19 +509,20 @@ typedef struct SwsContext {
499 499
      *                   to simplify creating SIMD code.
500 500
      */
501 501
     /** @{ */
502
-    void (*hyScale)(struct SwsContext *c, int16_t *dst, int dstW, const uint8_t *src,
503
-                    const int16_t *filter, const int16_t *filterPos,
504
-                    int filterSize);
505
-    void (*hcScale)(struct SwsContext *c, int16_t *dst, int dstW, const uint8_t *src,
506
-                    const int16_t *filter, const int16_t *filterPos,
507
-                    int filterSize);
502
+    void (*hyScale)(struct SwsContext *c, int16_t *dst, int dstW,
503
+                    const uint8_t *src, const int16_t *filter,
504
+                    const int16_t *filterPos, int filterSize);
505
+    void (*hcScale)(struct SwsContext *c, int16_t *dst, int dstW,
506
+                    const uint8_t *src, const int16_t *filter,
507
+                    const int16_t *filterPos, int filterSize);
508 508
     /** @} */
509 509
 
510
-    void (*lumConvertRange)(int16_t *dst, int width); ///< Color range conversion function for luma plane if needed.
511
-    void (*chrConvertRange)(int16_t *dst1, int16_t *dst2, int width); ///< Color range conversion function for chroma planes if needed.
510
+    /// Color range conversion function for luma plane if needed.
511
+    void (*lumConvertRange)(int16_t *dst, int width);
512
+    /// Color range conversion function for chroma planes if needed.
513
+    void (*chrConvertRange)(int16_t *dst1, int16_t *dst2, int width);
512 514
 
513 515
     int needs_hcscale; ///< Set if there are chroma planes to be converted.
514
-
515 516
 } SwsContext;
516 517
 //FIXME check init (where 0)
517 518
 
... ...
@@ -567,53 +578,54 @@ const char *sws_format_name(enum PixelFormat format);
567 567
     (!(av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL) && \
568 568
      av_pix_fmt_descriptors[x].nb_components <= 2)
569 569
 #else
570
-#define isGray(x)       (           \
571
-           (x)==PIX_FMT_GRAY8       \
572
-        || (x)==PIX_FMT_GRAY8A      \
573
-        || (x)==PIX_FMT_GRAY16BE    \
574
-        || (x)==PIX_FMT_GRAY16LE    \
575
-    )
570
+#define isGray(x)                      \
571
+    ((x) == PIX_FMT_GRAY8       ||     \
572
+     (x) == PIX_FMT_Y400A       ||     \
573
+     (x) == PIX_FMT_GRAY16BE    ||     \
574
+     (x) == PIX_FMT_GRAY16LE)
576 575
 #endif
577 576
 
578
-#define isRGBinInt(x)   (           \
579
-           (x)==PIX_FMT_RGB48BE     \
580
-        || (x)==PIX_FMT_RGB48LE     \
581
-        || (x)==PIX_FMT_RGBA64BE    \
582
-        || (x)==PIX_FMT_RGBA64LE    \
583
-        || (x)==PIX_FMT_RGB32       \
584
-        || (x)==PIX_FMT_RGB32_1     \
585
-        || (x)==PIX_FMT_RGB24       \
586
-        || (x)==PIX_FMT_RGB565BE    \
587
-        || (x)==PIX_FMT_RGB565LE    \
588
-        || (x)==PIX_FMT_RGB555BE    \
589
-        || (x)==PIX_FMT_RGB555LE    \
590
-        || (x)==PIX_FMT_RGB444BE    \
591
-        || (x)==PIX_FMT_RGB444LE    \
592
-        || (x)==PIX_FMT_RGB8        \
593
-        || (x)==PIX_FMT_RGB4        \
594
-        || (x)==PIX_FMT_RGB4_BYTE   \
595
-        || (x)==PIX_FMT_MONOBLACK   \
596
-        || (x)==PIX_FMT_MONOWHITE   \
577
+#define isRGBinInt(x) \
578
+    (           \
579
+        (x)==PIX_FMT_RGB48BE   ||   \
580
+        (x)==PIX_FMT_RGB48LE   ||   \
581
+        (x)==PIX_FMT_RGBA64BE  ||   \
582
+        (x)==PIX_FMT_RGBA64LE  ||   \
583
+        (x)==PIX_FMT_RGB32     ||   \
584
+        (x)==PIX_FMT_RGB32_1   ||   \
585
+        (x)==PIX_FMT_RGB24     ||   \
586
+        (x)==PIX_FMT_RGB565BE  ||   \
587
+        (x)==PIX_FMT_RGB565LE  ||   \
588
+        (x)==PIX_FMT_RGB555BE  ||   \
589
+        (x)==PIX_FMT_RGB555LE  ||   \
590
+        (x)==PIX_FMT_RGB444BE  ||   \
591
+        (x)==PIX_FMT_RGB444LE  ||   \
592
+        (x)==PIX_FMT_RGB8      ||   \
593
+        (x)==PIX_FMT_RGB4      ||   \
594
+        (x)==PIX_FMT_RGB4_BYTE ||   \
595
+        (x)==PIX_FMT_MONOBLACK ||   \
596
+        (x)==PIX_FMT_MONOWHITE   \
597 597
     )
598
-#define isBGRinInt(x)   (           \
599
-           (x)==PIX_FMT_BGR48BE     \
600
-        || (x)==PIX_FMT_BGR48LE     \
601
-        || (x)==PIX_FMT_BGRA64BE    \
602
-        || (x)==PIX_FMT_BGRA64LE    \
603
-        || (x)==PIX_FMT_BGR32       \
604
-        || (x)==PIX_FMT_BGR32_1     \
605
-        || (x)==PIX_FMT_BGR24       \
606
-        || (x)==PIX_FMT_BGR565BE    \
607
-        || (x)==PIX_FMT_BGR565LE    \
608
-        || (x)==PIX_FMT_BGR555BE    \
609
-        || (x)==PIX_FMT_BGR555LE    \
610
-        || (x)==PIX_FMT_BGR444BE    \
611
-        || (x)==PIX_FMT_BGR444LE    \
612
-        || (x)==PIX_FMT_BGR8        \
613
-        || (x)==PIX_FMT_BGR4        \
614
-        || (x)==PIX_FMT_BGR4_BYTE   \
615
-        || (x)==PIX_FMT_MONOBLACK   \
616
-        || (x)==PIX_FMT_MONOWHITE   \
598
+#define isBGRinInt(x) \
599
+    (           \
600
+         (x)==PIX_FMT_BGR48BE  ||   \
601
+         (x)==PIX_FMT_BGR48LE  ||   \
602
+         (x)==PIX_FMT_BGRA64BE ||   \
603
+         (x)==PIX_FMT_BGRA64LE ||   \
604
+         (x)==PIX_FMT_BGR32    ||   \
605
+         (x)==PIX_FMT_BGR32_1  ||   \
606
+         (x)==PIX_FMT_BGR24    ||   \
607
+         (x)==PIX_FMT_BGR565BE ||   \
608
+         (x)==PIX_FMT_BGR565LE ||   \
609
+         (x)==PIX_FMT_BGR555BE ||   \
610
+         (x)==PIX_FMT_BGR555LE ||   \
611
+         (x)==PIX_FMT_BGR444BE ||   \
612
+         (x)==PIX_FMT_BGR444LE ||   \
613
+         (x)==PIX_FMT_BGR8     ||   \
614
+         (x)==PIX_FMT_BGR4     ||   \
615
+         (x)==PIX_FMT_BGR4_BYTE||   \
616
+         (x)==PIX_FMT_MONOBLACK||   \
617
+         (x)==PIX_FMT_MONOWHITE   \
617 618
     )
618 619
 
619 620
 #define isRGBinBytes(x) (           \
... ...
@@ -635,10 +647,11 @@ const char *sws_format_name(enum PixelFormat format);
635 635
         || (x)==PIX_FMT_BGR24       \
636 636
     )
637 637
 
638
-#define isAnyRGB(x)     (           \
639
-            isRGBinInt(x)           \
640
-        ||  isBGRinInt(x)           \
641
-        ||  (x)==PIX_FMT_GBR24P     \
638
+#define isAnyRGB(x) \
639
+    (           \
640
+          isRGBinInt(x)       ||    \
641
+          isBGRinInt(x)       ||    \
642
+          (x)==PIX_FMT_GBR24P     \
642 643
     )
643 644
 
644 645
 #define isALPHA(x) \
... ...
@@ -655,15 +668,14 @@ const char *sws_format_name(enum PixelFormat format);
655 655
         ||  isBGRinInt(x)           \
656 656
     )
657 657
 #else
658
-#define isPacked(x) (\
659
-    (av_pix_fmt_descriptors[x].nb_components >= 2 && \
660
-     !(av_pix_fmt_descriptors[x].flags & PIX_FMT_PLANAR)) || \
661
-    (x) == PIX_FMT_PAL8\
662
-    )
658
+#define isPacked(x)                                            \
659
+    ((av_pix_fmt_descriptors[x].nb_components >= 2         &&  \
660
+      !(av_pix_fmt_descriptors[x].flags & PIX_FMT_PLANAR)) ||  \
661
+     (x) == PIX_FMT_PAL8)
663 662
 
664 663
 #endif
665 664
 #define isPlanar(x) \
666
-    (av_pix_fmt_descriptors[x].nb_components >= 2 && \
665
+    (av_pix_fmt_descriptors[x].nb_components >= 2          &&  \
667 666
      (av_pix_fmt_descriptors[x].flags & PIX_FMT_PLANAR))
668 667
 
669 668
 #define usePal(x) ((av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL) || (x) == PIX_FMT_Y400A)
... ...
@@ -129,10 +129,10 @@ const static FormatEntry format_entries[PIX_FMT_NB] = {
129 129
     [PIX_FMT_YUV422P16BE] = { 1 , 1 },
130 130
     [PIX_FMT_YUV444P16LE] = { 1 , 1 },
131 131
     [PIX_FMT_YUV444P16BE] = { 1 , 1 },
132
-    [PIX_FMT_RGB444LE]    = { 0 , 1 },
133
-    [PIX_FMT_RGB444BE]    = { 0 , 1 },
134
-    [PIX_FMT_BGR444LE]    = { 0 , 1 },
135
-    [PIX_FMT_BGR444BE]    = { 0 , 1 },
132
+    [PIX_FMT_RGB444LE]    = { 1 , 1 },
133
+    [PIX_FMT_RGB444BE]    = { 1 , 1 },
134
+    [PIX_FMT_BGR444LE]    = { 1 , 1 },
135
+    [PIX_FMT_BGR444BE]    = { 1 , 1 },
136 136
     [PIX_FMT_Y400A]       = { 1 , 0 },
137 137
     [PIX_FMT_BGR48BE]     = { 1 , 1 },
138 138
     [PIX_FMT_BGR48LE]     = { 1 , 1 },
139 139
new file mode 100644
... ...
@@ -0,0 +1,242 @@
0
+;******************************************************************************
1
+;* x86-optimized input routines; does shuffling of packed
2
+;* YUV formats into individual planes, and converts RGB
3
+;* into YUV planes also.
4
+;* Copyright (c) 2012 Ronald S. Bultje <rsbultje@gmail.com>
5
+;*
6
+;* This file is part of Libav.
7
+;*
8
+;* Libav is free software; you can redistribute it and/or
9
+;* modify it under the terms of the GNU Lesser General Public
10
+;* License as published by the Free Software Foundation; either
11
+;* version 2.1 of the License, or (at your option) any later version.
12
+;*
13
+;* Libav is distributed in the hope that it will be useful,
14
+;* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
+;* Lesser General Public License for more details.
17
+;*
18
+;* You should have received a copy of the GNU Lesser General Public
19
+;* License along with Libav; if not, write to the Free Software
20
+;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
+;******************************************************************************
22
+
23
+%include "x86inc.asm"
24
+%include "x86util.asm"
25
+
26
+SECTION_RODATA
27
+
28
+SECTION .text
29
+
30
+;-----------------------------------------------------------------------------
31
+; YUYV/UYVY/NV12/NV21 packed pixel shuffling.
32
+;
33
+; void <fmt>ToY_<opt>(uint8_t *dst, const uint8_t *src, int w);
34
+; and
35
+; void <fmt>toUV_<opt>(uint8_t *dstU, uint8_t *dstV, const uint8_t *src,
36
+;                      const uint8_t *unused, int w);
37
+;-----------------------------------------------------------------------------
38
+
39
+; %1 = a (aligned) or u (unaligned)
40
+; %2 = yuyv or uyvy
41
+%macro LOOP_YUYV_TO_Y 2
42
+.loop_%1:
43
+    mov%1          m0, [srcq+wq*2]        ; (byte) { Y0, U0, Y1, V0, ... }
44
+    mov%1          m1, [srcq+wq*2+mmsize] ; (byte) { Y8, U4, Y9, V4, ... }
45
+%ifidn %2, yuyv
46
+    pand           m0, m2                 ; (word) { Y0, Y1, ..., Y7 }
47
+    pand           m1, m2                 ; (word) { Y8, Y9, ..., Y15 }
48
+%else ; uyvy
49
+    psrlw          m0, 8                  ; (word) { Y0, Y1, ..., Y7 }
50
+    psrlw          m1, 8                  ; (word) { Y8, Y9, ..., Y15 }
51
+%endif ; yuyv/uyvy
52
+    packuswb       m0, m1                 ; (byte) { Y0, ..., Y15 }
53
+    mova    [dstq+wq], m0
54
+    add            wq, mmsize
55
+    jl .loop_%1
56
+    REP_RET
57
+%endmacro
58
+
59
+; %1 = nr. of XMM registers
60
+; %2 = yuyv or uyvy
61
+; %3 = if specified, it means that unaligned and aligned code in loop
62
+;      will be the same (i.e. YUYV+AVX), and thus we don't need to
63
+;      split the loop in an aligned and unaligned case
64
+%macro YUYV_TO_Y_FN 2-3
65
+cglobal %2ToY, 5, 5, %1, dst, unused0, unused1, src, w
66
+%ifdef ARCH_X86_64
67
+    movsxd         wq, wd
68
+%endif
69
+    add          dstq, wq
70
+%if mmsize == 16
71
+    test         srcq, 15
72
+%endif
73
+    lea          srcq, [srcq+wq*2]
74
+%ifidn %2, yuyv
75
+    pcmpeqb        m2, m2                 ; (byte) { 0xff } x 16
76
+    psrlw          m2, 8                  ; (word) { 0x00ff } x 8
77
+%endif ; yuyv
78
+%if mmsize == 16
79
+    jnz .loop_u_start
80
+    neg            wq
81
+    LOOP_YUYV_TO_Y  a, %2
82
+.loop_u_start:
83
+    neg            wq
84
+    LOOP_YUYV_TO_Y  u, %2
85
+%else ; mmsize == 8
86
+    neg            wq
87
+    LOOP_YUYV_TO_Y  a, %2
88
+%endif ; mmsize == 8/16
89
+%endmacro
90
+
91
+; %1 = a (aligned) or u (unaligned)
92
+; %2 = yuyv or uyvy
93
+%macro LOOP_YUYV_TO_UV 2
94
+.loop_%1:
95
+%ifidn %2, yuyv
96
+    mov%1          m0, [srcq+wq*4]        ; (byte) { Y0, U0, Y1, V0, ... }
97
+    mov%1          m1, [srcq+wq*4+mmsize] ; (byte) { Y8, U4, Y9, V4, ... }
98
+    psrlw          m0, 8                  ; (word) { U0, V0, ..., U3, V3 }
99
+    psrlw          m1, 8                  ; (word) { U4, V4, ..., U7, V7 }
100
+%else ; uyvy
101
+%if cpuflag(avx)
102
+    vpand          m0, m2, [srcq+wq*4]        ; (word) { U0, V0, ..., U3, V3 }
103
+    vpand          m1, m2, [srcq+wq*4+mmsize] ; (word) { U4, V4, ..., U7, V7 }
104
+%else
105
+    mov%1          m0, [srcq+wq*4]        ; (byte) { Y0, U0, Y1, V0, ... }
106
+    mov%1          m1, [srcq+wq*4+mmsize] ; (byte) { Y8, U4, Y9, V4, ... }
107
+    pand           m0, m2                 ; (word) { U0, V0, ..., U3, V3 }
108
+    pand           m1, m2                 ; (word) { U4, V4, ..., U7, V7 }
109
+%endif
110
+%endif ; yuyv/uyvy
111
+    packuswb       m0, m1                 ; (byte) { U0, V0, ..., U7, V7 }
112
+    pand           m1, m0, m2             ; (word) { U0, U1, ..., U7 }
113
+    psrlw          m0, 8                  ; (word) { V0, V1, ..., V7 }
114
+%if mmsize == 16
115
+    packuswb       m1, m0                 ; (byte) { U0, ... U7, V1, ... V7 }
116
+    movh   [dstUq+wq], m1
117
+    movhps [dstVq+wq], m1
118
+%else ; mmsize == 8
119
+    packuswb       m1, m1                 ; (byte) { U0, ... U3 }
120
+    packuswb       m0, m0                 ; (byte) { V0, ... V3 }
121
+    movh   [dstUq+wq], m1
122
+    movh   [dstVq+wq], m0
123
+%endif ; mmsize == 8/16
124
+    add            wq, mmsize / 2
125
+    jl .loop_%1
126
+    REP_RET
127
+%endmacro
128
+
129
+; %1 = nr. of XMM registers
130
+; %2 = yuyv or uyvy
131
+; %3 = if specified, it means that unaligned and aligned code in loop
132
+;      will be the same (i.e. UYVY+AVX), and thus we don't need to
133
+;      split the loop in an aligned and unaligned case
134
+%macro YUYV_TO_UV_FN 2-3
135
+cglobal %2ToUV, 4, 5, %1, dstU, dstV, unused, src, w
136
+%ifdef ARCH_X86_64
137
+    movsxd         wq, r5m
138
+%else ; x86-32
139
+    mov            wq, r5m
140
+%endif
141
+    add         dstUq, wq
142
+    add         dstVq, wq
143
+%if mmsize == 16 && %0 == 2
144
+    test         srcq, 15
145
+%endif
146
+    lea          srcq, [srcq+wq*4]
147
+    pcmpeqb        m2, m2                 ; (byte) { 0xff } x 16
148
+    psrlw          m2, 8                  ; (word) { 0x00ff } x 8
149
+    ; NOTE: if uyvy+avx, u/a are identical
150
+%if mmsize == 16 && %0 == 2
151
+    jnz .loop_u_start
152
+    neg            wq
153
+    LOOP_YUYV_TO_UV a, %2
154
+.loop_u_start:
155
+    neg            wq
156
+    LOOP_YUYV_TO_UV u, %2
157
+%else ; mmsize == 8
158
+    neg            wq
159
+    LOOP_YUYV_TO_UV a, %2
160
+%endif ; mmsize == 8/16
161
+%endmacro
162
+
163
+; %1 = a (aligned) or u (unaligned)
164
+; %2 = nv12 or nv21
165
+%macro LOOP_NVXX_TO_UV 2
166
+.loop_%1:
167
+    mov%1          m0, [srcq+wq*2]        ; (byte) { U0, V0, U1, V1, ... }
168
+    mov%1          m1, [srcq+wq*2+mmsize] ; (byte) { U8, V8, U9, V9, ... }
169
+    pand           m2, m0, m5             ; (word) { U0, U1, ..., U7 }
170
+    pand           m3, m1, m5             ; (word) { U8, U9, ..., U15 }
171
+    psrlw          m0, 8                  ; (word) { V0, V1, ..., V7 }
172
+    psrlw          m1, 8                  ; (word) { V8, V9, ..., V15 }
173
+    packuswb       m2, m3                 ; (byte) { U0, ..., U15 }
174
+    packuswb       m0, m1                 ; (byte) { V0, ..., V15 }
175
+%ifidn %2, nv12
176
+    mova   [dstUq+wq], m2
177
+    mova   [dstVq+wq], m0
178
+%else ; nv21
179
+    mova   [dstVq+wq], m2
180
+    mova   [dstUq+wq], m0
181
+%endif ; nv12/21
182
+    add            wq, mmsize
183
+    jl .loop_%1
184
+    REP_RET
185
+%endmacro
186
+
187
+; %1 = nr. of XMM registers
188
+; %2 = nv12 or nv21
189
+%macro NVXX_TO_UV_FN 2
190
+cglobal %2ToUV, 4, 5, %1, dstU, dstV, unused, src, w
191
+%ifdef ARCH_X86_64
192
+    movsxd         wq, r5m
193
+%else ; x86-32
194
+    mov            wq, r5m
195
+%endif
196
+    add         dstUq, wq
197
+    add         dstVq, wq
198
+%if mmsize == 16
199
+    test         srcq, 15
200
+%endif
201
+    lea          srcq, [srcq+wq*2]
202
+    pcmpeqb        m5, m5                 ; (byte) { 0xff } x 16
203
+    psrlw          m5, 8                  ; (word) { 0x00ff } x 8
204
+%if mmsize == 16
205
+    jnz .loop_u_start
206
+    neg            wq
207
+    LOOP_NVXX_TO_UV a, %2
208
+.loop_u_start:
209
+    neg            wq
210
+    LOOP_NVXX_TO_UV u, %2
211
+%else ; mmsize == 8
212
+    neg            wq
213
+    LOOP_NVXX_TO_UV a, %2
214
+%endif ; mmsize == 8/16
215
+%endmacro
216
+
217
+%ifdef ARCH_X86_32
218
+INIT_MMX mmx
219
+YUYV_TO_Y_FN  0, yuyv
220
+YUYV_TO_Y_FN  0, uyvy
221
+YUYV_TO_UV_FN 0, yuyv
222
+YUYV_TO_UV_FN 0, uyvy
223
+NVXX_TO_UV_FN 0, nv12
224
+NVXX_TO_UV_FN 0, nv21
225
+%endif
226
+
227
+INIT_XMM sse2
228
+YUYV_TO_Y_FN  3, yuyv
229
+YUYV_TO_Y_FN  2, uyvy
230
+YUYV_TO_UV_FN 3, yuyv
231
+YUYV_TO_UV_FN 3, uyvy
232
+NVXX_TO_UV_FN 5, nv12
233
+NVXX_TO_UV_FN 5, nv21
234
+
235
+INIT_XMM avx
236
+; in theory, we could write a yuy2-to-y using vpand (i.e. AVX), but
237
+; that's not faster in practice
238
+YUYV_TO_UV_FN 3, yuyv
239
+YUYV_TO_UV_FN 3, uyvy, 1
240
+NVXX_TO_UV_FN 5, nv12
241
+NVXX_TO_UV_FN 5, nv21
... ...
@@ -307,6 +307,26 @@ VSCALE_FUNCS(sse2, sse2);
307 307
 VSCALE_FUNC(16, sse4);
308 308
 VSCALE_FUNCS(avx, avx);
309 309
 
310
+#define INPUT_UV_FUNC(fmt, opt) \
311
+extern void ff_ ## fmt ## ToUV_ ## opt(uint8_t *dstU, uint8_t *dstV, \
312
+                                       const uint8_t *src, const uint8_t *unused1, \
313
+                                       int w, uint32_t *unused2)
314
+#define INPUT_FUNC(fmt, opt) \
315
+extern void ff_ ## fmt ## ToY_  ## opt(uint8_t *dst, const uint8_t *src, \
316
+                                       int w, uint32_t *unused); \
317
+    INPUT_UV_FUNC(fmt, opt)
318
+#define INPUT_FUNCS(opt) \
319
+    INPUT_FUNC(uyvy, opt); \
320
+    INPUT_FUNC(yuyv, opt); \
321
+    INPUT_UV_FUNC(nv12, opt); \
322
+    INPUT_UV_FUNC(nv21, opt)
323
+
324
+#if ARCH_X86_32
325
+INPUT_FUNCS(mmx);
326
+#endif
327
+INPUT_FUNCS(sse2);
328
+INPUT_FUNCS(avx);
329
+
310 330
 void ff_sws_init_swScale_mmx(SwsContext *c)
311 331
 {
312 332
     int cpu_flags = av_get_cpu_flags();
... ...
@@ -366,6 +386,30 @@ switch(c->dstBpc){ \
366 366
         ASSIGN_MMX_SCALE_FUNC(c->hyScale, c->hLumFilterSize, mmx, mmx);
367 367
         ASSIGN_MMX_SCALE_FUNC(c->hcScale, c->hChrFilterSize, mmx, mmx);
368 368
         ASSIGN_VSCALE_FUNC(c->yuv2plane1, mmx, mmx2, cpu_flags & AV_CPU_FLAG_MMX2);
369
+
370
+        switch (c->srcFormat) {
371
+        case PIX_FMT_Y400A:
372
+            c->lumToYV12 = ff_yuyvToY_mmx;
373
+            if (c->alpPixBuf)
374
+                c->alpToYV12 = ff_uyvyToY_mmx;
375
+            break;
376
+        case PIX_FMT_YUYV422:
377
+            c->lumToYV12 = ff_yuyvToY_mmx;
378
+            c->chrToYV12 = ff_yuyvToUV_mmx;
379
+            break;
380
+        case PIX_FMT_UYVY422:
381
+            c->lumToYV12 = ff_uyvyToY_mmx;
382
+            c->chrToYV12 = ff_uyvyToUV_mmx;
383
+            break;
384
+        case PIX_FMT_NV12:
385
+            c->chrToYV12 = ff_nv12ToUV_mmx;
386
+            break;
387
+        case PIX_FMT_NV21:
388
+            c->chrToYV12 = ff_nv21ToUV_mmx;
389
+            break;
390
+        default:
391
+            break;
392
+        }
369 393
     }
370 394
     if (cpu_flags & AV_CPU_FLAG_MMX2) {
371 395
         ASSIGN_VSCALEX_FUNC(c->yuv2planeX, mmx2,);
... ...
@@ -384,6 +428,28 @@ switch(c->dstBpc){ \
384 384
         ASSIGN_SSE_SCALE_FUNC(c->hcScale, c->hChrFilterSize, sse2, sse2);
385 385
         ASSIGN_VSCALEX_FUNC(c->yuv2planeX, sse2,);
386 386
         ASSIGN_VSCALE_FUNC(c->yuv2plane1, sse2, sse2, 1);
387
+
388
+        switch (c->srcFormat) {
389
+        case PIX_FMT_Y400A:
390
+            c->lumToYV12 = ff_yuyvToY_sse2;
391
+            if (c->alpPixBuf)
392
+                c->alpToYV12 = ff_uyvyToY_sse2;
393
+            break;
394
+        case PIX_FMT_YUYV422:
395
+            c->lumToYV12 = ff_yuyvToY_sse2;
396
+            c->chrToYV12 = ff_yuyvToUV_sse2;
397
+            break;
398
+        case PIX_FMT_UYVY422:
399
+            c->lumToYV12 = ff_uyvyToY_sse2;
400
+            c->chrToYV12 = ff_uyvyToUV_sse2;
401
+            break;
402
+        case PIX_FMT_NV12:
403
+            c->chrToYV12 = ff_nv12ToUV_sse2;
404
+            break;
405
+        case PIX_FMT_NV21:
406
+            c->chrToYV12 = ff_nv21ToUV_sse2;
407
+            break;
408
+        }
387 409
     }
388 410
     if (cpu_flags & AV_CPU_FLAG_SSSE3) {
389 411
         ASSIGN_SSE_SCALE_FUNC(c->hyScale, c->hLumFilterSize, ssse3, ssse3);
... ...
@@ -402,6 +468,23 @@ switch(c->dstBpc){ \
402 402
     if (cpu_flags & AV_CPU_FLAG_AVX) {
403 403
         ASSIGN_VSCALEX_FUNC(c->yuv2planeX, avx,);
404 404
         ASSIGN_VSCALE_FUNC(c->yuv2plane1, avx, avx, 1);
405
+
406
+        switch (c->srcFormat) {
407
+        case PIX_FMT_YUYV422:
408
+            c->chrToYV12 = ff_yuyvToUV_avx;
409
+            break;
410
+        case PIX_FMT_UYVY422:
411
+            c->chrToYV12 = ff_uyvyToUV_avx;
412
+            break;
413
+        case PIX_FMT_NV12:
414
+            c->chrToYV12 = ff_nv12ToUV_avx;
415
+            break;
416
+        case PIX_FMT_NV21:
417
+            c->chrToYV12 = ff_nv21ToUV_avx;
418
+            break;
419
+        default:
420
+            break;
421
+        }
405 422
     }
406 423
 #endif
407 424
 }
... ...
@@ -1435,147 +1435,6 @@ static void RENAME(yuv2yuyv422_1)(SwsContext *c, const int16_t *buf0,
1435 1435
     }
1436 1436
 }
1437 1437
 
1438
-#if !COMPILE_TEMPLATE_MMX2
1439
-//FIXME yuy2* can read up to 7 samples too much
1440
-
1441
-static void RENAME(yuy2ToY)(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2,
1442
-                            int width, uint32_t *unused)
1443
-{
1444
-    __asm__ volatile(
1445
-        "movq "MANGLE(bm01010101)", %%mm2           \n\t"
1446
-        "mov                    %0, %%"REG_a"       \n\t"
1447
-        "1:                                         \n\t"
1448
-        "movq    (%1, %%"REG_a",2), %%mm0           \n\t"
1449
-        "movq   8(%1, %%"REG_a",2), %%mm1           \n\t"
1450
-        "pand                %%mm2, %%mm0           \n\t"
1451
-        "pand                %%mm2, %%mm1           \n\t"
1452
-        "packuswb            %%mm1, %%mm0           \n\t"
1453
-        "movq                %%mm0, (%2, %%"REG_a") \n\t"
1454
-        "add                    $8, %%"REG_a"       \n\t"
1455
-        " js                    1b                  \n\t"
1456
-        : : "g" ((x86_reg)-width), "r" (src+width*2), "r" (dst+width)
1457
-        : "%"REG_a
1458
-    );
1459
-}
1460
-
1461
-static void RENAME(yuy2ToUV)(uint8_t *dstU, uint8_t *dstV,
1462
-                             const uint8_t *unused1, const uint8_t *src1, const uint8_t *src2,
1463
-                             int width, uint32_t *unused)
1464
-{
1465
-    __asm__ volatile(
1466
-        "movq "MANGLE(bm01010101)", %%mm4           \n\t"
1467
-        "mov                    %0, %%"REG_a"       \n\t"
1468
-        "1:                                         \n\t"
1469
-        "movq    (%1, %%"REG_a",4), %%mm0           \n\t"
1470
-        "movq   8(%1, %%"REG_a",4), %%mm1           \n\t"
1471
-        "psrlw                  $8, %%mm0           \n\t"
1472
-        "psrlw                  $8, %%mm1           \n\t"
1473
-        "packuswb            %%mm1, %%mm0           \n\t"
1474
-        "movq                %%mm0, %%mm1           \n\t"
1475
-        "psrlw                  $8, %%mm0           \n\t"
1476
-        "pand                %%mm4, %%mm1           \n\t"
1477
-        "packuswb            %%mm0, %%mm0           \n\t"
1478
-        "packuswb            %%mm1, %%mm1           \n\t"
1479
-        "movd                %%mm0, (%3, %%"REG_a") \n\t"
1480
-        "movd                %%mm1, (%2, %%"REG_a") \n\t"
1481
-        "add                    $4, %%"REG_a"       \n\t"
1482
-        " js                    1b                  \n\t"
1483
-        : : "g" ((x86_reg)-width), "r" (src1+width*4), "r" (dstU+width), "r" (dstV+width)
1484
-        : "%"REG_a
1485
-    );
1486
-    assert(src1 == src2);
1487
-}
1488
-
1489
-/* This is almost identical to the previous, end exists only because
1490
- * yuy2ToY/UV)(dst, src+1, ...) would have 100% unaligned accesses. */
1491
-static void RENAME(uyvyToY)(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2,
1492
-                            int width, uint32_t *unused)
1493
-{
1494
-    __asm__ volatile(
1495
-        "mov                  %0, %%"REG_a"         \n\t"
1496
-        "1:                                         \n\t"
1497
-        "movq  (%1, %%"REG_a",2), %%mm0             \n\t"
1498
-        "movq 8(%1, %%"REG_a",2), %%mm1             \n\t"
1499
-        "psrlw                $8, %%mm0             \n\t"
1500
-        "psrlw                $8, %%mm1             \n\t"
1501
-        "packuswb          %%mm1, %%mm0             \n\t"
1502
-        "movq              %%mm0, (%2, %%"REG_a")   \n\t"
1503
-        "add                  $8, %%"REG_a"         \n\t"
1504
-        " js                  1b                    \n\t"
1505
-        : : "g" ((x86_reg)-width), "r" (src+width*2), "r" (dst+width)
1506
-        : "%"REG_a
1507
-    );
1508
-}
1509
-
1510
-static void RENAME(uyvyToUV)(uint8_t *dstU, uint8_t *dstV,
1511
-                             const uint8_t *unused1, const uint8_t *src1, const uint8_t *src2,
1512
-                             int width, uint32_t *unused)
1513
-{
1514
-    __asm__ volatile(
1515
-        "movq "MANGLE(bm01010101)", %%mm4           \n\t"
1516
-        "mov                    %0, %%"REG_a"       \n\t"
1517
-        "1:                                         \n\t"
1518
-        "movq    (%1, %%"REG_a",4), %%mm0           \n\t"
1519
-        "movq   8(%1, %%"REG_a",4), %%mm1           \n\t"
1520
-        "pand                %%mm4, %%mm0           \n\t"
1521
-        "pand                %%mm4, %%mm1           \n\t"
1522
-        "packuswb            %%mm1, %%mm0           \n\t"
1523
-        "movq                %%mm0, %%mm1           \n\t"
1524
-        "psrlw                  $8, %%mm0           \n\t"
1525
-        "pand                %%mm4, %%mm1           \n\t"
1526
-        "packuswb            %%mm0, %%mm0           \n\t"
1527
-        "packuswb            %%mm1, %%mm1           \n\t"
1528
-        "movd                %%mm0, (%3, %%"REG_a") \n\t"
1529
-        "movd                %%mm1, (%2, %%"REG_a") \n\t"
1530
-        "add                    $4, %%"REG_a"       \n\t"
1531
-        " js                    1b                  \n\t"
1532
-        : : "g" ((x86_reg)-width), "r" (src1+width*4), "r" (dstU+width), "r" (dstV+width)
1533
-        : "%"REG_a
1534
-    );
1535
-    assert(src1 == src2);
1536
-}
1537
-
1538
-static av_always_inline void RENAME(nvXXtoUV)(uint8_t *dst1, uint8_t *dst2,
1539
-                                              const uint8_t *src, int width)
1540
-{
1541
-    __asm__ volatile(
1542
-        "movq "MANGLE(bm01010101)", %%mm4           \n\t"
1543
-        "mov                    %0, %%"REG_a"       \n\t"
1544
-        "1:                                         \n\t"
1545
-        "movq    (%1, %%"REG_a",2), %%mm0           \n\t"
1546
-        "movq   8(%1, %%"REG_a",2), %%mm1           \n\t"
1547
-        "movq                %%mm0, %%mm2           \n\t"
1548
-        "movq                %%mm1, %%mm3           \n\t"
1549
-        "pand                %%mm4, %%mm0           \n\t"
1550
-        "pand                %%mm4, %%mm1           \n\t"
1551
-        "psrlw                  $8, %%mm2           \n\t"
1552
-        "psrlw                  $8, %%mm3           \n\t"
1553
-        "packuswb            %%mm1, %%mm0           \n\t"
1554
-        "packuswb            %%mm3, %%mm2           \n\t"
1555
-        "movq                %%mm0, (%2, %%"REG_a") \n\t"
1556
-        "movq                %%mm2, (%3, %%"REG_a") \n\t"
1557
-        "add                    $8, %%"REG_a"       \n\t"
1558
-        " js                    1b                  \n\t"
1559
-        : : "g" ((x86_reg)-width), "r" (src+width*2), "r" (dst1+width), "r" (dst2+width)
1560
-        : "%"REG_a
1561
-    );
1562
-}
1563
-
1564
-static void RENAME(nv12ToUV)(uint8_t *dstU, uint8_t *dstV,
1565
-                             const uint8_t *unused1, const uint8_t *src1, const uint8_t *src2,
1566
-                             int width, uint32_t *unused)
1567
-{
1568
-    RENAME(nvXXtoUV)(dstU, dstV, src1, width);
1569
-}
1570
-
1571
-static void RENAME(nv21ToUV)(uint8_t *dstU, uint8_t *dstV,
1572
-                             const uint8_t *unused1, const uint8_t *src1, const uint8_t *src2,
1573
-                             int width, uint32_t *unused)
1574
-{
1575
-    RENAME(nvXXtoUV)(dstV, dstU, src1, width);
1576
-}
1577
-#endif /* !COMPILE_TEMPLATE_MMX2 */
1578
-
1579 1438
 static av_always_inline void RENAME(bgr24ToY_mmx)(int16_t *dst, const uint8_t *src,
1580 1439
                                                   int width, enum PixelFormat srcFormat)
1581 1440
 {
... ...
@@ -1927,15 +1786,6 @@ static av_cold void RENAME(sws_init_swScale)(SwsContext *c)
1927 1927
 #endif /* COMPILE_TEMPLATE_MMX2 */
1928 1928
     }
1929 1929
 
1930
-#if !COMPILE_TEMPLATE_MMX2
1931
-    switch(srcFormat) {
1932
-        case PIX_FMT_YUYV422  : c->chrToYV12 = RENAME(yuy2ToUV); break;
1933
-        case PIX_FMT_UYVY422  : c->chrToYV12 = RENAME(uyvyToUV); break;
1934
-        case PIX_FMT_NV12     : c->chrToYV12 = RENAME(nv12ToUV); break;
1935
-        case PIX_FMT_NV21     : c->chrToYV12 = RENAME(nv21ToUV); break;
1936
-        default: break;
1937
-    }
1938
-#endif /* !COMPILE_TEMPLATE_MMX2 */
1939 1930
     if (!c->chrSrcHSubSample) {
1940 1931
         switch(srcFormat) {
1941 1932
         case PIX_FMT_BGR24  : c->chrToYV12 = RENAME(bgr24ToUV); break;
... ...
@@ -1945,21 +1795,8 @@ static av_cold void RENAME(sws_init_swScale)(SwsContext *c)
1945 1945
     }
1946 1946
 
1947 1947
     switch (srcFormat) {
1948
-#if !COMPILE_TEMPLATE_MMX2
1949
-    case PIX_FMT_YUYV422  :
1950
-    case PIX_FMT_Y400A    : c->lumToYV12 = RENAME(yuy2ToY); break;
1951
-    case PIX_FMT_UYVY422  : c->lumToYV12 = RENAME(uyvyToY); break;
1952
-#endif /* !COMPILE_TEMPLATE_MMX2 */
1953 1948
     case PIX_FMT_BGR24    : c->lumToYV12 = RENAME(bgr24ToY); break;
1954 1949
     case PIX_FMT_RGB24    : c->lumToYV12 = RENAME(rgb24ToY); break;
1955 1950
     default: break;
1956 1951
     }
1957
-#if !COMPILE_TEMPLATE_MMX2
1958
-    if (c->alpPixBuf) {
1959
-        switch (srcFormat) {
1960
-        case PIX_FMT_Y400A  : c->alpToYV12 = RENAME(yuy2ToY); break;
1961
-        default: break;
1962
-        }
1963
-    }
1964
-#endif /* !COMPILE_TEMPLATE_MMX2 */
1965 1952
 }
... ...
@@ -14,18 +14,34 @@ FATE_AAC += fate-aac-al07_96
14 14
 fate-aac-al07_96: CMD = pcm -i $(SAMPLES)/aac/al07_96.mp4
15 15
 fate-aac-al07_96: REF = $(SAMPLES)/aac/al07_96.s16
16 16
 
17
+FATE_AAC += fate-aac-al15_44
18
+fate-aac-al15_44: CMD = pcm -i $(SAMPLES)/aac/al15_44.mp4
19
+fate-aac-al15_44: REF = $(SAMPLES)/aac/al15_44.s16
20
+
17 21
 FATE_AAC += fate-aac-al17_44
18 22
 fate-aac-al17_44: CMD = pcm -i $(SAMPLES)/aac/al17_44.mp4
19 23
 fate-aac-al17_44: REF = $(SAMPLES)/aac/al17_44.s16
20 24
 
25
+FATE_AAC += fate-aac-al18_44
26
+fate-aac-al18_44: CMD = pcm -i $(SAMPLES)/aac/al18_44.mp4
27
+fate-aac-al18_44: REF = $(SAMPLES)/aac/al18_44.s16
28
+
21 29
 FATE_AAC += fate-aac-am00_88
22 30
 fate-aac-am00_88: CMD = pcm -i $(SAMPLES)/aac/am00_88.mp4
23 31
 fate-aac-am00_88: REF = $(SAMPLES)/aac/am00_88.s16
24 32
 
33
+FATE_AAC += fate-aac-am05_44
34
+fate-aac-am05_44: CMD = pcm -i $(SAMPLES)/aac/am05_44.mp4
35
+fate-aac-am05_44: REF = $(SAMPLES)/aac/am05_44.s16
36
+
25 37
 FATE_AAC += fate-aac-al_sbr_hq_cm_48_2
26 38
 fate-aac-al_sbr_hq_cm_48_2: CMD = pcm -i $(SAMPLES)/aac/al_sbr_cm_48_2.mp4
27 39
 fate-aac-al_sbr_hq_cm_48_2: REF = $(SAMPLES)/aac/al_sbr_hq_cm_48_2.s16
28 40
 
41
+FATE_AAC += fate-aac-al_sbr_hq_cm_48_5.1
42
+fate-aac-al_sbr_hq_cm_48_5.1: CMD = pcm -i $(SAMPLES)/aac/al_sbr_cm_48_5.1.mp4
43
+fate-aac-al_sbr_hq_cm_48_5.1: REF = $(SAMPLES)/aac/al_sbr_hq_cm_48_5.1.s16
44
+
29 45
 FATE_AAC += fate-aac-al_sbr_ps_06_ur
30 46
 fate-aac-al_sbr_ps_06_ur: CMD = pcm -i $(SAMPLES)/aac/al_sbr_ps_06_new.mp4
31 47
 fate-aac-al_sbr_ps_06_ur: REF = $(SAMPLES)/aac/al_sbr_ps_06_ur.s16
... ...
@@ -79,11 +79,20 @@ fate-sierra-vmd: CMD = framecrc -i $(SAMPLES)/vmd/12.vmd -vsync 0 -pix_fmt rgb24
79 79
 FATE_DEMUX += fate-siff
80 80
 fate-siff: CMD = framecrc -i $(SAMPLES)/SIFF/INTRO_B.VB -t 3 -pix_fmt rgb24
81 81
 
82
+FATE_DEMUX += fate-smjpeg
83
+fate-smjpeg: CMD = framecrc -i $(SAMPLES)/smjpeg/scenwin.mjpg -vcodec copy
84
+
82 85
 FATE_DEMUX += fate-westwood-aud
83 86
 fate-westwood-aud: CMD = md5 -i $(SAMPLES)/westwood-aud/excellent.aud -f s16le
84 87
 
88
+FATE_DEMUX += fate-wtv-demux
89
+fate-wtv-demux: CMD = framecrc -i $(SAMPLES)/wtv/law-and-order-partial.wtv -vcodec copy -acodec copy
90
+
85 91
 FATE_DEMUX += fate-xmv-demux
86 92
 fate-xmv-demux: CMD = framecrc -i $(SAMPLES)/xmv/logos1p.fmv -vcodec copy -acodec copy
87 93
 
94
+FATE_DEMUX += fate-xwma-demux
95
+fate-xwma-demux: CMD = crc -i $(SAMPLES)/xwma/ergon.xwma -acodec copy
96
+
88 97
 FATE_TESTS += $(FATE_DEMUX)
89 98
 fate-demux: $(FATE_DEMUX)
... ...
@@ -29,5 +29,8 @@ fate-vc1_sa10091: CMD = framecrc -i $(SAMPLES)/vc1/SA10091.vc1
29 29
 FATE_MICROSOFT += fate-vc1_sa20021
30 30
 fate-vc1_sa20021: CMD = framecrc -i $(SAMPLES)/vc1/SA20021.vc1
31 31
 
32
+FATE_MICROSOFT += fate-vc1-ism
33
+fate-vc1-ism: CMD = framecrc -i $(SAMPLES)/isom/vc1-wmapro.ism -an
34
+
32 35
 FATE_TESTS += $(FATE_MICROSOFT)
33 36
 fate-microsoft: $(FATE_MICROSOFT)
... ...
@@ -49,6 +49,9 @@ fate-cvid: CMD = framecrc -i $(SAMPLES)/cvid/laracroft-cinepak-partial.avi -an
49 49
 FATE_VIDEO += fate-cvid-palette
50 50
 fate-cvid-palette: CMD = framecrc -i $(SAMPLES)/cvid/catfight-cvid-pal8-partial.mov -pix_fmt rgb24 -an
51 51
 
52
+FATE_VIDEO += fate-cvid-grayscale
53
+fate-cvid-grayscale: CMD = framecrc -i $(SAMPLES)/cvid/pcitva15.avi -an
54
+
52 55
 FATE_VIDEO += fate-cyberia-c93
53 56
 fate-cyberia-c93: CMD = framecrc -i $(SAMPLES)/cyberia-c93/intro1.c93 -t 3 -pix_fmt rgb24
54 57
 
... ...
@@ -8,6 +8,11 @@ fate-wmapro-5.1: CMD = pcm -i $(SAMPLES)/wmapro/latin_192_mulitchannel_cut.wma
8 8
 fate-wmapro-5.1: CMP = oneoff
9 9
 fate-wmapro-5.1: REF = $(SAMPLES)/wmapro/latin_192_mulitchannel_cut.pcm
10 10
 
11
+FATE_WMA += fate-wmapro-ism
12
+fate-wmapro-ism: CMD = pcm -i $(SAMPLES)/isom/vc1-wmapro.ism -vn
13
+fate-wmapro-ism: CMP = oneoff
14
+fate-wmapro-ism: REF = $(SAMPLES)/isom/vc1-wmapro.pcm
15
+
11 16
 FATE_WMA += fate-wmavoice-7k
12 17
 fate-wmavoice-7k: CMD = pcm -i $(SAMPLES)/wmavoice/streaming_CBR-7K.wma
13 18
 fate-wmavoice-7k: CMP = stddev
14 19
new file mode 100644
... ...
@@ -0,0 +1,152 @@
0
+0, 0, 11300, 0x46c78923
1
+0, 17921, 11300, 0x3f2a1175
2
+0, 35842, 11300, 0x722de221
3
+0, 53763, 11300, 0x01746b88
4
+0, 71684, 11300, 0x549587a7
5
+0, 89605, 11300, 0x843ab943
6
+0, 107526, 11300, 0x62fdee48
7
+0, 125447, 11300, 0x74a62867
8
+0, 143368, 11300, 0x35a20e2f
9
+0, 161289, 11300, 0x4e9ef54d
10
+0, 179210, 11300, 0xec7201f5
11
+0, 197131, 11300, 0x363bfe27
12
+0, 215052, 11300, 0x2aaab418
13
+0, 232973, 11300, 0x6a48ab3f
14
+0, 250894, 11300, 0x3fecea34
15
+0, 268815, 11300, 0xa371f55e
16
+0, 286736, 11300, 0xa86b147c
17
+0, 304657, 11300, 0x49e9206e
18
+0, 322578, 11300, 0x6c9a2155
19
+0, 340499, 11300, 0x2c8a4798
20
+0, 358420, 11300, 0x3485676c
21
+0, 376341, 11300, 0xb0b293f2
22
+0, 394262, 11300, 0xe4a9b068
23
+0, 412183, 11300, 0xd68d0556
24
+0, 430104, 11300, 0xc28e5193
25
+0, 448025, 11300, 0xf6948483
26
+0, 465945, 11300, 0xf21fbf57
27
+0, 483866, 11300, 0x8345eb44
28
+0, 501787, 11300, 0x8124f045
29
+0, 519708, 11300, 0x18e31f10
30
+0, 537629, 11300, 0xdb1943fc
31
+0, 555550, 11300, 0x8701699f
32
+0, 573471, 11300, 0xd7b18550
33
+0, 591392, 11300, 0xa56faccc
34
+0, 609313, 11300, 0xf8bcc17c
35
+0, 627234, 11300, 0x446acab9
36
+0, 645155, 11300, 0x755fd295
37
+0, 663076, 11300, 0x92e3d100
38
+0, 680997, 11300, 0x54895bb3
39
+0, 698918, 11300, 0xd18bffda
40
+0, 716839, 11300, 0x480dbe4f
41
+0, 734760, 11300, 0x49ea9dbe
42
+0, 752681, 11300, 0x00d3a003
43
+0, 770602, 11300, 0xda7bbfb2
44
+0, 788523, 11300, 0x9700d9c2
45
+0, 806444, 11300, 0xa0a9e490
46
+0, 824365, 11300, 0x00eb0979
47
+0, 842286, 11300, 0x32b04630
48
+0, 860207, 11300, 0xdfb73e51
49
+0, 878128, 11300, 0x3d8e4f96
50
+0, 896049, 11300, 0x2ca83271
51
+0, 913970, 11300, 0xb5b123c0
52
+0, 931891, 11300, 0x8a570e58
53
+0, 949812, 11300, 0xc6c805bc
54
+0, 967733, 11300, 0x27caf7a5
55
+0, 985654, 11300, 0x5319ecb0
56
+0, 1003575, 11300, 0x5471e3fd
57
+0, 1021496, 11300, 0x6d68a6f4
58
+0, 1039417, 11300, 0x872b7194
59
+0, 1057338, 11300, 0x007c36bd
60
+0, 1075259, 11300, 0x2714f1b5
61
+0, 1093180, 11300, 0x6c8eb50f
62
+0, 1111101, 11300, 0xf5d57be8
63
+0, 1129022, 11300, 0x981f412b
64
+0, 1146943, 11300, 0x1a9804a1
65
+0, 1164864, 11300, 0xf0c1d24a
66
+0, 1182785, 11300, 0xa70a9d9b
67
+0, 1200706, 11300, 0x8c466876
68
+0, 1218627, 11300, 0xcf2e32df
69
+0, 1236548, 11300, 0xcb8cfebf
70
+0, 1254469, 11300, 0xb961ca99
71
+0, 1272390, 11300, 0x666d9619
72
+0, 1290311, 11300, 0x84bf5b55
73
+0, 1308232, 11300, 0xbfa22ccc
74
+0, 1326153, 11300, 0xcde41849
75
+0, 1344074, 11300, 0x71372dcd
76
+0, 1361994, 11300, 0x13402cfd
77
+0, 1379915, 11300, 0xdebdd321
78
+0, 1397836, 11300, 0xdda66de1
79
+0, 1415757, 11300, 0x7f4bb682
80
+0, 1433678, 11300, 0xf67fd528
81
+0, 1451599, 11300, 0xe739ff8c
82
+0, 1469520, 11300, 0x2e131774
83
+0, 1487441, 11300, 0xfa942811
84
+0, 1505362, 11300, 0x0cd93ac2
85
+0, 1523283, 11300, 0xd0445e0e
86
+0, 1541204, 11300, 0x3f3497c7
87
+0, 1559125, 11300, 0x11b5bd2c
88
+0, 1577046, 11300, 0xccd5e62a
89
+0, 1594967, 11300, 0xa9d4fcb5
90
+0, 1612888, 11300, 0x34aa1a03
91
+0, 1630809, 11300, 0x1ce6299e
92
+0, 1648730, 11300, 0x661c2745
93
+0, 1666651, 11300, 0x27d8a8b3
94
+0, 1684572, 11300, 0x9eb07467
95
+0, 1702493, 11300, 0x128374d2
96
+0, 1720414, 11300, 0x05c36ff5
97
+0, 1738335, 11300, 0x8a136bde
98
+0, 1756256, 11300, 0x15c47c99
99
+0, 1774177, 11300, 0xcc4a93f4
100
+0, 1792098, 11300, 0x19529b2b
101
+0, 1810019, 11300, 0x9943c076
102
+0, 1827940, 11300, 0xf898e583
103
+0, 1845861, 11300, 0x40f71f94
104
+0, 1863782, 11300, 0x5b604afb
105
+0, 1881703, 11300, 0x8c176af4
106
+0, 1899624, 11300, 0x0f1a6216
107
+0, 1917545, 11300, 0x38bbd13d
108
+0, 1935466, 11300, 0x90c8d1fc
109
+0, 1953387, 11300, 0x253000d7
110
+0, 1971308, 11300, 0xb94b03b1
111
+0, 1989229, 11300, 0xbc872268
112
+0, 2007150, 11300, 0xe77adb8c
113
+0, 2025071, 11300, 0xa38936b7
114
+0, 2042992, 11300, 0xd6153632
115
+0, 2060913, 11300, 0x1ae633cc
116
+0, 2078834, 11300, 0xb90c286e
117
+0, 2096755, 11300, 0xbc7e333d
118
+0, 2114676, 11300, 0x1b5421f8
119
+0, 2132597, 11300, 0xdde6506d
120
+0, 2150518, 11300, 0xd3eb757e
121
+0, 2168439, 11300, 0x5ad1929c
122
+0, 2186360, 11300, 0x4f6aa47d
123
+0, 2204281, 11300, 0xab3caf55
124
+0, 2222202, 11300, 0x5ff9b39a
125
+0, 2240123, 11300, 0x1454e12e
126
+0, 2258043, 11300, 0xf18216e8
127
+0, 2275964, 11300, 0x62144880
128
+0, 2293885, 11300, 0x54284241
129
+0, 2311806, 11300, 0x8e8c7228
130
+0, 2329727, 11300, 0xb498d06e
131
+0, 2347648, 11300, 0x7b1e6be1
132
+0, 2365569, 11300, 0x5e5ea1f4
133
+0, 2383490, 11300, 0x41eda28e
134
+0, 2401411, 11300, 0x7ba6aa92
135
+0, 2419332, 11300, 0xa8a8b1c7
136
+0, 2437253, 11300, 0x0d30bd08
137
+0, 2455174, 11300, 0xc610bf16
138
+0, 2473095, 11300, 0xed57c075
139
+0, 2491016, 11300, 0xb86dbfea
140
+0, 2508937, 11300, 0x0970c03d
141
+0, 2526858, 11300, 0x743ac2ac
142
+0, 2544779, 11300, 0x0a44c816
143
+0, 2562700, 11300, 0xe32acd6b
144
+0, 2580621, 11300, 0x209bcdab
145
+0, 2598542, 11300, 0x3cd0d105
146
+0, 2616463, 11300, 0xc0bcd330
147
+0, 2634384, 11300, 0x4785d6dc
148
+0, 2652305, 11300, 0xe85f9c90
149
+0, 2670226, 11300, 0xd4a72850
150
+0, 2688147, 11300, 0x04766e41
151
+0, 2706068, 11300, 0x04766e41
0 152
new file mode 100644
... ...
@@ -0,0 +1,423 @@
0
+0, 0, 734, 0x5a042c2c
1
+1, 0, 1024, 0x00000000
2
+1, 2090, 1024, 0x00000000
3
+1, 4180, 1024, 0xd89a448e
4
+1, 6269, 1024, 0x695b369c
5
+1, 8359, 1024, 0xc8ba5707
6
+0, 9990, 763, 0xb5893f2f
7
+1, 10449, 1024, 0xdf241fc6
8
+1, 12539, 1024, 0x61cf4166
9
+1, 14629, 1024, 0x97cbc386
10
+1, 16718, 1024, 0x44899d04
11
+1, 18808, 1024, 0xa7cbaa62
12
+0, 19980, 3023, 0x0f3907d3
13
+1, 20898, 1024, 0xa7aea60c
14
+1, 22988, 1024, 0xd7b18a89
15
+1, 25078, 1024, 0x268e81f6
16
+1, 27167, 1024, 0x9cf83a2f
17
+1, 29257, 1024, 0x5559b508
18
+0, 29970, 4800, 0x22e6e18a
19
+1, 31347, 1024, 0xe1b9e71c
20
+1, 33437, 1024, 0xdcee733e
21
+1, 35527, 1024, 0xe5918f60
22
+1, 37616, 1024, 0x29dbd209
23
+1, 39706, 1024, 0x9bcbcf16
24
+0, 39960, 6417, 0x427adde5
25
+1, 41796, 1024, 0x86f5f458
26
+1, 43886, 1024, 0xabcbda86
27
+1, 45976, 1024, 0xc51f77b9
28
+1, 48065, 1024, 0xf6b3a504
29
+0, 49950, 6776, 0x7a74c6ad
30
+1, 50155, 1024, 0x1af3e40e
31
+1, 52245, 1024, 0x3866b03b
32
+1, 54335, 1024, 0xbc005403
33
+1, 56424, 1024, 0xe9dfcc51
34
+1, 58514, 1024, 0x83c837cb
35
+0, 59940, 6808, 0x1f6eb7c3
36
+1, 60604, 1024, 0xfa649580
37
+1, 62694, 1024, 0x519452ea
38
+1, 64784, 1024, 0xd4978774
39
+1, 66873, 1024, 0xe2a3b1cd
40
+1, 68963, 1024, 0x9a9472ad
41
+0, 69930, 6726, 0x452087e6
42
+1, 71053, 1024, 0xa12d4060
43
+1, 73143, 1024, 0x31fb0646
44
+1, 75233, 1024, 0xfc44343f
45
+1, 77322, 1024, 0x0847751a
46
+1, 79412, 1024, 0x227968a2
47
+0, 79920, 6829, 0xee82b109
48
+1, 81502, 1024, 0x7cce9f1c
49
+1, 83592, 1024, 0xb8356713
50
+1, 85682, 1024, 0xb29f6e6f
51
+1, 87771, 1024, 0x9e1430ab
52
+1, 89861, 1024, 0x26d85423
53
+0, 89910, 7055, 0xf41f1108
54
+1, 91951, 1024, 0x6496547d
55
+1, 94041, 1024, 0x316b1a86
56
+1, 96131, 1024, 0x3cd83afc
57
+1, 98220, 1024, 0x993ff633
58
+0, 99990, 6977, 0xf8fe1ede
59
+1, 100310, 1024, 0x0708d1a2
60
+1, 102400, 1024, 0xd7230db9
61
+1, 104490, 1024, 0xbb0779ca
62
+1, 106580, 1024, 0xc6094e1b
63
+1, 108669, 1024, 0x15a8b039
64
+0, 109980, 6942, 0x9ad105c6
65
+1, 110759, 1024, 0xd6dbe88c
66
+1, 112849, 1024, 0x7e8d1140
67
+1, 114939, 1024, 0xef88e525
68
+1, 117029, 1024, 0x44e21149
69
+1, 119118, 1024, 0x65b0f5f4
70
+0, 119970, 6926, 0xe239dad6
71
+1, 121208, 1024, 0xb955f687
72
+1, 123298, 1024, 0xc85fba9c
73
+1, 125388, 1024, 0xf59655ad
74
+1, 127478, 1024, 0x6de80bf1
75
+1, 129567, 1024, 0x2dcf6e41
76
+0, 129960, 6966, 0x81dcfab1
77
+1, 131657, 1024, 0xd0ddcf8a
78
+1, 133747, 1024, 0x00135c2d
79
+1, 135837, 1024, 0x697f8efd
80
+1, 137927, 1024, 0x7a9bada5
81
+0, 139950, 6896, 0x31e6cc02
82
+1, 140016, 1024, 0x0d22783c
83
+1, 142106, 1024, 0x7726d07d
84
+1, 144196, 1024, 0xa2f14f67
85
+1, 146286, 1024, 0x7f51060d
86
+1, 148376, 1024, 0xc4ec6aea
87
+0, 149940, 6889, 0x1cc1006e
88
+1, 150465, 1024, 0x9bb37ca4
89
+1, 152555, 1024, 0x9b085577
90
+1, 154645, 1024, 0x8812f8af
91
+1, 156735, 1024, 0x788f5221
92
+1, 158824, 1024, 0x3a2ce642
93
+0, 159930, 6933, 0xc303f87f
94
+1, 160914, 1024, 0x72415692
95
+1, 163004, 1024, 0xe3dcc105
96
+1, 165094, 1024, 0xb26c0599
97
+1, 167184, 1024, 0x5c9e55eb
98
+1, 169273, 1024, 0x8fe88707
99
+0, 169920, 7034, 0xb4970a20
100
+1, 171363, 1024, 0xc5d7beb6
101
+1, 173453, 1024, 0xe1d3a3b4
102
+1, 175543, 1024, 0x012da0c6
103
+1, 177633, 1024, 0x8d010922
104
+1, 179722, 1024, 0x3366eb0d
105
+0, 179910, 6961, 0xf064095d
106
+1, 181812, 1024, 0xc9381a27
107
+1, 183902, 1024, 0x0774f685
108
+1, 185992, 1024, 0xc5cae0a5
109
+1, 188082, 1024, 0xa6f4737c
110
+0, 189990, 7089, 0x5ba350f9
111
+1, 190171, 1024, 0x8fb6d0d1
112
+1, 192261, 1024, 0x05f579c2
113
+1, 194351, 1024, 0x56905d99
114
+1, 196441, 1024, 0x002ee18d
115
+1, 198531, 1024, 0xeb37ef51
116
+0, 199980, 7078, 0xa83f3e88
117
+1, 200620, 1024, 0x38025635
118
+1, 202710, 1024, 0x4fe643c8
119
+1, 204800, 1024, 0x11d66ab1
120
+1, 206890, 1024, 0xcc3051e9
121
+1, 208980, 1024, 0xcd93e854
122
+0, 209970, 7147, 0xcda66cfc
123
+1, 211069, 1024, 0x38f1196d
124
+1, 213159, 1024, 0x657a15fc
125
+1, 215249, 1024, 0x669ce2a9
126
+1, 217339, 1024, 0x95862dda
127
+1, 219429, 1024, 0x1726a7b2
128
+0, 219960, 7173, 0xb7455859
129
+1, 221518, 1024, 0xd6ece2a1
130
+1, 223608, 1024, 0x33ab9553
131
+1, 225698, 1024, 0xd50c73a6
132
+1, 227788, 1024, 0xfe25b63a
133
+1, 229878, 1024, 0x7e2959e3
134
+0, 229950, 7213, 0x97b89994
135
+1, 231967, 1024, 0xa4c07b34
136
+1, 234057, 1024, 0xd6d8f15c
137
+1, 236147, 1024, 0x1eccddd7
138
+1, 238237, 1024, 0x2b69f9cb
139
+0, 239940, 7170, 0xca8b2948
140
+1, 240327, 1024, 0x667b775f
141
+1, 242416, 1024, 0xad3b84e9
142
+1, 244506, 1024, 0x4f29fc67
143
+1, 246596, 1024, 0x8d611ab7
144
+1, 248686, 1024, 0x278966ea
145
+0, 249930, 7174, 0xc7cc6bbb
146
+1, 250776, 1024, 0xaf33812b
147
+1, 252865, 1024, 0xa55f4265
148
+1, 254955, 1024, 0x023cb51c
149
+1, 257045, 1024, 0x1d1f1005
150
+1, 259135, 1024, 0x874cccf7
151
+0, 259920, 7235, 0xc2e68d2b
152
+1, 261224, 1024, 0xda705428
153
+1, 263314, 1024, 0x48d9b440
154
+1, 265404, 1024, 0xa14e0712
155
+1, 267494, 1024, 0x7efbad1f
156
+1, 269584, 1024, 0xdb82c17f
157
+0, 270000, 7261, 0x8204a423
158
+1, 271673, 1024, 0xcbe87613
159
+1, 273763, 1024, 0x3a63df1d
160
+1, 275853, 1024, 0xd5636bba
161
+1, 277943, 1024, 0x9397af23
162
+0, 279990, 7353, 0xacc7e7c0
163
+1, 280033, 1024, 0x32a07c98
164
+1, 282122, 1024, 0x202ca667
165
+1, 284212, 1024, 0xdf969011
166
+1, 286302, 1024, 0xc434d238
167
+1, 288392, 1024, 0xe9ad7562
168
+0, 289980, 7065, 0x45035c5c
169
+1, 290482, 1024, 0xb51b6b50
170
+1, 292571, 1024, 0xe70aecd3
171
+1, 294661, 1024, 0x03c816b2
172
+1, 296751, 1024, 0x869fdf25
173
+1, 298841, 1024, 0xd40a0a62
174
+0, 299970, 7269, 0x72edbb76
175
+1, 300931, 1024, 0x5af7dd35
176
+1, 303020, 1024, 0x891ffc72
177
+1, 305110, 1024, 0x1ff68a08
178
+1, 307200, 1024, 0x5a7517a9
179
+1, 309290, 1024, 0x0f959f74
180
+0, 309960, 7220, 0xb926772f
181
+1, 311380, 1024, 0xe92a12a2
182
+1, 313469, 1024, 0x38000e55
183
+1, 315559, 1024, 0x39fbdd70
184
+1, 317649, 1024, 0xca3d9184
185
+1, 319739, 1024, 0x66c8995b
186
+0, 319950, 7326, 0x0a66c632
187
+1, 321829, 1024, 0xac25acea
188
+1, 323918, 1024, 0x3cd1046c
189
+1, 326008, 1024, 0x6a1df31c
190
+1, 328098, 1024, 0x21ca10a1
191
+0, 329940, 7225, 0xe39076ab
192
+1, 330188, 1024, 0x1aeccedc
193
+1, 332278, 1024, 0xddea1335
194
+1, 334367, 1024, 0x19f5ca9f
195
+1, 336457, 1024, 0x88e95e43
196
+1, 338547, 1024, 0x726284fe
197
+0, 339930, 7265, 0xe0209036
198
+1, 340637, 1024, 0x6b85b40e
199
+1, 342727, 1024, 0x111fee2a
200
+1, 344816, 1024, 0x3656b588
201
+1, 346906, 1024, 0xa5a2b552
202
+1, 348996, 1024, 0x38fb2467
203
+0, 349920, 7337, 0x7a5dc093
204
+1, 351086, 1024, 0xaa919ccc
205
+1, 353176, 1024, 0x15993dbc
206
+1, 355265, 1024, 0xbe01a7b9
207
+1, 357355, 1024, 0xefe93c09
208
+1, 359445, 1024, 0x1bb566e5
209
+0, 360000, 7246, 0x519a7a3c
210
+1, 361535, 1024, 0x15ce6237
211
+1, 363624, 1024, 0xa8552e66
212
+1, 365714, 1024, 0x9d80187e
213
+1, 367804, 1024, 0x5df3fc30
214
+1, 369894, 1024, 0x1a312aa5
215
+0, 369990, 7266, 0x352c8078
216
+1, 371984, 1024, 0x6bb8e302
217
+1, 374073, 1024, 0xbd9684bb
218
+1, 376163, 1024, 0x78b0b166
219
+1, 378253, 1024, 0xd9af5eae
220
+0, 379980, 7323, 0xcaf69d7c
221
+1, 380343, 1024, 0xdb90fe82
222
+1, 382433, 1024, 0x327614e9
223
+1, 384522, 1024, 0x1f19b7fe
224
+1, 386612, 1024, 0x46c53f96
225
+1, 388702, 1024, 0x921b2189
226
+0, 389970, 7309, 0x98c1e6f7
227
+1, 390792, 1024, 0xa8fbc85a
228
+1, 392882, 1024, 0xabfdaaae
229
+1, 394971, 1024, 0x6acc7387
230
+1, 397061, 1024, 0x0d9c27b5
231
+1, 399151, 1024, 0xba4dd809
232
+0, 399960, 7121, 0x913d5bd6
233
+1, 401241, 1024, 0x2a2ad521
234
+1, 403331, 1024, 0x892de38a
235
+1, 405420, 1024, 0xdc97a2eb
236
+1, 407510, 1024, 0x4f614ca4
237
+1, 409600, 1024, 0x9c8a77ea
238
+0, 409950, 7088, 0x56302362
239
+1, 411690, 1024, 0x2d30e646
240
+1, 413780, 1024, 0x74e800a7
241
+1, 415869, 1024, 0x1e01fb02
242
+1, 417959, 1024, 0x4ed2c1d8
243
+0, 419940, 7104, 0xc0d14f78
244
+1, 420049, 1024, 0xf2fdbe63
245
+1, 422139, 1024, 0x8d6f63a1
246
+1, 424229, 1024, 0xded468d9
247
+1, 426318, 1024, 0xccad839e
248
+1, 428408, 1024, 0xdde7c082
249
+0, 429930, 7169, 0xd03c825b
250
+1, 430498, 1024, 0x548613c5
251
+1, 432588, 1024, 0x383909bd
252
+1, 434678, 1024, 0xfd37627b
253
+1, 436767, 1024, 0x6d95a481
254
+1, 438857, 1024, 0x56aa87fa
255
+0, 439920, 7038, 0x1ecc201d
256
+1, 440947, 1024, 0x7b67258c
257
+1, 443037, 1024, 0x7dd99a92
258
+1, 445127, 1024, 0x4a66d102
259
+1, 447216, 1024, 0x7b3fce51
260
+1, 449306, 1024, 0xbbd968aa
261
+0, 450000, 7015, 0x83c94454
262
+1, 451396, 1024, 0x8283ec36
263
+1, 453486, 1024, 0x3c96493d
264
+1, 455576, 1024, 0xfa4f8cf8
265
+1, 457665, 1024, 0xe2cf872d
266
+1, 459755, 1024, 0x0a9e7aa6
267
+0, 459990, 6983, 0x9e51f54d
268
+1, 461845, 1024, 0x6e7a0550
269
+1, 463935, 1024, 0x3acfea2f
270
+1, 466024, 1024, 0x7111d0fa
271
+1, 468114, 1024, 0xe9a1eca9
272
+0, 469980, 7088, 0x70d33de1
273
+1, 470204, 1024, 0x24da6c46
274
+1, 472294, 1024, 0x117cff37
275
+1, 474384, 1024, 0x0f27cab6
276
+1, 476473, 1024, 0x69b6b4e6
277
+1, 478563, 1024, 0x1e6cc841
278
+0, 479970, 7096, 0x4d0f81b5
279
+1, 480653, 1024, 0xb01e2365
280
+1, 482743, 1024, 0x14e200d3
281
+1, 484833, 1024, 0xd1184c98
282
+1, 486922, 1024, 0xef9140e9
283
+1, 489012, 1024, 0x4cbb645e
284
+0, 489960, 7106, 0xd1a83ddc
285
+1, 491102, 1024, 0xe7fe2f06
286
+1, 493192, 1024, 0xf8c45028
287
+1, 495282, 1024, 0x561358f4
288
+1, 497371, 1024, 0xd0129b77
289
+1, 499461, 1024, 0xcc636e88
290
+0, 499950, 7219, 0x20f47fe4
291
+1, 501551, 1024, 0xe9406321
292
+1, 503641, 1024, 0x9f16a041
293
+1, 505731, 1024, 0x468bf409
294
+1, 507820, 1024, 0x3df70f7b
295
+1, 509910, 1024, 0xa880b11b
296
+0, 509940, 7184, 0x45dc6a0e
297
+1, 512000, 1024, 0x3286c489
298
+1, 514090, 1024, 0x39fe9ebc
299
+1, 516180, 1024, 0xc533d83b
300
+1, 518269, 1024, 0x153b195d
301
+0, 519930, 7222, 0x488c6499
302
+1, 520359, 1024, 0xd84786a1
303
+1, 522449, 1024, 0xdc295aaa
304
+1, 524539, 1024, 0xfb764d8c
305
+1, 526629, 1024, 0xeebc9db9
306
+1, 528718, 1024, 0x7ba9403e
307
+0, 529920, 7254, 0xbd097ba7
308
+1, 530808, 1024, 0x4e5571ec
309
+1, 532898, 1024, 0xd965fad4
310
+1, 534988, 1024, 0x87e259f2
311
+1, 537078, 1024, 0xae7e533b
312
+1, 539167, 1024, 0x313cf4d6
313
+0, 540000, 7189, 0x46e06d43
314
+1, 541257, 1024, 0xe1844c90
315
+1, 543347, 1024, 0xbb057b44
316
+1, 545437, 1024, 0xa5099687
317
+1, 547527, 1024, 0xbff10707
318
+1, 549616, 1024, 0x37c4ffc0
319
+0, 549990, 7283, 0x19dd7319
320
+1, 551706, 1024, 0xf9fb6caa
321
+1, 553796, 1024, 0x3b6a3a1f
322
+1, 555886, 1024, 0x83431edb
323
+1, 557976, 1024, 0x1eb713cf
324
+0, 559980, 7161, 0x23171d02
325
+1, 560065, 1024, 0xd7b07a6d
326
+1, 562155, 1024, 0x81ae3391
327
+1, 564245, 1024, 0xf150130a
328
+1, 566335, 1024, 0x09678eaa
329
+1, 568424, 1024, 0xb94e06f1
330
+0, 569970, 6976, 0xcc610c26
331
+1, 570514, 1024, 0x67b1dbc9
332
+1, 572604, 1024, 0xd6edc235
333
+1, 574694, 1024, 0x34e4c499
334
+1, 576784, 1024, 0xeefd89c0
335
+1, 578873, 1024, 0x38afdaf1
336
+0, 579960, 7056, 0x6cd917b0
337
+1, 580963, 1024, 0x29a60d76
338
+1, 583053, 1024, 0xe28a4372
339
+1, 585143, 1024, 0x7089454d
340
+1, 587233, 1024, 0x0c01bb7b
341
+1, 589322, 1024, 0xbd776a72
342
+0, 589950, 6736, 0x02b78951
343
+1, 591412, 1024, 0x86776fd0
344
+1, 593502, 1024, 0xb37c88f7
345
+1, 595592, 1024, 0x5f90aaf8
346
+1, 597682, 1024, 0x203d4222
347
+1, 599771, 1024, 0x382692a6
348
+0, 599940, 6540, 0x767e0854
349
+1, 601861, 1024, 0xf37c95fd
350
+1, 603951, 1024, 0x6c0b8877
351
+1, 606041, 1024, 0x2e54a8b6
352
+1, 608131, 1024, 0x7f266488
353
+0, 609930, 6170, 0xc84962fb
354
+1, 610220, 1024, 0xfbf20f9a
355
+1, 612310, 1024, 0xf2985cc0
356
+1, 614400, 1024, 0xc7075340
357
+1, 616490, 1024, 0xe4585695
358
+1, 618580, 1024, 0xbdffa380
359
+0, 619920, 6169, 0x27e06c03
360
+1, 620669, 1024, 0x2422a8a9
361
+1, 622759, 1024, 0x59cbd75f
362
+1, 624849, 1024, 0x04ad1a8c
363
+1, 626939, 1024, 0x33c09191
364
+1, 629029, 1024, 0x55efa6fd
365
+0, 630000, 5864, 0xd14db83f
366
+1, 631118, 1024, 0xf73d0e5d
367
+1, 633208, 1024, 0x6141ebae
368
+1, 635298, 1024, 0x7db17a68
369
+1, 637388, 1024, 0xa6c690b6
370
+1, 639478, 1024, 0xa6fd6725
371
+0, 639990, 5375, 0x4a21055d
372
+1, 641567, 1024, 0x50a90b9b
373
+1, 643657, 1024, 0xef990dc8
374
+1, 645747, 1024, 0x75adf6b5
375
+1, 647837, 1024, 0x61eac43e
376
+1, 649927, 1024, 0x67797a19
377
+0, 649980, 5206, 0x95ead3cb
378
+1, 652016, 1024, 0xf325277a
379
+1, 654106, 1024, 0x18bf254a
380
+1, 656196, 1024, 0x2ce6bee3
381
+1, 658286, 1024, 0x8d320860
382
+0, 659970, 5220, 0xcfdcc37e
383
+1, 660376, 1024, 0xc979b6e8
384
+1, 662465, 1024, 0xdb644b41
385
+1, 664555, 1024, 0xe1b368ba
386
+1, 666645, 1024, 0xacc53d15
387
+1, 668735, 1024, 0x42ea8c18
388
+0, 669960, 4946, 0x2d864a77
389
+1, 670824, 1024, 0xe52c99a4
390
+1, 672914, 1024, 0xd7db54a6
391
+1, 675004, 1024, 0x7f27a7e3
392
+1, 677094, 1024, 0xf7ffeaa9
393
+1, 679184, 1024, 0x792b6088
394
+0, 679950, 4390, 0x2ab9f462
395
+1, 681273, 1024, 0x61d99724
396
+1, 683363, 1024, 0x5213720e
397
+1, 685453, 1024, 0xac09dd30
398
+1, 687543, 1024, 0x960bf6bb
399
+1, 689633, 1024, 0xc90168e1
400
+0, 689940, 4051, 0x1d09592e
401
+1, 691722, 1024, 0x43b45768
402
+1, 693812, 1024, 0x935d60a1
403
+1, 695902, 1024, 0x9a342ef2
404
+1, 697992, 1024, 0xc894709f
405
+0, 699930, 3680, 0x39bd6a12
406
+1, 700082, 1024, 0x59b43b07
407
+1, 702171, 1024, 0x36a1a98d
408
+1, 704261, 1024, 0x9e1a121c
409
+1, 706351, 1024, 0x02208b78
410
+1, 708441, 1024, 0xd1d7b274
411
+0, 709920, 2910, 0x6337ece9
412
+1, 710531, 1024, 0xdacd5096
413
+1, 712620, 1024, 0x51b71ead
414
+1, 714710, 1024, 0xd009a7ca
415
+1, 716800, 1024, 0xb6d5a938
416
+1, 718890, 1024, 0xf3d45e47
417
+0, 720000, 2153, 0xf4e3bc17
418
+1, 720980, 1024, 0xea8e04fc
419
+1, 723069, 1024, 0x0b928bd8
420
+1, 725159, 1024, 0x0f02caec
421
+1, 727249, 1024, 0xe2b137a8
422
+1, 729339, 1024, 0xd5f94892
0 423
new file mode 100644
... ...
@@ -0,0 +1,120 @@
0
+0, 0, 37440, 0xd1bc5235
1
+0, 3750, 37440, 0x158e6167
2
+0, 7500, 37440, 0x0faa4481
3
+0, 11250, 37440, 0x427158c5
4
+0, 15000, 37440, 0x4eb53ac6
5
+0, 18750, 37440, 0x99304eea
6
+0, 22500, 37440, 0xcc554a6f
7
+0, 26250, 37440, 0xabeb6c35
8
+0, 30000, 37440, 0xddfc7e18
9
+0, 33750, 37440, 0xaa79b504
10
+0, 37500, 37440, 0x5cb1c839
11
+0, 41250, 37440, 0x7e36ecca
12
+0, 45000, 37440, 0xf486f425
13
+0, 48750, 37440, 0xf1b4138f
14
+0, 52500, 37440, 0x966f1a49
15
+0, 56250, 37440, 0x5eff21da
16
+0, 60000, 37440, 0x333f39b1
17
+0, 63750, 37440, 0x62e5963e
18
+0, 67500, 37440, 0x26930671
19
+0, 71250, 37440, 0x27b4bb6c
20
+0, 75000, 37440, 0xdbd07766
21
+0, 78750, 37440, 0x04260104
22
+0, 82500, 37440, 0x9b1e078b
23
+0, 86250, 37440, 0xdf4e2474
24
+0, 90000, 37440, 0x57d44986
25
+0, 93750, 37440, 0x8780e34c
26
+0, 97500, 37440, 0xf80c8bc0
27
+0, 101250, 37440, 0x630a7583
28
+0, 105000, 37440, 0x235ae089
29
+0, 108750, 37440, 0x984b8f0e
30
+0, 112500, 37440, 0x865cf592
31
+0, 116250, 37440, 0x70f376f2
32
+0, 120000, 37440, 0x8b30c035
33
+0, 123750, 37440, 0xde772d79
34
+0, 127500, 37440, 0x8e076be5
35
+0, 131250, 37440, 0x3dc2bd9f
36
+0, 135000, 37440, 0xb782eb67
37
+0, 138750, 37440, 0x02025d73
38
+0, 142500, 37440, 0x86bbbce8
39
+0, 146250, 37440, 0xd6554f62
40
+0, 150000, 37440, 0xb831b917
41
+0, 153750, 37440, 0x80643560
42
+0, 157500, 37440, 0x4ecf9afd
43
+0, 161250, 37440, 0x9ce51e0b
44
+0, 165000, 37440, 0x179466cd
45
+0, 168750, 37440, 0x145fc900
46
+0, 172500, 37440, 0xb1b50402
47
+0, 176250, 37440, 0x0a87552a
48
+0, 180000, 37440, 0x8f53821d
49
+0, 183750, 37440, 0x1c07c825
50
+0, 187500, 37440, 0x49dde82f
51
+0, 191250, 37440, 0xb1a32605
52
+0, 195000, 37440, 0x410f3cd5
53
+0, 198750, 37440, 0xff5e6696
54
+0, 202500, 37440, 0x96f678c9
55
+0, 206250, 37440, 0x6c9e9e68
56
+0, 210000, 37440, 0x79a2a655
57
+0, 213750, 37440, 0xf237bd6c
58
+0, 217500, 37440, 0x4051b611
59
+0, 221250, 37440, 0xc7ccc918
60
+0, 225000, 37440, 0xbd02c122
61
+0, 228750, 37440, 0xacb3c881
62
+0, 232500, 37440, 0x2abdb940
63
+0, 236250, 37440, 0x19d5be85
64
+0, 240000, 37440, 0xfa5fb1ba
65
+0, 243750, 37440, 0xdae7a7aa
66
+0, 247500, 37440, 0x6b0f9f69
67
+0, 251250, 37440, 0x353e8201
68
+0, 255000, 37440, 0xa21443aa
69
+0, 258750, 37440, 0x66c8d7e0
70
+0, 262500, 37440, 0xc332068e
71
+0, 266250, 37440, 0x71431b9b
72
+0, 270000, 37440, 0x392f15cb
73
+0, 273750, 37440, 0x95a146bb
74
+0, 277500, 37440, 0x7c51740a
75
+0, 281250, 37440, 0xa3bdd43c
76
+0, 285000, 37440, 0xa079f965
77
+0, 288750, 37440, 0xa95423ea
78
+0, 292500, 37440, 0xd1bd2c67
79
+0, 296250, 37440, 0x6cf82844
80
+0, 300000, 37440, 0xd401e128
81
+0, 303750, 37440, 0x1f7db118
82
+0, 307500, 37440, 0x2e0a65a9
83
+0, 311250, 37440, 0x321c1c40
84
+0, 315000, 37440, 0x95b2a127
85
+0, 318750, 37440, 0xa1471f4b
86
+0, 322500, 37440, 0x29d148c0
87
+0, 326250, 37440, 0x24c07107
88
+0, 330000, 37440, 0x0ead678d
89
+0, 333750, 37440, 0xd0ca6495
90
+0, 337500, 37440, 0x08f935ef
91
+0, 341250, 37440, 0xb5ec3c38
92
+0, 345000, 37440, 0xce371628
93
+0, 348750, 37440, 0x68170812
94
+0, 352500, 37440, 0xe222699e
95
+0, 356250, 37440, 0xd688706c
96
+0, 360000, 37440, 0x81a033f9
97
+0, 363750, 37440, 0x28bd0fbf
98
+0, 367500, 37440, 0xe36db7b2
99
+0, 371250, 37440, 0x30559121
100
+0, 375000, 37440, 0xbf2b5fc8
101
+0, 378750, 37440, 0x4b427672
102
+0, 382500, 37440, 0x0544b0b4
103
+0, 386250, 37440, 0x38a70b06
104
+0, 390000, 37440, 0x4ed62607
105
+0, 393750, 37440, 0x6efe8ea6
106
+0, 397500, 37440, 0x81197e11
107
+0, 401250, 37440, 0xf4060050
108
+0, 405000, 37440, 0xaf205f13
109
+0, 408750, 37440, 0x5fa21382
110
+0, 412500, 37440, 0x8627ad05
111
+0, 416250, 37440, 0xf7130133
112
+0, 420000, 37440, 0x76dea7ba
113
+0, 423750, 37440, 0x1dbae1be
114
+0, 427500, 37440, 0x74a933f7
115
+0, 431250, 37440, 0xbdcd41a3
116
+0, 435000, 37440, 0xf0fe8c1c
117
+0, 438750, 37440, 0xc0036222
118
+0, 442500, 37440, 0x3058385c
119
+0, 446250, 37440, 0x68141016
0 120
new file mode 100644
... ...
@@ -0,0 +1,139 @@
0
+1, 0, 576, 0x9b6e1638
1
+1, 1620, 576, 0x0ca91183
2
+1, 3780, 576, 0xec6a180f
3
+1, 5940, 576, 0x478a2b9b
4
+1, 8100, 576, 0x00fa15b3
5
+1, 10260, 576, 0xfb551816
6
+1, 12960, 576, 0x422e12bd
7
+1, 15120, 576, 0xa7581b29
8
+1, 17280, 576, 0xd4b31a74
9
+1, 19440, 576, 0x11521b10
10
+1, 21600, 576, 0x3dcc1474
11
+1, 23760, 576, 0x66c31aab
12
+1, 25920, 576, 0x97f318a8
13
+1, 28080, 576, 0xd3fb1a30
14
+1, 30240, 576, 0xd2bd16af
15
+1, 32400, 576, 0x6c10146a
16
+1, 34560, 576, 0x10d81468
17
+1, 36720, 576, 0x3813162d
18
+1, 38880, 576, 0x89e71d95
19
+1, 41040, 576, 0xd1c717f9
20
+1, 43200, 576, 0x1a311e5f
21
+1, 45360, 576, 0x0ea80e05
22
+1, 47520, 576, 0x2f1718f2
23
+1, 49680, 576, 0xffe01e13
24
+1, 51840, 576, 0xa7b02296
25
+1, 54000, 576, 0x199f1597
26
+1, 56160, 576, 0xdea217ba
27
+1, 58320, 576, 0x8a790f01
28
+1, 60480, 576, 0x23e80038
29
+1, 62640, 576, 0x75dc048a
30
+1, 64800, 576, 0xeb4b0d93
31
+1, 66960, 576, 0xde1322f5
32
+1, 69120, 576, 0xc3131f35
33
+1, 71280, 576, 0x708f1381
34
+1, 73440, 576, 0x1f00137e
35
+0, 74578, 41980, 0xd4920915
36
+1, 75600, 576, 0x05131eb0
37
+1, 77760, 576, 0x78151c22
38
+0, 78178, 7228, 0x1b141fa3
39
+1, 79920, 576, 0x31771239
40
+0, 81777, 7492, 0x1a47f3e4
41
+1, 82080, 576, 0x3ce4097c
42
+1, 84240, 576, 0x180e15f4
43
+0, 85378, 25068, 0xcb70a744
44
+1, 86400, 576, 0x30db0604
45
+1, 88560, 576, 0x9b290284
46
+0, 88978, 7212, 0x0ab9f558
47
+1, 90720, 576, 0xcf340753
48
+0, 92578, 7612, 0xa93054f0
49
+1, 92880, 576, 0xdaa41457
50
+1, 95040, 576, 0x34d310a2
51
+0, 96177, 22868, 0xa77db64a
52
+1, 97200, 576, 0x58b31010
53
+1, 99360, 576, 0x19610f54
54
+0, 99778, 6260, 0x6cf76411
55
+1, 101520, 576, 0x17762352
56
+0, 103377, 6156, 0xe168394b
57
+1, 103680, 576, 0x1fea1448
58
+1, 105840, 576, 0x55840a01
59
+0, 106977, 23364, 0x53164f1e
60
+1, 108000, 576, 0x6c9c24ce
61
+1, 110160, 576, 0x955f1e97
62
+0, 110578, 6708, 0x89877269
63
+1, 112320, 576, 0x2827134f
64
+0, 114178, 6908, 0x8d62a249
65
+1, 114480, 576, 0x34a01c29
66
+1, 116640, 576, 0x7d351e52
67
+0, 117778, 38156, 0xec41f682
68
+1, 118800, 576, 0x00c91d9e
69
+1, 120960, 576, 0x57ea1a97
70
+0, 121377, 5764, 0xcc04534b
71
+1, 123120, 576, 0xef3a1c74
72
+0, 124977, 5388, 0xb8a1c3c5
73
+1, 125280, 576, 0x11fc217d
74
+1, 127440, 576, 0x59ce20e5
75
+0, 128578, 16764, 0x59460d96
76
+1, 129600, 576, 0xaafc1dbf
77
+1, 131760, 576, 0xdd941609
78
+0, 132177, 5548, 0x5c91e93d
79
+1, 133920, 576, 0x900420b0
80
+0, 135777, 5652, 0x5e321aed
81
+1, 136080, 576, 0x5f4f1aa1
82
+1, 138240, 576, 0x7d7e18de
83
+0, 139377, 15564, 0xefdf5080
84
+1, 140400, 576, 0x986c0d9d
85
+1, 142560, 576, 0xcb4c21c0
86
+0, 142977, 6492, 0xd1d5c5f8
87
+1, 144720, 576, 0xbcfb1e8b
88
+0, 146577, 5604, 0xf9472b44
89
+1, 146880, 576, 0xcb541b4c
90
+1, 149040, 576, 0x980426e9
91
+0, 150177, 17924, 0x45815b7b
92
+1, 151200, 576, 0x09d00aa0
93
+1, 153360, 576, 0xad591374
94
+0, 153778, 5020, 0x3cc5e554
95
+1, 155520, 576, 0x97bf1461
96
+0, 157378, 5276, 0xa0554c12
97
+1, 157680, 576, 0xdc871cc4
98
+1, 159840, 576, 0x56781896
99
+0, 160977, 31460, 0x5765eb5f
100
+1, 162000, 576, 0xc77714e3
101
+1, 164160, 576, 0x280e18d4
102
+0, 164577, 4972, 0x91adbab7
103
+1, 166320, 576, 0xbc0d2302
104
+0, 168178, 5580, 0xfea707cb
105
+1, 168480, 576, 0x79191384
106
+1, 170640, 576, 0x65481c97
107
+0, 171778, 17412, 0x0afe4d27
108
+1, 172800, 576, 0xc94d227d
109
+1, 174960, 576, 0xa68a1f14
110
+0, 175378, 5236, 0x03f55309
111
+1, 177120, 576, 0x6af11a5c
112
+0, 178977, 4924, 0x558e753c
113
+1, 179280, 576, 0x4d1019ef
114
+1, 181440, 576, 0x3b1b17b5
115
+0, 182577, 15396, 0xf145d121
116
+1, 183600, 576, 0xcdd8159f
117
+1, 185760, 576, 0x97cd1d06
118
+0, 186177, 4708, 0x43066a92
119
+1, 187920, 576, 0x5d1b1123
120
+0, 189778, 4332, 0x9e22bcba
121
+1, 190080, 576, 0x888d0cb0
122
+1, 192240, 576, 0x556e1dad
123
+0, 193377, 12876, 0x46ff9ef4
124
+1, 194400, 576, 0xf7af0bce
125
+1, 196560, 576, 0xb5da160a
126
+0, 196978, 5940, 0x27cba62e
127
+1, 198720, 576, 0x4a8d0e98
128
+0, 200578, 6124, 0x6bab0a6d
129
+1, 200880, 576, 0x183b1c7e
130
+1, 203040, 576, 0xc47120e6
131
+0, 204178, 36428, 0x942f9648
132
+1, 205200, 576, 0xb1f31346
133
+0, 207777, 6660, 0x545a0db7
134
+0, 211377, 6780, 0x2d1d4189
135
+0, 214978, 16460, 0x7c3b3ca4
136
+0, 218578, 6724, 0x8538cc6f
137
+0, 222178, 7068, 0x69574fd0
138
+0, 225777, 19552, 0xf230e854
0 139
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+CRC=0x2ac2159e
... ...
@@ -4,6 +4,8 @@ abgr                037bf9df6a765520ad6d490066bf4b89
4 4
 argb                c442a8261c2265a07212ef0f72e35f5a
5 5
 bgr0                0ef8ffe42bfe53be74973a0c118b775e
6 6
 bgr24               0d0cb38ab3fa0b2ec0865c14f78b217b
7
+bgr444be            d9ea9307d21b162225b8b2c524cf9477
8
+bgr444le            88035350e9da3a8f67387890b956f0bc
7 9
 bgr48be             00624e6c7ec7ab19897ba2f0a3257fe8
8 10
 bgr48le             d02c235ebba7167881ca2d576497ff84
9 11
 bgr4_byte           50d23cc82d9dcef2fd12adb81fb9b806
... ...
@@ -22,6 +24,8 @@ nv12                e0af357888584d36eec5aa0f673793ef
22 22
 nv21                9a3297f3b34baa038b1f37cb202b512f
23 23
 rgb0                7c03f81f5e5346bf8ea42c4187f20605
24 24
 rgb24               b41eba9651e1b5fe386289b506188105
25
+rgb444be            9e89db334568c6b2e3d5d0540f4ba960
26
+rgb444le            0a68cb6de8bf530aa30c5c1205c25155
25 27
 rgb48be             cc139ec1dd9451f0e049c0cb3a0c8aa2
26 28
 rgb48le             86c5608904f75360d492dbc5c9589969
27 29
 rgb4_byte           c93ba89b74c504e7f5ae9d9ab1546c73
... ...
@@ -4,6 +4,8 @@ abgr                037bf9df6a765520ad6d490066bf4b89
4 4
 argb                c442a8261c2265a07212ef0f72e35f5a
5 5
 bgr0                328a76e72c55508cdf04dc93a5b056fc
6 6
 bgr24               0d0cb38ab3fa0b2ec0865c14f78b217b
7
+bgr444be            d9ea9307d21b162225b8b2c524cf9477
8
+bgr444le            88035350e9da3a8f67387890b956f0bc
7 9
 bgr48be             00624e6c7ec7ab19897ba2f0a3257fe8
8 10
 bgr48le             d02c235ebba7167881ca2d576497ff84
9 11
 bgr4_byte           50d23cc82d9dcef2fd12adb81fb9b806
... ...
@@ -23,6 +25,8 @@ nv21                9a3297f3b34baa038b1f37cb202b512f
23 23
 pal8                dec8ed2258ec89b8a796f21cad4df867
24 24
 rgb0                ff1a9f355d43f9d25f07a191b5aa906c
25 25
 rgb24               b41eba9651e1b5fe386289b506188105
26
+rgb444be            9e89db334568c6b2e3d5d0540f4ba960
27
+rgb444le            0a68cb6de8bf530aa30c5c1205c25155
26 28
 rgb48be             cc139ec1dd9451f0e049c0cb3a0c8aa2
27 29
 rgb48le             86c5608904f75360d492dbc5c9589969
28 30
 rgb4_byte           c93ba89b74c504e7f5ae9d9ab1546c73
... ...
@@ -4,6 +4,8 @@ abgr                037bf9df6a765520ad6d490066bf4b89
4 4
 argb                c442a8261c2265a07212ef0f72e35f5a
5 5
 bgr0                328a76e72c55508cdf04dc93a5b056fc
6 6
 bgr24               0d0cb38ab3fa0b2ec0865c14f78b217b
7
+bgr444be            d9ea9307d21b162225b8b2c524cf9477
8
+bgr444le            88035350e9da3a8f67387890b956f0bc
7 9
 bgr48be             00624e6c7ec7ab19897ba2f0a3257fe8
8 10
 bgr48le             d02c235ebba7167881ca2d576497ff84
9 11
 bgr4_byte           50d23cc82d9dcef2fd12adb81fb9b806
... ...
@@ -23,6 +25,8 @@ nv21                9a3297f3b34baa038b1f37cb202b512f
23 23
 pal8                dec8ed2258ec89b8a796f21cad4df867
24 24
 rgb0                ff1a9f355d43f9d25f07a191b5aa906c
25 25
 rgb24               b41eba9651e1b5fe386289b506188105
26
+rgb444be            9e89db334568c6b2e3d5d0540f4ba960
27
+rgb444le            0a68cb6de8bf530aa30c5c1205c25155
26 28
 rgb48be             cc139ec1dd9451f0e049c0cb3a0c8aa2
27 29
 rgb48le             86c5608904f75360d492dbc5c9589969
28 30
 rgb4_byte           c93ba89b74c504e7f5ae9d9ab1546c73
... ...
@@ -4,6 +4,8 @@ abgr                cff82561a074874027ac1cc896fd2730
4 4
 argb                756dd1eaa5baca2238ce23dbdc452684
5 5
 bgr0                ff6e1dfa26d4c2ada3a59e8b0b600d1f
6 6
 bgr24               e44192347a45586c6c157e3059610cd1
7
+bgr444be            c23768338d76693f0da76e8a9b6fd8df
8
+bgr444le            846c431a47bfb745437941bde768469c
7 9
 bgr48be             390d3058a12a99c2b153ed7922508bea
8 10
 bgr48le             39fe06feb4ec1d9730dccc04a0cfac4c
9 11
 bgr4_byte           ee1d35a7baf8e9016891929a2f565c0b
... ...
@@ -23,6 +25,8 @@ nv21                69c699510ff1fb777b118ebee1002f14
23 23
 pal8                6324fa058e1bc157ed7132bfe4022317
24 24
 rgb0                1bd6f54ad067503ac9783a70062c8f87
25 25
 rgb24               13ff53ebeab74dc05492836f1cfbd2c1
26
+rgb444be            46e466b2709f62b2fffc63708063eaaf
27
+rgb444le            f0c57a48be671428e2e53c9b54a6c4e2
26 28
 rgb48be             8fac63787a711886030f8e056872b488
27 29
 rgb48le             ab92f2763a2eb264c3870cc758f97149
28 30
 rgb4_byte           d81ffd3add95842a618eec81024f0b5c
... ...
@@ -4,6 +4,8 @@ abgr                25e72e9dbd01ab00727c976d577f7be5
4 4
 argb                19869bf1a5ac0b6af4d8bbe2c104533c
5 5
 bgr0                e03d3ee0b977f6d86e5116b20494bef5
6 6
 bgr24               89108a4ba00201f79b75b9305c42352d
7
+bgr444be            9ef12c42fb791948ca4423c452dc6b9a
8
+bgr444le            3650ecfc163abd1596c0cd29d130c4b0
7 9
 bgr48be             2f23931844f57641f3737348182d118c
8 10
 bgr48le             4242a026012b6c135a6aa138a6d67031
9 11
 bgr4_byte           407fcf564ed764c38e1d748f700ab921
... ...
@@ -23,6 +25,8 @@ nv21                01ea369dd2d0d3ed7451dc5c8d61497f
23 23
 pal8                47ed19a7e128b0e33c25d2a463b0611a
24 24
 rgb0                330bd6168e46c0d5eb4acbdbb50afa2e
25 25
 rgb24               eaefabc168d0b14576bab45bc1e56e1e
26
+rgb444be            06722e03f8404e7d2226665ed2444a32
27
+rgb444le            185c9a5d9c2877484310d4196ef4cd6f
26 28
 rgb48be             62dd185862ed142283bd300eb6dbd216
27 29
 rgb48le             dcb76353268bc5862194d131762220da
28 30
 rgb4_byte           8c6ff02df0b06dd2d574836c3741b2a2