Commit dd3ca3ea authored by Michael Niedermayer's avatar Michael Niedermayer

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: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 4805a330 a67b8c86
......@@ -84,6 +84,7 @@ enum BandType {
#define IS_CODEBOOK_UNSIGNED(x) ((x - 1) & 10)
enum ChannelPosition {
AAC_CHANNEL_OFF = 0,
AAC_CHANNEL_FRONT = 1,
AAC_CHANNEL_SIDE = 2,
AAC_CHANNEL_BACK = 3,
......
......@@ -163,6 +163,19 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
}
}
static int count_channels(enum ChannelPosition che_pos[4][MAX_ELEM_ID])
{
int i, type, sum = 0;
for (i = 0; i < MAX_ELEM_ID; i++) {
for (type = 0; type < 4; type++) {
sum += (1 + (type == TYPE_CPE)) *
(che_pos[type][i] != AAC_CHANNEL_OFF &&
che_pos[type][i] != AAC_CHANNEL_CC);
}
}
return sum;
}
/**
* Check for the channel element in the current channel position configuration.
* 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,
if ((ret = set_default_channel_config(avctx, new_che_pos, channel_config)))
return ret;
}
if (count_channels(new_che_pos) > 1) {
m4ac->ps = 0;
} else if (m4ac->sbr == 1 && m4ac->ps == -1)
m4ac->ps = 1;
if (ac && (ret = output_configure(ac, ac->che_pos, new_che_pos, channel_config, OC_GLOBAL_HDR)))
return ret;
......@@ -495,8 +514,6 @@ static int decode_audio_specific_config(AACContext *ac,
av_log(avctx, AV_LOG_ERROR, "invalid sampling rate index %d\n", m4ac->sampling_index);
return -1;
}
if (m4ac->sbr == 1 && m4ac->ps == -1)
m4ac->ps = 1;
skip_bits_long(&gb, i);
......
......@@ -223,7 +223,7 @@ int ff_ps_read_data(AVCodecContext *avctx, GetBitContext *gb_host, PSContext *ps
cnt -= 2 + ps_read_extension_data(gb, ps, ps_extension_id);
}
if (cnt < 0) {
av_log(avctx, AV_LOG_ERROR, "ps extension overflow %d", cnt);
av_log(avctx, AV_LOG_ERROR, "ps extension overflow %d\n", cnt);
goto err;
}
skip_bits(gb, cnt);
......
......@@ -252,67 +252,6 @@ static int put_cabac_terminate(CABACContext *c, int bit){
return (put_bits_count(&c->pb)+7)>>3;
}
/**
* put (truncated) unary binarization.
*/
static void put_cabac_u(CABACContext *c, uint8_t * state, int v, int max, int max_index, int truncated){
int i;
assert(v <= max);
for(i=0; i<v; i++){
put_cabac(c, state, 1);
if(i < max_index) state++;
}
if(truncated==0 || v<max)
put_cabac(c, state, 0);
}
/**
* put unary exp golomb k-th order binarization.
*/
static void put_cabac_ueg(CABACContext *c, uint8_t * state, int v, int max, int is_signed, int k, int max_index){
int i;
if(v==0)
put_cabac(c, state, 0);
else{
const int sign= v < 0;
if(is_signed) v= FFABS(v);
if(v<max){
for(i=0; i<v; i++){
put_cabac(c, state, 1);
if(i < max_index) state++;
}
put_cabac(c, state, 0);
}else{
int m= 1<<k;
for(i=0; i<max; i++){
put_cabac(c, state, 1);
if(i < max_index) state++;
}
v -= max;
while(v >= m){ //FIXME optimize
put_cabac_bypass(c, 1);
v-= m;
m+= m;
}
put_cabac_bypass(c, 0);
while(m>>=1){
put_cabac_bypass(c, v&m);
}
}
if(is_signed)
put_cabac_bypass(c, sign);
}
}
int main(void){
CABACContext c;
uint8_t b[9*SIZE];
......@@ -342,19 +281,6 @@ START_TIMER
STOP_TIMER("put_cabac")
}
#if 0
for(i=0; i<SIZE; i++){
START_TIMER
put_cabac_u(&c, state, r[i], 6, 3, i&1);
STOP_TIMER("put_cabac_u")
}
for(i=0; i<SIZE; i++){
START_TIMER
put_cabac_ueg(&c, state, r[i], 3, 0, 1, 2);
STOP_TIMER("put_cabac_ueg")
}
#endif
put_cabac_terminate(&c, 1);
ff_init_cabac_decoder(&c, b, SIZE);
......
......@@ -132,10 +132,6 @@ static uint16_t band_index_long[9][23];
static INTFLOAT is_table[2][16];
static INTFLOAT is_table_lsf[2][2][16];
static INTFLOAT csa_table[8][4];
/** Window for MDCT. Note that only the component [0,17] and [20,37] are used,
the components 18 and 19 are there only to assure 128-bit alignment for asm
*/
DECLARE_ALIGNED(16, static INTFLOAT, mdct_win)[8][40];
static int16_t division_tab3[1<<6 ];
static int16_t division_tab5[1<<8 ];
......@@ -422,45 +418,6 @@ static av_cold void decode_init_static(void)
csa_table[i][3] = ca - cs;
#endif
}
/* compute mdct windows */
for (i = 0; i < 36; i++) {
for (j = 0; j < 4; j++) {
double d;
if (j == 2 && i % 3 != 1)
continue;
d = sin(M_PI * (i + 0.5) / 36.0);
if (j == 1) {
if (i >= 30) d = 0;
else if (i >= 24) d = sin(M_PI * (i - 18 + 0.5) / 12.0);
else if (i >= 18) d = 1;
} else if (j == 3) {
if (i < 6) d = 0;
else if (i < 12) d = sin(M_PI * (i - 6 + 0.5) / 12.0);
else if (i < 18) d = 1;
}
//merge last stage of imdct into the window coefficients
d *= 0.5 / cos(M_PI * (2 * i + 19) / 72);
if (j == 2)
mdct_win[j][i/3] = FIXHR((d / (1<<5)));
else {
int idx = i < 18 ? i : i + 2;
mdct_win[j][idx] = FIXHR((d / (1<<5)));
}
}
}
/* NOTE: we do frequency inversion adter the MDCT by changing
the sign of the right window coefs */
for (j = 0; j < 4; j++) {
for (i = 0; i < 40; i += 2) {
mdct_win[j + 4][i ] = mdct_win[j][i ];
mdct_win[j + 4][i + 1] = -mdct_win[j][i + 1];
}
}
}
static av_cold int decode_init(AVCodecContext * avctx)
......@@ -1284,59 +1241,53 @@ static void compute_imdct(MPADecodeContext *s, GranuleDef *g,
mdct_long_end = sblimit;
}
buf = mdct_buf;
ptr = g->sb_hybrid;
for (j = 0; j < mdct_long_end; j++) {
int win_idx = (g->switch_point && j < 2) ? 0 : g->block_type;
/* apply window & overlap with previous buffer */
out_ptr = sb_samples + j;
/* select window */
win = mdct_win[win_idx + (4 & -(j & 1))];
s->mpadsp.RENAME(imdct36)(out_ptr, buf, ptr, win);
out_ptr += 18 * SBLIMIT;
ptr += 18;
buf += 18;
}
s->mpadsp.RENAME(imdct36_blocks)(sb_samples, mdct_buf, g->sb_hybrid,
mdct_long_end, g->switch_point,
g->block_type);
buf = mdct_buf + 4*18*(mdct_long_end >> 2) + (mdct_long_end & 3);
ptr = g->sb_hybrid + 18 * mdct_long_end;
for (j = mdct_long_end; j < sblimit; j++) {
/* select frequency inversion */
win = mdct_win[2 + (4 & -(j & 1))];
win = RENAME(ff_mdct_win)[2 + (4 & -(j & 1))];
out_ptr = sb_samples + j;
for (i = 0; i < 6; i++) {
*out_ptr = buf[i];
*out_ptr = buf[4*i];
out_ptr += SBLIMIT;
}
imdct12(out2, ptr + 0);
for (i = 0; i < 6; i++) {
*out_ptr = MULH3(out2[i ], win[i ], 1) + buf[i + 6*1];
buf[i + 6*2] = MULH3(out2[i + 6], win[i + 6], 1);
*out_ptr = MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*1)];
buf[4*(i + 6*2)] = MULH3(out2[i + 6], win[i + 6], 1);
out_ptr += SBLIMIT;
}
imdct12(out2, ptr + 1);
for (i = 0; i < 6; i++) {
*out_ptr = MULH3(out2[i ], win[i ], 1) + buf[i + 6*2];
buf[i + 6*0] = MULH3(out2[i + 6], win[i + 6], 1);
*out_ptr = MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*2)];
buf[4*(i + 6*0)] = MULH3(out2[i + 6], win[i + 6], 1);
out_ptr += SBLIMIT;
}
imdct12(out2, ptr + 2);
for (i = 0; i < 6; i++) {
buf[i + 6*0] = MULH3(out2[i ], win[i ], 1) + buf[i + 6*0];
buf[i + 6*1] = MULH3(out2[i + 6], win[i + 6], 1);
buf[i + 6*2] = 0;
buf[4*(i + 6*0)] = MULH3(out2[i ], win[i ], 1) + buf[4*(i + 6*0)];
buf[4*(i + 6*1)] = MULH3(out2[i + 6], win[i + 6], 1);
buf[4*(i + 6*2)] = 0;
}
ptr += 18;
buf += 18;
buf += (j&3) != 3 ? 1 : (4*18-3);
}
/* zero bands */
for (j = sblimit; j < SBLIMIT; j++) {
/* overlap */
out_ptr = sb_samples + j;
for (i = 0; i < 18; i++) {
*out_ptr = buf[i];
buf[i] = 0;
*out_ptr = buf[4*i];
buf[4*i] = 0;
out_ptr += SBLIMIT;
}
buf += 18;
buf += (j&3) != 3 ? 1 : (4*18-3);
}
}
......
......@@ -28,6 +28,8 @@ void ff_mpadsp_init(MPADSPContext *s)
DCTContext dct;
ff_dct_init(&dct, 5, DCT_II);
ff_init_mpadsp_tabs_float();
ff_init_mpadsp_tabs_fixed();
s->apply_window_float = ff_mpadsp_apply_window_float;
s->apply_window_fixed = ff_mpadsp_apply_window_fixed;
......@@ -35,8 +37,8 @@ void ff_mpadsp_init(MPADSPContext *s)
s->dct32_float = dct.dct32;
s->dct32_fixed = ff_dct32_fixed;
s->imdct36_float = ff_imdct36_float;
s->imdct36_fixed = ff_imdct36_fixed;
s->imdct36_blocks_float = ff_imdct36_blocks_float;
s->imdct36_blocks_fixed = ff_imdct36_blocks_fixed;
if (ARCH_ARM) ff_mpadsp_init_arm(s);
if (HAVE_MMX) ff_mpadsp_init_mmx(s);
......
......@@ -20,6 +20,7 @@
#define AVCODEC_MPEGAUDIODSP_H
#include <stdint.h>
#include "libavutil/common.h"
typedef struct MPADSPContext {
void (*apply_window_float)(float *synth_buf, float *window,
......@@ -28,8 +29,11 @@ typedef struct MPADSPContext {
int *dither_state, int16_t *samples, int incr);
void (*dct32_float)(float *dst, const float *src);
void (*dct32_fixed)(int *dst, const int *src);
void (*imdct36_float)(float *out, float *buf, float *in, float *win);
void (*imdct36_fixed)(int *out, int *buf, int *in, int *win);
void (*imdct36_blocks_float)(float *out, float *buf, float *in,
int count, int switch_point, int block_type);
void (*imdct36_blocks_fixed)(int *out, int *buf, int *in,
int count, int switch_point, int block_type);
} MPADSPContext;
void ff_mpadsp_init(MPADSPContext *s);
......@@ -63,7 +67,19 @@ void ff_mpadsp_apply_window_fixed(int32_t *synth_buf, int32_t *window,
int *dither_state, int16_t *samples,
int incr);
void ff_imdct36_fixed(int *out, int *buf, int *in, int *win);
void ff_imdct36_float(float *out, float *buf, float *in, float *win);
void ff_imdct36_blocks_float(float *out, float *buf, float *in,
int count, int switch_point, int block_type);
void ff_imdct36_blocks_fixed(int *out, int *buf, int *in,
int count, int switch_point, int block_type);
void ff_init_mpadsp_tabs_float(void);
void ff_init_mpadsp_tabs_fixed(void);
/** For SSE implementation, MDCT_BUF_SIZE/2 should be 128-bit aligned */
#define MDCT_BUF_SIZE FFALIGN(36, 2*4)
extern int ff_mdct_win_fixed[8][MDCT_BUF_SIZE];
extern float ff_mdct_win_float[8][MDCT_BUF_SIZE];
#endif /* AVCODEC_MPEGAUDIODSP_H */
......@@ -69,6 +69,12 @@ static inline int round_sample(int64_t *sum)
# define FIXHR(a) ((int)((a) * (1LL<<32) + 0.5))
#endif
/** Window for MDCT. Actually only the elements in [0,17] and
[MDCT_BUF_SIZE/2, MDCT_BUF_SIZE/2 + 17] are actually used. The rest
is just to preserve alignment for SIMD implementations.
*/
DECLARE_ALIGNED(16, INTFLOAT, RENAME(ff_mdct_win))[8][MDCT_BUF_SIZE];
DECLARE_ALIGNED(16, MPA_INT, RENAME(ff_mpa_synth_window))[512+256];
#define SUM8(op, sum, w, p) \
......@@ -204,6 +210,7 @@ void av_cold RENAME(ff_mpa_synth_init)(MPA_INT *window)
window[512 - i] = v;
}
// Needed for avoiding shuffles in ASM implementations
for(i=0; i < 8; i++)
for(j=0; j < 16; j++)
......@@ -214,6 +221,48 @@ void av_cold RENAME(ff_mpa_synth_init)(MPA_INT *window)
window[512+128+16*i+j] = window[64*i+48-j];
}
void RENAME(ff_init_mpadsp_tabs)(void)
{
int i, j;
/* compute mdct windows */
for (i = 0; i < 36; i++) {
for (j = 0; j < 4; j++) {
double d;
if (j == 2 && i % 3 != 1)
continue;
d = sin(M_PI * (i + 0.5) / 36.0);
if (j == 1) {
if (i >= 30) d = 0;
else if (i >= 24) d = sin(M_PI * (i - 18 + 0.5) / 12.0);
else if (i >= 18) d = 1;
} else if (j == 3) {
if (i < 6) d = 0;
else if (i < 12) d = sin(M_PI * (i - 6 + 0.5) / 12.0);
else if (i < 18) d = 1;
}
//merge last stage of imdct into the window coefficients
d *= 0.5 / cos(M_PI * (2 * i + 19) / 72);
if (j == 2)
RENAME(ff_mdct_win)[j][i/3] = FIXHR((d / (1<<5)));
else {
int idx = i < 18 ? i : i + (MDCT_BUF_SIZE/2 - 18);
RENAME(ff_mdct_win)[j][idx] = FIXHR((d / (1<<5)));
}
}
}
/* NOTE: we do frequency inversion adter the MDCT by changing
the sign of the right window coefs */
for (j = 0; j < 4; j++) {
for (i = 0; i < MDCT_BUF_SIZE; i += 2) {
RENAME(ff_mdct_win)[j + 4][i ] = RENAME(ff_mdct_win)[j][i ];
RENAME(ff_mdct_win)[j + 4][i + 1] = -RENAME(ff_mdct_win)[j][i + 1];
}
}
}
/* cos(pi*i/18) */
#define C1 FIXHR(0.98480775301220805936/2)
#define C2 FIXHR(0.93969262078590838405/2)
......@@ -227,43 +276,42 @@ void av_cold RENAME(ff_mpa_synth_init)(MPA_INT *window)
/* 0.5 / cos(pi*(2*i+1)/36) */
static const INTFLOAT icos36[9] = {
FIXR(0.50190991877167369479),
FIXR(0.51763809020504152469),
FIXR(0.51763809020504152469), //0
FIXR(0.55168895948124587824),
FIXR(0.61038729438072803416),
FIXR(0.70710678118654752439),
FIXR(0.70710678118654752439), //1
FIXR(0.87172339781054900991),
FIXR(1.18310079157624925896),
FIXR(1.93185165257813657349),
FIXR(1.93185165257813657349), //2
FIXR(5.73685662283492756461),
};
/* 0.5 / cos(pi*(2*i+1)/36) */
static const INTFLOAT icos36h[9] = {
FIXHR(0.50190991877167369479/2),
FIXHR(0.51763809020504152469/2),
FIXHR(0.51763809020504152469/2), //0
FIXHR(0.55168895948124587824/2),
FIXHR(0.61038729438072803416/2),
FIXHR(0.70710678118654752439/2),
FIXHR(0.70710678118654752439/2), //1
FIXHR(0.87172339781054900991/2),
FIXHR(1.18310079157624925896/4),
FIXHR(1.93185165257813657349/4),
FIXHR(1.93185165257813657349/4), //2
// FIXHR(5.73685662283492756461),
};
/* using Lee like decomposition followed by hand coded 9 points DCT */
void RENAME(ff_imdct36)(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in,
INTFLOAT *win)
static void imdct36(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in, INTFLOAT *win)
{
int i, j;
INTFLOAT t0, t1, t2, t3, s0, s1, s2, s3;
INTFLOAT tmp[18], *tmp1, *in1;
for(i=17;i>=1;i--)
for (i = 17; i >= 1; i--)
in[i] += in[i-1];
for(i=17;i>=3;i-=2)
for (i = 17; i >= 3; i -= 2)
in[i] += in[i-2];
for(j=0;j<2;j++) {
for (j = 0; j < 2; j++) {
tmp1 = tmp + j;
in1 = in + j;
......@@ -295,7 +343,7 @@ void RENAME(ff_imdct36)(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in,
}
i = 0;
for(j=0;j<4;j++) {
for (j = 0; j < 4; j++) {
t0 = tmp[i];
t1 = tmp[i + 2];
s0 = t1 + t0;
......@@ -303,22 +351,22 @@ void RENAME(ff_imdct36)(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in,
t2 = tmp[i + 1];
t3 = tmp[i + 3];
s1 = MULH3(t3 + t2, icos36h[j], 2);
s3 = MULLx(t3 - t2, icos36[8 - j], FRAC_BITS);
s1 = MULH3(t3 + t2, icos36h[ j], 2);
s3 = MULLx(t3 - t2, icos36 [8 - j], FRAC_BITS);
t0 = s0 + s1;
t1 = s0 - s1;
out[(9 + j)*SBLIMIT] = MULH3(t1, win[9 + j], 1) + buf[9 + j];
out[(8 - j)*SBLIMIT] = MULH3(t1, win[8 - j], 1) + buf[8 - j];
buf[9 + j] = MULH3(t0, win[20 + 9 + j], 1);
buf[8 - j] = MULH3(t0, win[20 + 8 - j], 1);
out[(9 + j) * SBLIMIT] = MULH3(t1, win[ 9 + j], 1) + buf[4*(9 + j)];
out[(8 - j) * SBLIMIT] = MULH3(t1, win[ 8 - j], 1) + buf[4*(8 - j)];
buf[4 * ( 9 + j )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + 9 + j], 1);
buf[4 * ( 8 - j )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + 8 - j], 1);
t0 = s2 + s3;
t1 = s2 - s3;
out[(9 + 8 - j)*SBLIMIT] = MULH3(t1, win[9 + 8 - j], 1) + buf[9 + 8 - j];
out[( j)*SBLIMIT] = MULH3(t1, win[ j], 1) + buf[ j];
buf[9 + 8 - j] = MULH3(t0, win[20 + 9 + 8 - j], 1);
buf[ + j] = MULH3(t0, win[20 + j], 1);
out[(9 + 8 - j) * SBLIMIT] = MULH3(t1, win[ 9 + 8 - j], 1) + buf[4*(9 + 8 - j)];
out[ j * SBLIMIT] = MULH3(t1, win[ j], 1) + buf[4*( j)];
buf[4 * ( 9 + 8 - j )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + 9 + 8 - j], 1);
buf[4 * ( j )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + j], 1);
i += 4;
}
......@@ -326,9 +374,28 @@ void RENAME(ff_imdct36)(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in,
s1 = MULH3(tmp[17], icos36h[4], 2);
t0 = s0 + s1;
t1 = s0 - s1;
out[(9 + 4)*SBLIMIT] = MULH3(t1, win[9 + 4], 1) + buf[9 + 4];
out[(8 - 4)*SBLIMIT] = MULH3(t1, win[8 - 4], 1) + buf[8 - 4];
buf[9 + 4] = MULH3(t0, win[20 + 9 + 4], 1);
buf[8 - 4] = MULH3(t0, win[20 + 8 - 4], 1);
out[(9 + 4) * SBLIMIT] = MULH3(t1, win[ 9 + 4], 1) + buf[4*(9 + 4)];
out[(8 - 4) * SBLIMIT] = MULH3(t1, win[ 8 - 4], 1) + buf[4*(8 - 4)];
buf[4 * ( 9 + 4 )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + 9 + 4], 1);
buf[4 * ( 8 - 4 )] = MULH3(t0, win[MDCT_BUF_SIZE/2 + 8 - 4], 1);
}
void RENAME(ff_imdct36_blocks)(INTFLOAT *out, INTFLOAT *buf, INTFLOAT *in,
int count, int switch_point, int block_type)
{
int j;
for (j=0 ; j < count; j++) {
/* apply window & overlap with previous buffer */
/* select window */
int win_idx = (switch_point && j < 2) ? 0 : block_type;
INTFLOAT *win = RENAME(ff_mdct_win)[win_idx + (4 & -(j & 1))];
imdct36(out, buf, in, win);
in += 18;
buf += ((j&3) != 3 ? 1 : (72-3));
out++;
}
}
This diff is collapsed.
......@@ -29,6 +29,12 @@ void ff_imdct36_float_sse2(float *out, float *buf, float *in, float *win);
void ff_imdct36_float_sse3(float *out, float *buf, float *in, float *win);
void ff_imdct36_float_ssse3(float *out, float *buf, float *in, float *win);
void ff_imdct36_float_avx(float *out, float *buf, float *in, float *win);
void ff_four_imdct36_float_sse(float *out, float *buf, float *in, float *win,
float *tmpbuf);
void ff_four_imdct36_float_avx(float *out, float *buf, float *in, float *win,
float *tmpbuf);
DECLARE_ALIGNED(16, static float, mdct_win_sse)[2][4][4*40];
#define MACS(rt, ra, rb) rt+=(ra)*(rb)
#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,
*out = sum;
}
#define DECL_IMDCT_BLOCKS(CPU1, CPU2) \
static void imdct36_blocks_ ## CPU1(float *out, float *buf, float *in, \
int count, int switch_point, int block_type) \
{ \
int align_end = count - (count & 3); \
int j; \
for (j = 0; j < align_end; j+= 4) { \
LOCAL_ALIGNED_16(float, tmpbuf, [1024]); \
float *win = mdct_win_sse[switch_point && j < 4][block_type]; \
/* apply window & overlap with previous buffer */ \
\
/* select window */ \
ff_four_imdct36_float_ ## CPU2(out, buf, in, win, tmpbuf); \
in += 4*18; \
buf += 4*18; \
out += 4; \
} \
for (; j < count; j++) { \
/* apply window & overlap with previous buffer */ \
\
/* select window */ \
int win_idx = (switch_point && j < 2) ? 0 : block_type; \
float *win = ff_mdct_win_float[win_idx + (4 & -(j & 1))]; \
\
ff_imdct36_float_ ## CPU1(out, buf, in, win); \
\
in += 18; \
buf++; \
out++; \
} \
}
DECL_IMDCT_BLOCKS(sse,sse)
DECL_IMDCT_BLOCKS(sse2,sse)
DECL_IMDCT_BLOCKS(sse3,sse)
DECL_IMDCT_BLOCKS(ssse3,sse)
DECL_IMDCT_BLOCKS(avx,avx)
void ff_mpadsp_init_mmx(MPADSPContext *s)
{
int mm_flags = av_get_cpu_flags();
int i, j;
for (j = 0; j < 4; j++) {
for (i = 0; i < 40; i ++) {
mdct_win_sse[0][j][4*i ] = ff_mdct_win_float[j ][i];
mdct_win_sse[0][j][4*i + 1] = ff_mdct_win_float[j + 4][i];
mdct_win_sse[0][j][4*i + 2] = ff_mdct_win_float[j ][i];
mdct_win_sse[0][j][4*i + 3] = ff_mdct_win_float[j + 4][i];
mdct_win_sse[1][j][4*i ] = ff_mdct_win_float[0 ][i];
mdct_win_sse[1][j][4*i + 1] = ff_mdct_win_float[4 ][i];
mdct_win_sse[1][j][4*i + 2] = ff_mdct_win_float[j ][i];
mdct_win_sse[1][j][4*i + 3] = ff_mdct_win_float[j + 4][i];
}
}
if (mm_flags & AV_CPU_FLAG_SSE2) {
s->apply_window_float = apply_window_mp3;
}
if (HAVE_YASM && mm_flags & AV_CPU_FLAG_AVX && HAVE_AVX) {
s->imdct36_float = ff_imdct36_float_avx;
}
else if (HAVE_YASM && mm_flags & AV_CPU_FLAG_SSSE3 && HAVE_SSE) {
s->imdct36_float = ff_imdct36_float_ssse3;
}
else if (HAVE_YASM && mm_flags & AV_CPU_FLAG_SSE3 && HAVE_SSE) {
s->imdct36_float = ff_imdct36_float_sse3;
}
else if (HAVE_YASM && mm_flags & AV_CPU_FLAG_SSE2 && HAVE_SSE) {
s->imdct36_float = ff_imdct36_float_sse2;
}
else if (HAVE_YASM && mm_flags & AV_CPU_FLAG_SSE && HAVE_SSE) {
s->imdct36_float = ff_imdct36_float_sse;
#if HAVE_YASM
if (mm_flags & AV_CPU_FLAG_AVX && HAVE_AVX) {
s->imdct36_blocks_float = imdct36_blocks_avx;
#if HAVE_SSE
} else if (mm_flags & AV_CPU_FLAG_SSSE3) {
s->imdct36_blocks_float = imdct36_blocks_ssse3;
} else if (mm_flags & AV_CPU_FLAG_SSE3) {
s->imdct36_blocks_float = imdct36_blocks_sse3;
} else if (mm_flags & AV_CPU_FLAG_SSE2) {
s->imdct36_blocks_float = imdct36_blocks_sse2;
} else if (mm_flags & AV_CPU_FLAG_SSE) {
s->imdct36_blocks_float = imdct36_blocks_sse;
#endif /* HAVE_SSE */
}
#endif /* HAVE_YASM */
}
......@@ -931,6 +931,8 @@ AVX_INSTR minpd, 1, 0, 1
AVX_INSTR minps, 1, 0, 1
AVX_INSTR minsd, 1, 0, 1
AVX_INSTR minss, 1, 0, 1
AVX_INSTR movhlps, 1, 0, 0
AVX_INSTR movlhps, 1, 0, 0
AVX_INSTR movsd, 1, 0, 0
AVX_INSTR movss, 1, 0, 0
AVX_INSTR mpsadbw, 0, 1, 0
......
......@@ -19,7 +19,8 @@ OBJS-$(HAVE_MMX) += x86/rgb2rgb.o \
x86/swscale_mmx.o \
x86/yuv2rgb_mmx.o
OBJS-$(HAVE_VIS) += sparc/yuv2rgb_vis.o
MMX-OBJS-$(HAVE_YASM) += x86/output.o \
MMX-OBJS-$(HAVE_YASM) += x86/input.o \
x86/output.o \
x86/scale.o
$(SUBDIR)x86/swscale_mmx.o: CFLAGS += $(NOREDZONE_FLAGS)
......
......@@ -27,19 +27,19 @@
#include "swscale.h"
#include "rgb2rgb.h"
#define SIZE 1000
#define SIZE 1000
#define srcByte 0x55
#define dstByte 0xBB
#define FUNC(s,d,n) {s,d,#n,n}
#define FUNC(s, d, n) { s, d, #n, n }
int main(int argc, char **argv)
{
int i, funcNum;
uint8_t *srcBuffer = av_malloc(SIZE);
uint8_t *dstBuffer = av_malloc(SIZE);
int failedNum=0;
int passedNum=0;
int failedNum = 0;
int passedNum = 0;
if (!srcBuffer || !dstBuffer)
return -1;
......@@ -47,7 +47,7 @@ int main(int argc, char **argv)
av_log(NULL, AV_LOG_INFO, "memory corruption test ...\n");
sws_rgb2rgb_init();
for(funcNum=0; ; funcNum++) {
for (funcNum = 0; ; funcNum++) {
struct func_info_s {
int src_bpp;
int dst_bpp;
......@@ -85,67 +85,78 @@ int main(int argc, char **argv)
FUNC(0, 0, NULL)
};
int width;
int failed=0;
int srcBpp=0;
int dstBpp=0;
int failed = 0;
int srcBpp = 0;
int dstBpp = 0;
if (!func_info[funcNum].func) break;
if (!func_info[funcNum].func)
break;
av_log(NULL, AV_LOG_INFO,".");
av_log(NULL, AV_LOG_INFO, ".");
memset(srcBuffer, srcByte, SIZE);
for(width=63; width>0; width--) {
for (width = 63; width > 0; width--) {
int dstOffset;
for(dstOffset=128; dstOffset<196; dstOffset+=4) {
for (dstOffset = 128; dstOffset < 196; dstOffset += 4) {
int srcOffset;
memset(dstBuffer, dstByte, SIZE);
for(srcOffset=128; srcOffset<196; srcOffset+=4) {
uint8_t *src= srcBuffer+srcOffset;
uint8_t *dst= dstBuffer+dstOffset;
const char *name=NULL;
for (srcOffset = 128; srcOffset < 196; srcOffset += 4) {
uint8_t *src = srcBuffer + srcOffset;
uint8_t *dst = dstBuffer + dstOffset;
const char *name = NULL;
if(failed) break; //don't fill the screen with shit ...
// don't fill the screen with shit ...
if (failed)
break;
srcBpp = func_info[funcNum].src_bpp;
dstBpp = func_info[funcNum].dst_bpp;
name = func_info[funcNum].name;
func_info[funcNum].func(src, dst, width*srcBpp);
func_info[funcNum].func(src, dst, width * srcBpp);
if(!srcBpp) break;
if (!srcBpp)
break;
for(i=0; i<SIZE; i++) {
if(srcBuffer[i]!=srcByte) {
av_log(NULL, AV_LOG_INFO, "src damaged at %d w:%d src:%d dst:%d %s\n",
for (i = 0; i < SIZE; i++) {
if (srcBuffer[i] != srcByte) {
av_log(NULL, AV_LOG_INFO,
"src damaged at %d w:%d src:%d dst:%d %s\n",
i, width, srcOffset, dstOffset, name);
failed=1;
failed = 1;
break;
}
}
for(i=0; i<dstOffset; i++) {
if(dstBuffer[i]!=dstByte) {
av_log(NULL, AV_LOG_INFO, "dst damaged at %d w:%d src:%d dst:%d %s\n",
for (i = 0; i < dstOffset; i++) {
if (dstBuffer[i] != dstByte) {
av_log(NULL, AV_LOG_INFO,
"dst damaged at %d w:%d src:%d dst:%d %s\n",
i, width, srcOffset, dstOffset, name);
failed=1;
failed = 1;
break;
}
}
for(i=dstOffset + width*dstBpp; i<SIZE; i++) {
if(dstBuffer[i]!=dstByte) {
av_log(NULL, AV_LOG_INFO, "dst damaged at %d w:%d src:%d dst:%d %s\n",
for (i = dstOffset + width * dstBpp; i < SIZE; i++) {
if (dstBuffer[i] != dstByte) {
av_log(NULL, AV_LOG_INFO,
"dst damaged at %d w:%d src:%d dst:%d %s\n",
i, width, srcOffset, dstOffset, name);
failed=1;
failed = 1;
break;
}
}
}
}
}
if(failed) failedNum++;
else if(srcBpp) passedNum++;
if (failed)
failedNum++;
else if (srcBpp)
passedNum++;
}
av_log(NULL, AV_LOG_INFO, "\n%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum);
av_log(NULL, AV_LOG_INFO,
"\n%d converters passed, %d converters randomly overwrote memory\n",
passedNum, failedNum);
return failedNum;
}
......@@ -24,13 +24,18 @@
#ifndef SWSCALE_PPC_YUV2RGB_ALTIVEC_H
#define SWSCALE_PPC_YUV2RGB_ALTIVEC_H
#define YUV2PACKEDX_HEADER(suffix) \
void ff_yuv2 ## suffix ## _X_altivec(SwsContext *c, const int16_t *lumFilter, \
const int16_t **lumSrc, int lumFilterSize, \
const int16_t *chrFilter, const int16_t **chrUSrc, \
const int16_t **chrVSrc, int chrFilterSize, \
const int16_t **alpSrc, uint8_t *dest, \
int dstW, int dstY);
#define YUV2PACKEDX_HEADER(suffix) \
void ff_yuv2 ## suffix ## _X_altivec(SwsContext *c, \
const int16_t *lumFilter, \
const int16_t **lumSrc, \
int lumFilterSize, \
const int16_t *chrFilter, \
const int16_t **chrUSrc, \
const int16_t **chrVSrc, \
int chrFilterSize, \
const int16_t **alpSrc, \
uint8_t *dest, \
int dstW, int dstY);
YUV2PACKEDX_HEADER(abgr);
YUV2PACKEDX_HEADER(bgra);
......
......@@ -36,32 +36,33 @@ extern void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb24tobgr16)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb24tobgr15)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb32tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb32to16) (const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb32to15) (const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb15to16) (const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb32to16)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb32to15)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb15to16)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb15tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb15to32) (const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb16to15) (const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb15to32)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb16to15)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb16tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb16to32) (const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb16to32)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb24tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb24to16) (const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb24to15) (const uint8_t *src, uint8_t *dst, int src_size);
extern void (*shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb24to16)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb24to15)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb32tobgr16)(const uint8_t *src, uint8_t *dst, int src_size);
extern void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, int src_size);
void rgb24to32 (const uint8_t *src, uint8_t *dst, int src_size);
void rgb32to24 (const uint8_t *src, uint8_t *dst, int src_size);
extern void (*shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size);
void rgb24to32(const uint8_t *src, uint8_t *dst, int src_size);
void rgb32to24(const uint8_t *src, uint8_t *dst, int src_size);
void rgb16tobgr32(const uint8_t *src, uint8_t *dst, int src_size);
void rgb16to24 (const uint8_t *src, uint8_t *dst, int src_size);
void rgb16to24(const uint8_t *src, uint8_t *dst, int src_size);
void rgb16tobgr16(const uint8_t *src, uint8_t *dst, int src_size);
void rgb16tobgr15(const uint8_t *src, uint8_t *dst, int src_size);
void rgb15tobgr32(const uint8_t *src, uint8_t *dst, int src_size);
void rgb15to24 (const uint8_t *src, uint8_t *dst, int src_size);
void rgb15to24(const uint8_t *src, uint8_t *dst, int src_size);
void rgb15tobgr16(const uint8_t *src, uint8_t *dst, int src_size);
void rgb15tobgr15(const uint8_t *src, uint8_t *dst, int src_size);
void bgr8torgb8 (const uint8_t *src, uint8_t *dst, int src_size);
void bgr8torgb8(const uint8_t *src, uint8_t *dst, int src_size);
void shuffle_bytes_0321(const uint8_t *src, uint8_t *dst, int src_size);
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
int srcStride1, int srcStride2,
int srcStride3, int dstStride);
extern void (*uyvytoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
int width, int height,
int lumStride, int chromStride, int srcStride);
......
This diff is collapsed.
......@@ -1637,12 +1637,16 @@ rgb16_32_wrapper(PIX_FMT_RGB32, rgb32, 0, 0, 16, 0, 0x00FF, 0xFF00, 0xFF0
rgb16_32_wrapper(PIX_FMT_RGB32_1, rgb321, 0, 0, 16, 8, 0x00FF, 0xFF00, 0xFF0000, 8, 0, 8, RGB2YUV_SHIFT+8)
rgb16_32_wrapper(PIX_FMT_BGR565LE, bgr16le, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, 11, 5, 0, RGB2YUV_SHIFT+8)
rgb16_32_wrapper(PIX_FMT_BGR555LE, bgr15le, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, 10, 5, 0, RGB2YUV_SHIFT+7)
rgb16_32_wrapper(PIX_FMT_BGR444LE, bgr12le, 0, 0, 0, 0, 0x000F, 0x00F0, 0x0F00, 8, 4, 0, RGB2YUV_SHIFT+4)
rgb16_32_wrapper(PIX_FMT_RGB565LE, rgb16le, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11, RGB2YUV_SHIFT+8)
rgb16_32_wrapper(PIX_FMT_RGB555LE, rgb15le, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10, RGB2YUV_SHIFT+7)
rgb16_32_wrapper(PIX_FMT_RGB444LE, rgb12le, 0, 0, 0, 0, 0x0F00, 0x00F0, 0x000F, 0, 4, 8, RGB2YUV_SHIFT+4)
rgb16_32_wrapper(PIX_FMT_BGR565BE, bgr16be, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, 11, 5, 0, RGB2YUV_SHIFT+8)
rgb16_32_wrapper(PIX_FMT_BGR555BE, bgr15be, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, 10, 5, 0, RGB2YUV_SHIFT+7)
rgb16_32_wrapper(PIX_FMT_BGR444BE, bgr12be, 0, 0, 0, 0, 0x000F, 0x00F0, 0x0F00, 8, 4, 0, RGB2YUV_SHIFT+4)
rgb16_32_wrapper(PIX_FMT_RGB565BE, rgb16be, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11, RGB2YUV_SHIFT+8)
rgb16_32_wrapper(PIX_FMT_RGB555BE, rgb15be, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10, RGB2YUV_SHIFT+7)
rgb16_32_wrapper(PIX_FMT_RGB444BE, rgb12be, 0, 0, 0, 0, 0x0F00, 0x00F0, 0x000F, 0, 4, 8, RGB2YUV_SHIFT+4)
static void gbr24pToUV_half_c(uint16_t *dstU, uint16_t *dstV,
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)
case PIX_FMT_BGR565BE: c->chrToYV12 = bgr16beToUV_half_c; break;
case PIX_FMT_BGR555LE: c->chrToYV12 = bgr15leToUV_half_c; break;
case PIX_FMT_BGR555BE: c->chrToYV12 = bgr15beToUV_half_c; break;
case PIX_FMT_BGR444LE: c->chrToYV12 = bgr12leToUV_half_c; break;
case PIX_FMT_BGR444BE: c->chrToYV12 = bgr12beToUV_half_c; break;
case PIX_FMT_BGR32 : c->chrToYV12 = rgb32ToUV_half_c; break;
case PIX_FMT_BGR32_1 : c->chrToYV12 = rgb321ToUV_half_c; break;
case PIX_FMT_RGB24 : c->chrToYV12 = rgb24ToUV_half_c; break;
......@@ -2895,6 +2901,8 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
case PIX_FMT_RGB555LE: c->chrToYV12 = rgb15leToUV_half_c; break;
case PIX_FMT_RGB555BE: c->chrToYV12 = rgb15beToUV_half_c; break;
case PIX_FMT_GBR24P : c->chrToYV12 = gbr24pToUV_half_c; break;
case PIX_FMT_RGB444LE: c->chrToYV12 = rgb12leToUV_half_c; break;
case PIX_FMT_RGB444BE: c->chrToYV12 = rgb12beToUV_half_c; break;
}
} else {
switch(srcFormat) {
......@@ -2909,6 +2917,8 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
case PIX_FMT_BGR565BE: c->chrToYV12 = bgr16beToUV_c; break;
case PIX_FMT_BGR555LE: c->chrToYV12 = bgr15leToUV_c; break;
case PIX_FMT_BGR555BE: c->chrToYV12 = bgr15beToUV_c; break;
case PIX_FMT_BGR444LE: c->chrToYV12 = bgr12leToUV_c; break;
case PIX_FMT_BGR444BE: c->chrToYV12 = bgr12beToUV_c; break;
case PIX_FMT_BGR32 : c->chrToYV12 = rgb32ToUV_c; break;
case PIX_FMT_BGR32_1 : c->chrToYV12 = rgb321ToUV_c; break;
case PIX_FMT_RGB24 : c->chrToYV12 = rgb24ToUV_c; break;
......@@ -2916,6 +2926,8 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
case PIX_FMT_RGB565BE: c->chrToYV12 = rgb16beToUV_c; break;
case PIX_FMT_RGB555LE: c->chrToYV12 = rgb15leToUV_c; break;
case PIX_FMT_RGB555BE: c->chrToYV12 = rgb15beToUV_c; break;
case PIX_FMT_RGB444LE: c->chrToYV12 = rgb12leToUV_c; break;
case PIX_FMT_RGB444BE: c->chrToYV12 = rgb12beToUV_c; break;
}
}
......@@ -2960,11 +2972,15 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
case PIX_FMT_BGR565BE : c->lumToYV12 = bgr16beToY_c; break;
case PIX_FMT_BGR555LE : c->lumToYV12 = bgr15leToY_c; break;
case PIX_FMT_BGR555BE : c->lumToYV12 = bgr15beToY_c; break;
case PIX_FMT_BGR444LE : c->lumToYV12 = bgr12leToY_c; break;
case PIX_FMT_BGR444BE : c->lumToYV12 = bgr12beToY_c; break;
case PIX_FMT_RGB24 : c->lumToYV12 = rgb24ToY_c; break;
case PIX_FMT_RGB565LE : c->lumToYV12 = rgb16leToY_c; break;
case PIX_FMT_RGB565BE : c->lumToYV12 = rgb16beToY_c; break;
case PIX_FMT_RGB555LE : c->lumToYV12 = rgb15leToY_c; break;
case PIX_FMT_RGB555BE : c->lumToYV12 = rgb15beToY_c; break;
case PIX_FMT_RGB444LE : c->lumToYV12 = rgb12leToY_c; break;
case PIX_FMT_RGB444BE : c->lumToYV12 = rgb12beToY_c; break;
case PIX_FMT_RGB8 :
case PIX_FMT_BGR8 :
case PIX_FMT_PAL8 :
......
......@@ -135,7 +135,6 @@ const char *swscale_license(void);
*/
const int *sws_getCoefficients(int colorspace);
// when used for filters they must have an odd number of elements
// coeffs cannot be shared between vectors
typedef struct {
......@@ -235,9 +234,9 @@ struct SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat
* the destination image
* @return the height of the output slice
*/
int sws_scale(struct SwsContext *c, const uint8_t* const srcSlice[],
int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[],
const int srcStride[], int srcSliceY, int srcSliceH,
uint8_t* const dst[], const int dstStride[]);
uint8_t *const dst[], const int dstStride[]);
/**
* @param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x]
......
This diff is collapsed.
......@@ -129,10 +129,10 @@ const static FormatEntry format_entries[PIX_FMT_NB] = {
[PIX_FMT_YUV422P16BE] = { 1 , 1 },
[PIX_FMT_YUV444P16LE] = { 1 , 1 },
[PIX_FMT_YUV444P16BE] = { 1 , 1 },
[PIX_FMT_RGB444LE] = { 0 , 1 },
[PIX_FMT_RGB444BE] = { 0 , 1 },
[PIX_FMT_BGR444LE] = { 0 , 1 },
[PIX_FMT_BGR444BE] = { 0 , 1 },
[PIX_FMT_RGB444LE] = { 1 , 1 },
[PIX_FMT_RGB444BE] = { 1 , 1 },
[PIX_FMT_BGR444LE] = { 1 , 1 },
[PIX_FMT_BGR444BE] = { 1 , 1 },
[PIX_FMT_Y400A] = { 1 , 0 },
[PIX_FMT_BGR48BE] = { 1 , 1 },
[PIX_FMT_BGR48LE] = { 1 , 1 },
......
;******************************************************************************
;* x86-optimized input routines; does shuffling of packed
;* YUV formats into individual planes, and converts RGB
;* into YUV planes also.
;* Copyright (c) 2012 Ronald S. Bultje <rsbultje@gmail.com>
;*
;* This file is part of Libav.
;*
;* Libav is free software; you can redistribute it and/or
;* modify it under the terms of the GNU Lesser General Public
;* License as published by the Free Software Foundation; either
;* version 2.1 of the License, or (at your option) any later version.
;*
;* Libav is distributed in the hope that it will be useful,
;* but WITHOUT ANY WARRANTY; without even the implied warranty of
;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;* Lesser General Public License for more details.
;*
;* You should have received a copy of the GNU Lesser General Public
;* License along with Libav; if not, write to the Free Software
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
SECTION_RODATA
SECTION .text
;-----------------------------------------------------------------------------
; YUYV/UYVY/NV12/NV21 packed pixel shuffling.
;
; void <fmt>ToY_<opt>(uint8_t *dst, const uint8_t *src, int w);
; and
; void <fmt>toUV_<opt>(uint8_t *dstU, uint8_t *dstV, const uint8_t *src,
; const uint8_t *unused, int w);
;-----------------------------------------------------------------------------
; %1 = a (aligned) or u (unaligned)
; %2 = yuyv or uyvy
%macro LOOP_YUYV_TO_Y 2
.loop_%1:
mov%1 m0, [srcq+wq*2] ; (byte) { Y0, U0, Y1, V0, ... }
mov%1 m1, [srcq+wq*2+mmsize] ; (byte) { Y8, U4, Y9, V4, ... }
%ifidn %2, yuyv
pand m0, m2 ; (word) { Y0, Y1, ..., Y7 }
pand m1, m2 ; (word) { Y8, Y9, ..., Y15 }
%else ; uyvy
psrlw m0, 8 ; (word) { Y0, Y1, ..., Y7 }
psrlw m1, 8 ; (word) { Y8, Y9, ..., Y15 }
%endif ; yuyv/uyvy
packuswb m0, m1 ; (byte) { Y0, ..., Y15 }
mova [dstq+wq], m0
add wq, mmsize
jl .loop_%1
REP_RET
%endmacro
; %1 = nr. of XMM registers
; %2 = yuyv or uyvy
; %3 = if specified, it means that unaligned and aligned code in loop
; will be the same (i.e. YUYV+AVX), and thus we don't need to
; split the loop in an aligned and unaligned case
%macro YUYV_TO_Y_FN 2-3
cglobal %2ToY, 5, 5, %1, dst, unused0, unused1, src, w
%ifdef ARCH_X86_64
movsxd wq, wd
%endif
add dstq, wq
%if mmsize == 16
test srcq, 15
%endif
lea srcq, [srcq+wq*2]
%ifidn %2, yuyv
pcmpeqb m2, m2 ; (byte) { 0xff } x 16
psrlw m2, 8 ; (word) { 0x00ff } x 8
%endif ; yuyv
%if mmsize == 16
jnz .loop_u_start
neg wq
LOOP_YUYV_TO_Y a, %2
.loop_u_start:
neg wq
LOOP_YUYV_TO_Y u, %2
%else ; mmsize == 8
neg wq
LOOP_YUYV_TO_Y a, %2
%endif ; mmsize == 8/16
%endmacro
; %1 = a (aligned) or u (unaligned)
; %2 = yuyv or uyvy
%macro LOOP_YUYV_TO_UV 2
.loop_%1:
%ifidn %2, yuyv
mov%1 m0, [srcq+wq*4] ; (byte) { Y0, U0, Y1, V0, ... }
mov%1 m1, [srcq+wq*4+mmsize] ; (byte) { Y8, U4, Y9, V4, ... }
psrlw m0, 8 ; (word) { U0, V0, ..., U3, V3 }
psrlw m1, 8 ; (word) { U4, V4, ..., U7, V7 }
%else ; uyvy
%if cpuflag(avx)
vpand m0, m2, [srcq+wq*4] ; (word) { U0, V0, ..., U3, V3 }
vpand m1, m2, [srcq+wq*4+mmsize] ; (word) { U4, V4, ..., U7, V7 }
%else
mov%1 m0, [srcq+wq*4] ; (byte) { Y0, U0, Y1, V0, ... }
mov%1 m1, [srcq+wq*4+mmsize] ; (byte) { Y8, U4, Y9, V4, ... }
pand m0, m2 ; (word) { U0, V0, ..., U3, V3 }
pand m1, m2 ; (word) { U4, V4, ..., U7, V7 }
%endif
%endif ; yuyv/uyvy
packuswb m0, m1 ; (byte) { U0, V0, ..., U7, V7 }
pand m1, m0, m2 ; (word) { U0, U1, ..., U7 }
psrlw m0, 8 ; (word) { V0, V1, ..., V7 }
%if mmsize == 16
packuswb m1, m0 ; (byte) { U0, ... U7, V1, ... V7 }
movh [dstUq+wq], m1
movhps [dstVq+wq], m1
%else ; mmsize == 8
packuswb m1, m1 ; (byte) { U0, ... U3 }
packuswb m0, m0 ; (byte) { V0, ... V3 }
movh [dstUq+wq], m1
movh [dstVq+wq], m0
%endif ; mmsize == 8/16
add wq, mmsize / 2
jl .loop_%1
REP_RET
%endmacro
; %1 = nr. of XMM registers
; %2 = yuyv or uyvy
; %3 = if specified, it means that unaligned and aligned code in loop
; will be the same (i.e. UYVY+AVX), and thus we don't need to
; split the loop in an aligned and unaligned case
%macro YUYV_TO_UV_FN 2-3
cglobal %2ToUV, 4, 5, %1, dstU, dstV, unused, src, w
%ifdef ARCH_X86_64
movsxd wq, r5m
%else ; x86-32
mov wq, r5m
%endif
add dstUq, wq
add dstVq, wq
%if mmsize == 16 && %0 == 2
test srcq, 15
%endif
lea srcq, [srcq+wq*4]
pcmpeqb m2, m2 ; (byte) { 0xff } x 16
psrlw m2, 8 ; (word) { 0x00ff } x 8
; NOTE: if uyvy+avx, u/a are identical
%if mmsize == 16 && %0 == 2
jnz .loop_u_start
neg wq
LOOP_YUYV_TO_UV a, %2
.loop_u_start:
neg wq
LOOP_YUYV_TO_UV u, %2
%else ; mmsize == 8
neg wq
LOOP_YUYV_TO_UV a, %2
%endif ; mmsize == 8/16
%endmacro
; %1 = a (aligned) or u (unaligned)
; %2 = nv12 or nv21
%macro LOOP_NVXX_TO_UV 2
.loop_%1:
mov%1 m0, [srcq+wq*2] ; (byte) { U0, V0, U1, V1, ... }
mov%1 m1, [srcq+wq*2+mmsize] ; (byte) { U8, V8, U9, V9, ... }
pand m2, m0, m5 ; (word) { U0, U1, ..., U7 }
pand m3, m1, m5 ; (word) { U8, U9, ..., U15 }
psrlw m0, 8 ; (word) { V0, V1, ..., V7 }
psrlw m1, 8 ; (word) { V8, V9, ..., V15 }
packuswb m2, m3 ; (byte) { U0, ..., U15 }
packuswb m0, m1 ; (byte) { V0, ..., V15 }
%ifidn %2, nv12
mova [dstUq+wq], m2
mova [dstVq+wq], m0
%else ; nv21
mova [dstVq+wq], m2
mova [dstUq+wq], m0
%endif ; nv12/21
add wq, mmsize
jl .loop_%1
REP_RET
%endmacro
; %1 = nr. of XMM registers
; %2 = nv12 or nv21
%macro NVXX_TO_UV_FN 2
cglobal %2ToUV, 4, 5, %1, dstU, dstV, unused, src, w
%ifdef ARCH_X86_64
movsxd wq, r5m
%else ; x86-32
mov wq, r5m
%endif
add dstUq, wq
add dstVq, wq
%if mmsize == 16
test srcq, 15
%endif
lea srcq, [srcq+wq*2]
pcmpeqb m5, m5 ; (byte) { 0xff } x 16
psrlw m5, 8 ; (word) { 0x00ff } x 8
%if mmsize == 16
jnz .loop_u_start
neg wq
LOOP_NVXX_TO_UV a, %2
.loop_u_start:
neg wq
LOOP_NVXX_TO_UV u, %2
%else ; mmsize == 8
neg wq
LOOP_NVXX_TO_UV a, %2
%endif ; mmsize == 8/16
%endmacro
%ifdef ARCH_X86_32
INIT_MMX mmx
YUYV_TO_Y_FN 0, yuyv
YUYV_TO_Y_FN 0, uyvy
YUYV_TO_UV_FN 0, yuyv
YUYV_TO_UV_FN 0, uyvy
NVXX_TO_UV_FN 0, nv12
NVXX_TO_UV_FN 0, nv21
%endif
INIT_XMM sse2
YUYV_TO_Y_FN 3, yuyv
YUYV_TO_Y_FN 2, uyvy
YUYV_TO_UV_FN 3, yuyv
YUYV_TO_UV_FN 3, uyvy
NVXX_TO_UV_FN 5, nv12
NVXX_TO_UV_FN 5, nv21
INIT_XMM avx
; in theory, we could write a yuy2-to-y using vpand (i.e. AVX), but
; that's not faster in practice
YUYV_TO_UV_FN 3, yuyv
YUYV_TO_UV_FN 3, uyvy, 1
NVXX_TO_UV_FN 5, nv12
NVXX_TO_UV_FN 5, nv21
......@@ -307,6 +307,26 @@ VSCALE_FUNCS(sse2, sse2);
VSCALE_FUNC(16, sse4);
VSCALE_FUNCS(avx, avx);
#define INPUT_UV_FUNC(fmt, opt) \
extern void ff_ ## fmt ## ToUV_ ## opt(uint8_t *dstU, uint8_t *dstV, \
const uint8_t *src, const uint8_t *unused1, \
int w, uint32_t *unused2)
#define INPUT_FUNC(fmt, opt) \
extern void ff_ ## fmt ## ToY_ ## opt(uint8_t *dst, const uint8_t *src, \
int w, uint32_t *unused); \
INPUT_UV_FUNC(fmt, opt)
#define INPUT_FUNCS(opt) \
INPUT_FUNC(uyvy, opt); \
INPUT_FUNC(yuyv, opt); \
INPUT_UV_FUNC(nv12, opt); \
INPUT_UV_FUNC(nv21, opt)
#if ARCH_X86_32
INPUT_FUNCS(mmx);
#endif
INPUT_FUNCS(sse2);
INPUT_FUNCS(avx);
void ff_sws_init_swScale_mmx(SwsContext *c)
{
int cpu_flags = av_get_cpu_flags();
......@@ -366,6 +386,30 @@ switch(c->dstBpc){ \
ASSIGN_MMX_SCALE_FUNC(c->hyScale, c->hLumFilterSize, mmx, mmx);
ASSIGN_MMX_SCALE_FUNC(c->hcScale, c->hChrFilterSize, mmx, mmx);
ASSIGN_VSCALE_FUNC(c->yuv2plane1, mmx, mmx2, cpu_flags & AV_CPU_FLAG_MMX2);
switch (c->srcFormat) {
case PIX_FMT_Y400A:
c->lumToYV12 = ff_yuyvToY_mmx;
if (c->alpPixBuf)
c->alpToYV12 = ff_uyvyToY_mmx;
break;
case PIX_FMT_YUYV422:
c->lumToYV12 = ff_yuyvToY_mmx;
c->chrToYV12 = ff_yuyvToUV_mmx;
break;
case PIX_FMT_UYVY422:
c->lumToYV12 = ff_uyvyToY_mmx;
c->chrToYV12 = ff_uyvyToUV_mmx;
break;
case PIX_FMT_NV12:
c->chrToYV12 = ff_nv12ToUV_mmx;
break;
case PIX_FMT_NV21:
c->chrToYV12 = ff_nv21ToUV_mmx;
break;
default:
break;
}
}
if (cpu_flags & AV_CPU_FLAG_MMX2) {
ASSIGN_VSCALEX_FUNC(c->yuv2planeX, mmx2,);
......@@ -384,6 +428,28 @@ switch(c->dstBpc){ \
ASSIGN_SSE_SCALE_FUNC(c->hcScale, c->hChrFilterSize, sse2, sse2);
ASSIGN_VSCALEX_FUNC(c->yuv2planeX, sse2,);
ASSIGN_VSCALE_FUNC(c->yuv2plane1, sse2, sse2, 1);
switch (c->srcFormat) {
case PIX_FMT_Y400A:
c->lumToYV12 = ff_yuyvToY_sse2;
if (c->alpPixBuf)
c->alpToYV12 = ff_uyvyToY_sse2;
break;
case PIX_FMT_YUYV422:
c->lumToYV12 = ff_yuyvToY_sse2;
c->chrToYV12 = ff_yuyvToUV_sse2;
break;
case PIX_FMT_UYVY422:
c->lumToYV12 = ff_uyvyToY_sse2;
c->chrToYV12 = ff_uyvyToUV_sse2;
break;
case PIX_FMT_NV12:
c->chrToYV12 = ff_nv12ToUV_sse2;
break;
case PIX_FMT_NV21:
c->chrToYV12 = ff_nv21ToUV_sse2;
break;
}
}
if (cpu_flags & AV_CPU_FLAG_SSSE3) {
ASSIGN_SSE_SCALE_FUNC(c->hyScale, c->hLumFilterSize, ssse3, ssse3);
......@@ -402,6 +468,23 @@ switch(c->dstBpc){ \
if (cpu_flags & AV_CPU_FLAG_AVX) {
ASSIGN_VSCALEX_FUNC(c->yuv2planeX, avx,);
ASSIGN_VSCALE_FUNC(c->yuv2plane1, avx, avx, 1);
switch (c->srcFormat) {
case PIX_FMT_YUYV422:
c->chrToYV12 = ff_yuyvToUV_avx;
break;
case PIX_FMT_UYVY422:
c->chrToYV12 = ff_uyvyToUV_avx;
break;
case PIX_FMT_NV12:
c->chrToYV12 = ff_nv12ToUV_avx;
break;
case PIX_FMT_NV21:
c->chrToYV12 = ff_nv21ToUV_avx;
break;
default:
break;
}
}
#endif
}
......@@ -1435,147 +1435,6 @@ static void RENAME(yuv2yuyv422_1)(SwsContext *c, const int16_t *buf0,
}
}
#if !COMPILE_TEMPLATE_MMX2
//FIXME yuy2* can read up to 7 samples too much
static void RENAME(yuy2ToY)(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2,
int width, uint32_t *unused)
{
__asm__ volatile(
"movq "MANGLE(bm01010101)", %%mm2 \n\t"
"mov %0, %%"REG_a" \n\t"
"1: \n\t"
"movq (%1, %%"REG_a",2), %%mm0 \n\t"
"movq 8(%1, %%"REG_a",2), %%mm1 \n\t"
"pand %%mm2, %%mm0 \n\t"
"pand %%mm2, %%mm1 \n\t"
"packuswb %%mm1, %%mm0 \n\t"
"movq %%mm0, (%2, %%"REG_a") \n\t"
"add $8, %%"REG_a" \n\t"
" js 1b \n\t"
: : "g" ((x86_reg)-width), "r" (src+width*2), "r" (dst+width)
: "%"REG_a
);
}
static void RENAME(yuy2ToUV)(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused1, const uint8_t *src1, const uint8_t *src2,
int width, uint32_t *unused)
{
__asm__ volatile(
"movq "MANGLE(bm01010101)", %%mm4 \n\t"
"mov %0, %%"REG_a" \n\t"
"1: \n\t"
"movq (%1, %%"REG_a",4), %%mm0 \n\t"
"movq 8(%1, %%"REG_a",4), %%mm1 \n\t"
"psrlw $8, %%mm0 \n\t"
"psrlw $8, %%mm1 \n\t"
"packuswb %%mm1, %%mm0 \n\t"
"movq %%mm0, %%mm1 \n\t"
"psrlw $8, %%mm0 \n\t"
"pand %%mm4, %%mm1 \n\t"
"packuswb %%mm0, %%mm0 \n\t"
"packuswb %%mm1, %%mm1 \n\t"
"movd %%mm0, (%3, %%"REG_a") \n\t"
"movd %%mm1, (%2, %%"REG_a") \n\t"
"add $4, %%"REG_a" \n\t"
" js 1b \n\t"
: : "g" ((x86_reg)-width), "r" (src1+width*4), "r" (dstU+width), "r" (dstV+width)
: "%"REG_a
);
assert(src1 == src2);
}
/* This is almost identical to the previous, end exists only because
* yuy2ToY/UV)(dst, src+1, ...) would have 100% unaligned accesses. */
static void RENAME(uyvyToY)(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2,
int width, uint32_t *unused)
{
__asm__ volatile(
"mov %0, %%"REG_a" \n\t"
"1: \n\t"
"movq (%1, %%"REG_a",2), %%mm0 \n\t"
"movq 8(%1, %%"REG_a",2), %%mm1 \n\t"
"psrlw $8, %%mm0 \n\t"
"psrlw $8, %%mm1 \n\t"
"packuswb %%mm1, %%mm0 \n\t"
"movq %%mm0, (%2, %%"REG_a") \n\t"
"add $8, %%"REG_a" \n\t"
" js 1b \n\t"
: : "g" ((x86_reg)-width), "r" (src+width*2), "r" (dst+width)
: "%"REG_a
);
}
static void RENAME(uyvyToUV)(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused1, const uint8_t *src1, const uint8_t *src2,
int width, uint32_t *unused)
{
__asm__ volatile(
"movq "MANGLE(bm01010101)", %%mm4 \n\t"
"mov %0, %%"REG_a" \n\t"
"1: \n\t"
"movq (%1, %%"REG_a",4), %%mm0 \n\t"
"movq 8(%1, %%"REG_a",4), %%mm1 \n\t"
"pand %%mm4, %%mm0 \n\t"
"pand %%mm4, %%mm1 \n\t"
"packuswb %%mm1, %%mm0 \n\t"
"movq %%mm0, %%mm1 \n\t"
"psrlw $8, %%mm0 \n\t"
"pand %%mm4, %%mm1 \n\t"
"packuswb %%mm0, %%mm0 \n\t"
"packuswb %%mm1, %%mm1 \n\t"
"movd %%mm0, (%3, %%"REG_a") \n\t"
"movd %%mm1, (%2, %%"REG_a") \n\t"
"add $4, %%"REG_a" \n\t"
" js 1b \n\t"
: : "g" ((x86_reg)-width), "r" (src1+width*4), "r" (dstU+width), "r" (dstV+width)
: "%"REG_a
);
assert(src1 == src2);
}
static av_always_inline void RENAME(nvXXtoUV)(uint8_t *dst1, uint8_t *dst2,
const uint8_t *src, int width)
{
__asm__ volatile(
"movq "MANGLE(bm01010101)", %%mm4 \n\t"
"mov %0, %%"REG_a" \n\t"
"1: \n\t"
"movq (%1, %%"REG_a",2), %%mm0 \n\t"
"movq 8(%1, %%"REG_a",2), %%mm1 \n\t"
"movq %%mm0, %%mm2 \n\t"
"movq %%mm1, %%mm3 \n\t"
"pand %%mm4, %%mm0 \n\t"
"pand %%mm4, %%mm1 \n\t"
"psrlw $8, %%mm2 \n\t"
"psrlw $8, %%mm3 \n\t"
"packuswb %%mm1, %%mm0 \n\t"
"packuswb %%mm3, %%mm2 \n\t"
"movq %%mm0, (%2, %%"REG_a") \n\t"
"movq %%mm2, (%3, %%"REG_a") \n\t"
"add $8, %%"REG_a" \n\t"
" js 1b \n\t"
: : "g" ((x86_reg)-width), "r" (src+width*2), "r" (dst1+width), "r" (dst2+width)
: "%"REG_a
);
}
static void RENAME(nv12ToUV)(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused1, const uint8_t *src1, const uint8_t *src2,
int width, uint32_t *unused)
{
RENAME(nvXXtoUV)(dstU, dstV, src1, width);
}
static void RENAME(nv21ToUV)(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused1, const uint8_t *src1, const uint8_t *src2,
int width, uint32_t *unused)
{
RENAME(nvXXtoUV)(dstV, dstU, src1, width);
}
#endif /* !COMPILE_TEMPLATE_MMX2 */
static av_always_inline void RENAME(bgr24ToY_mmx)(int16_t *dst, const uint8_t *src,
int width, enum PixelFormat srcFormat)
{
......@@ -1927,15 +1786,6 @@ static av_cold void RENAME(sws_init_swScale)(SwsContext *c)
#endif /* COMPILE_TEMPLATE_MMX2 */
}
#if !COMPILE_TEMPLATE_MMX2
switch(srcFormat) {
case PIX_FMT_YUYV422 : c->chrToYV12 = RENAME(yuy2ToUV); break;
case PIX_FMT_UYVY422 : c->chrToYV12 = RENAME(uyvyToUV); break;
case PIX_FMT_NV12 : c->chrToYV12 = RENAME(nv12ToUV); break;
case PIX_FMT_NV21 : c->chrToYV12 = RENAME(nv21ToUV); break;
default: break;
}
#endif /* !COMPILE_TEMPLATE_MMX2 */
if (!c->chrSrcHSubSample) {
switch(srcFormat) {
case PIX_FMT_BGR24 : c->chrToYV12 = RENAME(bgr24ToUV); break;
......@@ -1945,21 +1795,8 @@ static av_cold void RENAME(sws_init_swScale)(SwsContext *c)
}
switch (srcFormat) {
#if !COMPILE_TEMPLATE_MMX2
case PIX_FMT_YUYV422 :
case PIX_FMT_Y400A : c->lumToYV12 = RENAME(yuy2ToY); break;
case PIX_FMT_UYVY422 : c->lumToYV12 = RENAME(uyvyToY); break;
#endif /* !COMPILE_TEMPLATE_MMX2 */
case PIX_FMT_BGR24 : c->lumToYV12 = RENAME(bgr24ToY); break;
case PIX_FMT_RGB24 : c->lumToYV12 = RENAME(rgb24ToY); break;
default: break;
}
#if !COMPILE_TEMPLATE_MMX2
if (c->alpPixBuf) {
switch (srcFormat) {
case PIX_FMT_Y400A : c->alpToYV12 = RENAME(yuy2ToY); break;
default: break;
}
}
#endif /* !COMPILE_TEMPLATE_MMX2 */
}
......@@ -14,18 +14,34 @@ FATE_AAC += fate-aac-al07_96
fate-aac-al07_96: CMD = pcm -i $(SAMPLES)/aac/al07_96.mp4
fate-aac-al07_96: REF = $(SAMPLES)/aac/al07_96.s16
FATE_AAC += fate-aac-al15_44
fate-aac-al15_44: CMD = pcm -i $(SAMPLES)/aac/al15_44.mp4
fate-aac-al15_44: REF = $(SAMPLES)/aac/al15_44.s16
FATE_AAC += fate-aac-al17_44
fate-aac-al17_44: CMD = pcm -i $(SAMPLES)/aac/al17_44.mp4
fate-aac-al17_44: REF = $(SAMPLES)/aac/al17_44.s16
FATE_AAC += fate-aac-al18_44
fate-aac-al18_44: CMD = pcm -i $(SAMPLES)/aac/al18_44.mp4
fate-aac-al18_44: REF = $(SAMPLES)/aac/al18_44.s16
FATE_AAC += fate-aac-am00_88
fate-aac-am00_88: CMD = pcm -i $(SAMPLES)/aac/am00_88.mp4
fate-aac-am00_88: REF = $(SAMPLES)/aac/am00_88.s16
FATE_AAC += fate-aac-am05_44
fate-aac-am05_44: CMD = pcm -i $(SAMPLES)/aac/am05_44.mp4
fate-aac-am05_44: REF = $(SAMPLES)/aac/am05_44.s16
FATE_AAC += fate-aac-al_sbr_hq_cm_48_2
fate-aac-al_sbr_hq_cm_48_2: CMD = pcm -i $(SAMPLES)/aac/al_sbr_cm_48_2.mp4
fate-aac-al_sbr_hq_cm_48_2: REF = $(SAMPLES)/aac/al_sbr_hq_cm_48_2.s16
FATE_AAC += fate-aac-al_sbr_hq_cm_48_5.1
fate-aac-al_sbr_hq_cm_48_5.1: CMD = pcm -i $(SAMPLES)/aac/al_sbr_cm_48_5.1.mp4
fate-aac-al_sbr_hq_cm_48_5.1: REF = $(SAMPLES)/aac/al_sbr_hq_cm_48_5.1.s16
FATE_AAC += fate-aac-al_sbr_ps_06_ur
fate-aac-al_sbr_ps_06_ur: CMD = pcm -i $(SAMPLES)/aac/al_sbr_ps_06_new.mp4
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
FATE_DEMUX += fate-siff
fate-siff: CMD = framecrc -i $(SAMPLES)/SIFF/INTRO_B.VB -t 3 -pix_fmt rgb24
FATE_DEMUX += fate-smjpeg
fate-smjpeg: CMD = framecrc -i $(SAMPLES)/smjpeg/scenwin.mjpg -vcodec copy
FATE_DEMUX += fate-westwood-aud
fate-westwood-aud: CMD = md5 -i $(SAMPLES)/westwood-aud/excellent.aud -f s16le
FATE_DEMUX += fate-wtv-demux
fate-wtv-demux: CMD = framecrc -i $(SAMPLES)/wtv/law-and-order-partial.wtv -vcodec copy -acodec copy
FATE_DEMUX += fate-xmv-demux
fate-xmv-demux: CMD = framecrc -i $(SAMPLES)/xmv/logos1p.fmv -vcodec copy -acodec copy
FATE_DEMUX += fate-xwma-demux
fate-xwma-demux: CMD = crc -i $(SAMPLES)/xwma/ergon.xwma -acodec copy
FATE_TESTS += $(FATE_DEMUX)
fate-demux: $(FATE_DEMUX)
......@@ -29,5 +29,8 @@ fate-vc1_sa10091: CMD = framecrc -i $(SAMPLES)/vc1/SA10091.vc1
FATE_MICROSOFT += fate-vc1_sa20021
fate-vc1_sa20021: CMD = framecrc -i $(SAMPLES)/vc1/SA20021.vc1
FATE_MICROSOFT += fate-vc1-ism
fate-vc1-ism: CMD = framecrc -i $(SAMPLES)/isom/vc1-wmapro.ism -an
FATE_TESTS += $(FATE_MICROSOFT)
fate-microsoft: $(FATE_MICROSOFT)
......@@ -49,6 +49,9 @@ fate-cvid: CMD = framecrc -i $(SAMPLES)/cvid/laracroft-cinepak-partial.avi -an
FATE_VIDEO += fate-cvid-palette
fate-cvid-palette: CMD = framecrc -i $(SAMPLES)/cvid/catfight-cvid-pal8-partial.mov -pix_fmt rgb24 -an
FATE_VIDEO += fate-cvid-grayscale
fate-cvid-grayscale: CMD = framecrc -i $(SAMPLES)/cvid/pcitva15.avi -an
FATE_VIDEO += fate-cyberia-c93
fate-cyberia-c93: CMD = framecrc -i $(SAMPLES)/cyberia-c93/intro1.c93 -t 3 -pix_fmt rgb24
......
......@@ -8,6 +8,11 @@ fate-wmapro-5.1: CMD = pcm -i $(SAMPLES)/wmapro/latin_192_mulitchannel_cut.wma
fate-wmapro-5.1: CMP = oneoff
fate-wmapro-5.1: REF = $(SAMPLES)/wmapro/latin_192_mulitchannel_cut.pcm
FATE_WMA += fate-wmapro-ism
fate-wmapro-ism: CMD = pcm -i $(SAMPLES)/isom/vc1-wmapro.ism -vn
fate-wmapro-ism: CMP = oneoff
fate-wmapro-ism: REF = $(SAMPLES)/isom/vc1-wmapro.pcm
FATE_WMA += fate-wmavoice-7k
fate-wmavoice-7k: CMD = pcm -i $(SAMPLES)/wmavoice/streaming_CBR-7K.wma
fate-wmavoice-7k: CMP = stddev
......
0, 0, 11300, 0x46c78923
0, 17921, 11300, 0x3f2a1175
0, 35842, 11300, 0x722de221
0, 53763, 11300, 0x01746b88
0, 71684, 11300, 0x549587a7
0, 89605, 11300, 0x843ab943
0, 107526, 11300, 0x62fdee48
0, 125447, 11300, 0x74a62867
0, 143368, 11300, 0x35a20e2f
0, 161289, 11300, 0x4e9ef54d
0, 179210, 11300, 0xec7201f5
0, 197131, 11300, 0x363bfe27
0, 215052, 11300, 0x2aaab418
0, 232973, 11300, 0x6a48ab3f
0, 250894, 11300, 0x3fecea34
0, 268815, 11300, 0xa371f55e
0, 286736, 11300, 0xa86b147c
0, 304657, 11300, 0x49e9206e
0, 322578, 11300, 0x6c9a2155
0, 340499, 11300, 0x2c8a4798
0, 358420, 11300, 0x3485676c
0, 376341, 11300, 0xb0b293f2
0, 394262, 11300, 0xe4a9b068
0, 412183, 11300, 0xd68d0556
0, 430104, 11300, 0xc28e5193
0, 448025, 11300, 0xf6948483
0, 465945, 11300, 0xf21fbf57
0, 483866, 11300, 0x8345eb44
0, 501787, 11300, 0x8124f045
0, 519708, 11300, 0x18e31f10
0, 537629, 11300, 0xdb1943fc
0, 555550, 11300, 0x8701699f
0, 573471, 11300, 0xd7b18550
0, 591392, 11300, 0xa56faccc
0, 609313, 11300, 0xf8bcc17c
0, 627234, 11300, 0x446acab9
0, 645155, 11300, 0x755fd295
0, 663076, 11300, 0x92e3d100
0, 680997, 11300, 0x54895bb3
0, 698918, 11300, 0xd18bffda
0, 716839, 11300, 0x480dbe4f
0, 734760, 11300, 0x49ea9dbe
0, 752681, 11300, 0x00d3a003
0, 770602, 11300, 0xda7bbfb2
0, 788523, 11300, 0x9700d9c2
0, 806444, 11300, 0xa0a9e490
0, 824365, 11300, 0x00eb0979
0, 842286, 11300, 0x32b04630
0, 860207, 11300, 0xdfb73e51
0, 878128, 11300, 0x3d8e4f96
0, 896049, 11300, 0x2ca83271
0, 913970, 11300, 0xb5b123c0
0, 931891, 11300, 0x8a570e58
0, 949812, 11300, 0xc6c805bc
0, 967733, 11300, 0x27caf7a5
0, 985654, 11300, 0x5319ecb0
0, 1003575, 11300, 0x5471e3fd
0, 1021496, 11300, 0x6d68a6f4
0, 1039417, 11300, 0x872b7194
0, 1057338, 11300, 0x007c36bd
0, 1075259, 11300, 0x2714f1b5
0, 1093180, 11300, 0x6c8eb50f
0, 1111101, 11300, 0xf5d57be8
0, 1129022, 11300, 0x981f412b
0, 1146943, 11300, 0x1a9804a1
0, 1164864, 11300, 0xf0c1d24a
0, 1182785, 11300, 0xa70a9d9b
0, 1200706, 11300, 0x8c466876
0, 1218627, 11300, 0xcf2e32df
0, 1236548, 11300, 0xcb8cfebf
0, 1254469, 11300, 0xb961ca99
0, 1272390, 11300, 0x666d9619
0, 1290311, 11300, 0x84bf5b55
0, 1308232, 11300, 0xbfa22ccc
0, 1326153, 11300, 0xcde41849
0, 1344074, 11300, 0x71372dcd
0, 1361994, 11300, 0x13402cfd
0, 1379915, 11300, 0xdebdd321
0, 1397836, 11300, 0xdda66de1
0, 1415757, 11300, 0x7f4bb682
0, 1433678, 11300, 0xf67fd528
0, 1451599, 11300, 0xe739ff8c
0, 1469520, 11300, 0x2e131774
0, 1487441, 11300, 0xfa942811
0, 1505362, 11300, 0x0cd93ac2
0, 1523283, 11300, 0xd0445e0e
0, 1541204, 11300, 0x3f3497c7
0, 1559125, 11300, 0x11b5bd2c
0, 1577046, 11300, 0xccd5e62a
0, 1594967, 11300, 0xa9d4fcb5
0, 1612888, 11300, 0x34aa1a03
0, 1630809, 11300, 0x1ce6299e
0, 1648730, 11300, 0x661c2745
0, 1666651, 11300, 0x27d8a8b3
0, 1684572, 11300, 0x9eb07467
0, 1702493, 11300, 0x128374d2
0, 1720414, 11300, 0x05c36ff5
0, 1738335, 11300, 0x8a136bde
0, 1756256, 11300, 0x15c47c99
0, 1774177, 11300, 0xcc4a93f4
0, 1792098, 11300, 0x19529b2b
0, 1810019, 11300, 0x9943c076
0, 1827940, 11300, 0xf898e583
0, 1845861, 11300, 0x40f71f94
0, 1863782, 11300, 0x5b604afb
0, 1881703, 11300, 0x8c176af4
0, 1899624, 11300, 0x0f1a6216
0, 1917545, 11300, 0x38bbd13d
0, 1935466, 11300, 0x90c8d1fc
0, 1953387, 11300, 0x253000d7
0, 1971308, 11300, 0xb94b03b1
0, 1989229, 11300, 0xbc872268
0, 2007150, 11300, 0xe77adb8c
0, 2025071, 11300, 0xa38936b7
0, 2042992, 11300, 0xd6153632
0, 2060913, 11300, 0x1ae633cc
0, 2078834, 11300, 0xb90c286e
0, 2096755, 11300, 0xbc7e333d
0, 2114676, 11300, 0x1b5421f8
0, 2132597, 11300, 0xdde6506d
0, 2150518, 11300, 0xd3eb757e
0, 2168439, 11300, 0x5ad1929c
0, 2186360, 11300, 0x4f6aa47d
0, 2204281, 11300, 0xab3caf55
0, 2222202, 11300, 0x5ff9b39a
0, 2240123, 11300, 0x1454e12e
0, 2258043, 11300, 0xf18216e8
0, 2275964, 11300, 0x62144880
0, 2293885, 11300, 0x54284241
0, 2311806, 11300, 0x8e8c7228
0, 2329727, 11300, 0xb498d06e
0, 2347648, 11300, 0x7b1e6be1
0, 2365569, 11300, 0x5e5ea1f4
0, 2383490, 11300, 0x41eda28e
0, 2401411, 11300, 0x7ba6aa92
0, 2419332, 11300, 0xa8a8b1c7
0, 2437253, 11300, 0x0d30bd08
0, 2455174, 11300, 0xc610bf16
0, 2473095, 11300, 0xed57c075
0, 2491016, 11300, 0xb86dbfea
0, 2508937, 11300, 0x0970c03d
0, 2526858, 11300, 0x743ac2ac
0, 2544779, 11300, 0x0a44c816
0, 2562700, 11300, 0xe32acd6b
0, 2580621, 11300, 0x209bcdab
0, 2598542, 11300, 0x3cd0d105
0, 2616463, 11300, 0xc0bcd330
0, 2634384, 11300, 0x4785d6dc
0, 2652305, 11300, 0xe85f9c90
0, 2670226, 11300, 0xd4a72850
0, 2688147, 11300, 0x04766e41
0, 2706068, 11300, 0x04766e41
This diff is collapsed.
0, 0, 37440, 0xd1bc5235
0, 3750, 37440, 0x158e6167
0, 7500, 37440, 0x0faa4481
0, 11250, 37440, 0x427158c5
0, 15000, 37440, 0x4eb53ac6
0, 18750, 37440, 0x99304eea
0, 22500, 37440, 0xcc554a6f
0, 26250, 37440, 0xabeb6c35
0, 30000, 37440, 0xddfc7e18
0, 33750, 37440, 0xaa79b504
0, 37500, 37440, 0x5cb1c839
0, 41250, 37440, 0x7e36ecca
0, 45000, 37440, 0xf486f425
0, 48750, 37440, 0xf1b4138f
0, 52500, 37440, 0x966f1a49
0, 56250, 37440, 0x5eff21da
0, 60000, 37440, 0x333f39b1
0, 63750, 37440, 0x62e5963e
0, 67500, 37440, 0x26930671
0, 71250, 37440, 0x27b4bb6c
0, 75000, 37440, 0xdbd07766
0, 78750, 37440, 0x04260104
0, 82500, 37440, 0x9b1e078b
0, 86250, 37440, 0xdf4e2474
0, 90000, 37440, 0x57d44986
0, 93750, 37440, 0x8780e34c
0, 97500, 37440, 0xf80c8bc0
0, 101250, 37440, 0x630a7583
0, 105000, 37440, 0x235ae089
0, 108750, 37440, 0x984b8f0e
0, 112500, 37440, 0x865cf592
0, 116250, 37440, 0x70f376f2
0, 120000, 37440, 0x8b30c035
0, 123750, 37440, 0xde772d79
0, 127500, 37440, 0x8e076be5
0, 131250, 37440, 0x3dc2bd9f
0, 135000, 37440, 0xb782eb67
0, 138750, 37440, 0x02025d73
0, 142500, 37440, 0x86bbbce8
0, 146250, 37440, 0xd6554f62
0, 150000, 37440, 0xb831b917
0, 153750, 37440, 0x80643560
0, 157500, 37440, 0x4ecf9afd
0, 161250, 37440, 0x9ce51e0b
0, 165000, 37440, 0x179466cd
0, 168750, 37440, 0x145fc900
0, 172500, 37440, 0xb1b50402
0, 176250, 37440, 0x0a87552a
0, 180000, 37440, 0x8f53821d
0, 183750, 37440, 0x1c07c825
0, 187500, 37440, 0x49dde82f
0, 191250, 37440, 0xb1a32605
0, 195000, 37440, 0x410f3cd5
0, 198750, 37440, 0xff5e6696
0, 202500, 37440, 0x96f678c9
0, 206250, 37440, 0x6c9e9e68
0, 210000, 37440, 0x79a2a655
0, 213750, 37440, 0xf237bd6c
0, 217500, 37440, 0x4051b611
0, 221250, 37440, 0xc7ccc918
0, 225000, 37440, 0xbd02c122
0, 228750, 37440, 0xacb3c881
0, 232500, 37440, 0x2abdb940
0, 236250, 37440, 0x19d5be85
0, 240000, 37440, 0xfa5fb1ba
0, 243750, 37440, 0xdae7a7aa
0, 247500, 37440, 0x6b0f9f69
0, 251250, 37440, 0x353e8201
0, 255000, 37440, 0xa21443aa
0, 258750, 37440, 0x66c8d7e0
0, 262500, 37440, 0xc332068e
0, 266250, 37440, 0x71431b9b
0, 270000, 37440, 0x392f15cb
0, 273750, 37440, 0x95a146bb
0, 277500, 37440, 0x7c51740a
0, 281250, 37440, 0xa3bdd43c
0, 285000, 37440, 0xa079f965
0, 288750, 37440, 0xa95423ea
0, 292500, 37440, 0xd1bd2c67
0, 296250, 37440, 0x6cf82844
0, 300000, 37440, 0xd401e128
0, 303750, 37440, 0x1f7db118
0, 307500, 37440, 0x2e0a65a9
0, 311250, 37440, 0x321c1c40
0, 315000, 37440, 0x95b2a127
0, 318750, 37440, 0xa1471f4b
0, 322500, 37440, 0x29d148c0
0, 326250, 37440, 0x24c07107
0, 330000, 37440, 0x0ead678d
0, 333750, 37440, 0xd0ca6495
0, 337500, 37440, 0x08f935ef
0, 341250, 37440, 0xb5ec3c38
0, 345000, 37440, 0xce371628
0, 348750, 37440, 0x68170812
0, 352500, 37440, 0xe222699e
0, 356250, 37440, 0xd688706c
0, 360000, 37440, 0x81a033f9
0, 363750, 37440, 0x28bd0fbf
0, 367500, 37440, 0xe36db7b2
0, 371250, 37440, 0x30559121
0, 375000, 37440, 0xbf2b5fc8
0, 378750, 37440, 0x4b427672
0, 382500, 37440, 0x0544b0b4
0, 386250, 37440, 0x38a70b06
0, 390000, 37440, 0x4ed62607
0, 393750, 37440, 0x6efe8ea6
0, 397500, 37440, 0x81197e11
0, 401250, 37440, 0xf4060050
0, 405000, 37440, 0xaf205f13
0, 408750, 37440, 0x5fa21382
0, 412500, 37440, 0x8627ad05
0, 416250, 37440, 0xf7130133
0, 420000, 37440, 0x76dea7ba
0, 423750, 37440, 0x1dbae1be
0, 427500, 37440, 0x74a933f7
0, 431250, 37440, 0xbdcd41a3
0, 435000, 37440, 0xf0fe8c1c
0, 438750, 37440, 0xc0036222
0, 442500, 37440, 0x3058385c
0, 446250, 37440, 0x68141016
1, 0, 576, 0x9b6e1638
1, 1620, 576, 0x0ca91183
1, 3780, 576, 0xec6a180f
1, 5940, 576, 0x478a2b9b
1, 8100, 576, 0x00fa15b3
1, 10260, 576, 0xfb551816
1, 12960, 576, 0x422e12bd
1, 15120, 576, 0xa7581b29
1, 17280, 576, 0xd4b31a74
1, 19440, 576, 0x11521b10
1, 21600, 576, 0x3dcc1474
1, 23760, 576, 0x66c31aab
1, 25920, 576, 0x97f318a8
1, 28080, 576, 0xd3fb1a30
1, 30240, 576, 0xd2bd16af
1, 32400, 576, 0x6c10146a
1, 34560, 576, 0x10d81468
1, 36720, 576, 0x3813162d
1, 38880, 576, 0x89e71d95
1, 41040, 576, 0xd1c717f9
1, 43200, 576, 0x1a311e5f
1, 45360, 576, 0x0ea80e05
1, 47520, 576, 0x2f1718f2
1, 49680, 576, 0xffe01e13
1, 51840, 576, 0xa7b02296
1, 54000, 576, 0x199f1597
1, 56160, 576, 0xdea217ba
1, 58320, 576, 0x8a790f01
1, 60480, 576, 0x23e80038
1, 62640, 576, 0x75dc048a
1, 64800, 576, 0xeb4b0d93
1, 66960, 576, 0xde1322f5
1, 69120, 576, 0xc3131f35
1, 71280, 576, 0x708f1381
1, 73440, 576, 0x1f00137e
0, 74578, 41980, 0xd4920915
1, 75600, 576, 0x05131eb0
1, 77760, 576, 0x78151c22
0, 78178, 7228, 0x1b141fa3
1, 79920, 576, 0x31771239
0, 81777, 7492, 0x1a47f3e4
1, 82080, 576, 0x3ce4097c
1, 84240, 576, 0x180e15f4
0, 85378, 25068, 0xcb70a744
1, 86400, 576, 0x30db0604
1, 88560, 576, 0x9b290284
0, 88978, 7212, 0x0ab9f558
1, 90720, 576, 0xcf340753
0, 92578, 7612, 0xa93054f0
1, 92880, 576, 0xdaa41457
1, 95040, 576, 0x34d310a2
0, 96177, 22868, 0xa77db64a
1, 97200, 576, 0x58b31010
1, 99360, 576, 0x19610f54
0, 99778, 6260, 0x6cf76411
1, 101520, 576, 0x17762352
0, 103377, 6156, 0xe168394b
1, 103680, 576, 0x1fea1448
1, 105840, 576, 0x55840a01
0, 106977, 23364, 0x53164f1e
1, 108000, 576, 0x6c9c24ce
1, 110160, 576, 0x955f1e97
0, 110578, 6708, 0x89877269
1, 112320, 576, 0x2827134f
0, 114178, 6908, 0x8d62a249
1, 114480, 576, 0x34a01c29
1, 116640, 576, 0x7d351e52
0, 117778, 38156, 0xec41f682
1, 118800, 576, 0x00c91d9e
1, 120960, 576, 0x57ea1a97
0, 121377, 5764, 0xcc04534b
1, 123120, 576, 0xef3a1c74
0, 124977, 5388, 0xb8a1c3c5
1, 125280, 576, 0x11fc217d
1, 127440, 576, 0x59ce20e5
0, 128578, 16764, 0x59460d96
1, 129600, 576, 0xaafc1dbf
1, 131760, 576, 0xdd941609
0, 132177, 5548, 0x5c91e93d
1, 133920, 576, 0x900420b0
0, 135777, 5652, 0x5e321aed
1, 136080, 576, 0x5f4f1aa1
1, 138240, 576, 0x7d7e18de
0, 139377, 15564, 0xefdf5080
1, 140400, 576, 0x986c0d9d
1, 142560, 576, 0xcb4c21c0
0, 142977, 6492, 0xd1d5c5f8
1, 144720, 576, 0xbcfb1e8b
0, 146577, 5604, 0xf9472b44
1, 146880, 576, 0xcb541b4c
1, 149040, 576, 0x980426e9
0, 150177, 17924, 0x45815b7b
1, 151200, 576, 0x09d00aa0
1, 153360, 576, 0xad591374
0, 153778, 5020, 0x3cc5e554
1, 155520, 576, 0x97bf1461
0, 157378, 5276, 0xa0554c12
1, 157680, 576, 0xdc871cc4
1, 159840, 576, 0x56781896
0, 160977, 31460, 0x5765eb5f
1, 162000, 576, 0xc77714e3
1, 164160, 576, 0x280e18d4
0, 164577, 4972, 0x91adbab7
1, 166320, 576, 0xbc0d2302
0, 168178, 5580, 0xfea707cb
1, 168480, 576, 0x79191384
1, 170640, 576, 0x65481c97
0, 171778, 17412, 0x0afe4d27
1, 172800, 576, 0xc94d227d
1, 174960, 576, 0xa68a1f14
0, 175378, 5236, 0x03f55309
1, 177120, 576, 0x6af11a5c
0, 178977, 4924, 0x558e753c
1, 179280, 576, 0x4d1019ef
1, 181440, 576, 0x3b1b17b5
0, 182577, 15396, 0xf145d121
1, 183600, 576, 0xcdd8159f
1, 185760, 576, 0x97cd1d06
0, 186177, 4708, 0x43066a92
1, 187920, 576, 0x5d1b1123
0, 189778, 4332, 0x9e22bcba
1, 190080, 576, 0x888d0cb0
1, 192240, 576, 0x556e1dad
0, 193377, 12876, 0x46ff9ef4
1, 194400, 576, 0xf7af0bce
1, 196560, 576, 0xb5da160a
0, 196978, 5940, 0x27cba62e
1, 198720, 576, 0x4a8d0e98
0, 200578, 6124, 0x6bab0a6d
1, 200880, 576, 0x183b1c7e
1, 203040, 576, 0xc47120e6
0, 204178, 36428, 0x942f9648
1, 205200, 576, 0xb1f31346
0, 207777, 6660, 0x545a0db7
0, 211377, 6780, 0x2d1d4189
0, 214978, 16460, 0x7c3b3ca4
0, 218578, 6724, 0x8538cc6f
0, 222178, 7068, 0x69574fd0
0, 225777, 19552, 0xf230e854
......@@ -4,6 +4,8 @@ abgr 037bf9df6a765520ad6d490066bf4b89
argb c442a8261c2265a07212ef0f72e35f5a
bgr0 0ef8ffe42bfe53be74973a0c118b775e
bgr24 0d0cb38ab3fa0b2ec0865c14f78b217b
bgr444be d9ea9307d21b162225b8b2c524cf9477
bgr444le 88035350e9da3a8f67387890b956f0bc
bgr48be 00624e6c7ec7ab19897ba2f0a3257fe8
bgr48le d02c235ebba7167881ca2d576497ff84
bgr4_byte 50d23cc82d9dcef2fd12adb81fb9b806
......@@ -22,6 +24,8 @@ nv12 e0af357888584d36eec5aa0f673793ef
nv21 9a3297f3b34baa038b1f37cb202b512f
rgb0 7c03f81f5e5346bf8ea42c4187f20605
rgb24 b41eba9651e1b5fe386289b506188105
rgb444be 9e89db334568c6b2e3d5d0540f4ba960
rgb444le 0a68cb6de8bf530aa30c5c1205c25155
rgb48be cc139ec1dd9451f0e049c0cb3a0c8aa2
rgb48le 86c5608904f75360d492dbc5c9589969
rgb4_byte c93ba89b74c504e7f5ae9d9ab1546c73
......
......@@ -4,6 +4,8 @@ abgr 037bf9df6a765520ad6d490066bf4b89
argb c442a8261c2265a07212ef0f72e35f5a
bgr0 328a76e72c55508cdf04dc93a5b056fc
bgr24 0d0cb38ab3fa0b2ec0865c14f78b217b
bgr444be d9ea9307d21b162225b8b2c524cf9477
bgr444le 88035350e9da3a8f67387890b956f0bc
bgr48be 00624e6c7ec7ab19897ba2f0a3257fe8
bgr48le d02c235ebba7167881ca2d576497ff84
bgr4_byte 50d23cc82d9dcef2fd12adb81fb9b806
......@@ -23,6 +25,8 @@ nv21 9a3297f3b34baa038b1f37cb202b512f
pal8 dec8ed2258ec89b8a796f21cad4df867
rgb0 ff1a9f355d43f9d25f07a191b5aa906c
rgb24 b41eba9651e1b5fe386289b506188105
rgb444be 9e89db334568c6b2e3d5d0540f4ba960
rgb444le 0a68cb6de8bf530aa30c5c1205c25155
rgb48be cc139ec1dd9451f0e049c0cb3a0c8aa2
rgb48le 86c5608904f75360d492dbc5c9589969
rgb4_byte c93ba89b74c504e7f5ae9d9ab1546c73
......
......@@ -4,6 +4,8 @@ abgr 037bf9df6a765520ad6d490066bf4b89
argb c442a8261c2265a07212ef0f72e35f5a
bgr0 328a76e72c55508cdf04dc93a5b056fc
bgr24 0d0cb38ab3fa0b2ec0865c14f78b217b
bgr444be d9ea9307d21b162225b8b2c524cf9477
bgr444le 88035350e9da3a8f67387890b956f0bc
bgr48be 00624e6c7ec7ab19897ba2f0a3257fe8
bgr48le d02c235ebba7167881ca2d576497ff84
bgr4_byte 50d23cc82d9dcef2fd12adb81fb9b806
......@@ -23,6 +25,8 @@ nv21 9a3297f3b34baa038b1f37cb202b512f
pal8 dec8ed2258ec89b8a796f21cad4df867
rgb0 ff1a9f355d43f9d25f07a191b5aa906c
rgb24 b41eba9651e1b5fe386289b506188105
rgb444be 9e89db334568c6b2e3d5d0540f4ba960
rgb444le 0a68cb6de8bf530aa30c5c1205c25155
rgb48be cc139ec1dd9451f0e049c0cb3a0c8aa2
rgb48le 86c5608904f75360d492dbc5c9589969
rgb4_byte c93ba89b74c504e7f5ae9d9ab1546c73
......
......@@ -4,6 +4,8 @@ abgr cff82561a074874027ac1cc896fd2730
argb 756dd1eaa5baca2238ce23dbdc452684
bgr0 ff6e1dfa26d4c2ada3a59e8b0b600d1f
bgr24 e44192347a45586c6c157e3059610cd1
bgr444be c23768338d76693f0da76e8a9b6fd8df
bgr444le 846c431a47bfb745437941bde768469c
bgr48be 390d3058a12a99c2b153ed7922508bea
bgr48le 39fe06feb4ec1d9730dccc04a0cfac4c
bgr4_byte ee1d35a7baf8e9016891929a2f565c0b
......@@ -23,6 +25,8 @@ nv21 69c699510ff1fb777b118ebee1002f14
pal8 6324fa058e1bc157ed7132bfe4022317
rgb0 1bd6f54ad067503ac9783a70062c8f87
rgb24 13ff53ebeab74dc05492836f1cfbd2c1
rgb444be 46e466b2709f62b2fffc63708063eaaf
rgb444le f0c57a48be671428e2e53c9b54a6c4e2
rgb48be 8fac63787a711886030f8e056872b488
rgb48le ab92f2763a2eb264c3870cc758f97149
rgb4_byte d81ffd3add95842a618eec81024f0b5c
......
......@@ -4,6 +4,8 @@ abgr 25e72e9dbd01ab00727c976d577f7be5
argb 19869bf1a5ac0b6af4d8bbe2c104533c
bgr0 e03d3ee0b977f6d86e5116b20494bef5
bgr24 89108a4ba00201f79b75b9305c42352d
bgr444be 9ef12c42fb791948ca4423c452dc6b9a
bgr444le 3650ecfc163abd1596c0cd29d130c4b0
bgr48be 2f23931844f57641f3737348182d118c
bgr48le 4242a026012b6c135a6aa138a6d67031
bgr4_byte 407fcf564ed764c38e1d748f700ab921
......@@ -23,6 +25,8 @@ nv21 01ea369dd2d0d3ed7451dc5c8d61497f
pal8 47ed19a7e128b0e33c25d2a463b0611a
rgb0 330bd6168e46c0d5eb4acbdbb50afa2e
rgb24 eaefabc168d0b14576bab45bc1e56e1e
rgb444be 06722e03f8404e7d2226665ed2444a32
rgb444le 185c9a5d9c2877484310d4196ef4cd6f
rgb48be 62dd185862ed142283bd300eb6dbd216
rgb48le dcb76353268bc5862194d131762220da
rgb4_byte 8c6ff02df0b06dd2d574836c3741b2a2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment