Merge remote-tracking branch 'rbultje/master'

* rbultje/master:
  Full-pixel MC functions.
  VP9 MC (ssse3) optimizations.
  Native VP9 decoder.

Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2013-10-03 12:44:17 +02:00
commit 4c292d5c34
218 changed files with 10284 additions and 2 deletions

View File

@ -36,6 +36,7 @@ version <next>
- make decoding alpha optional for prores, ffv1 and vp6 by setting
the skip_alpha flag.
- ladspa wrapper filter
- native VP9 decoder
version 2.0:

1
configure vendored
View File

@ -1907,6 +1907,7 @@ vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
vp6a_decoder_select="vp6_decoder"
vp6f_decoder_select="vp6_decoder"
vp8_decoder_select="h264pred videodsp"
vp9_decoder_select="videodsp"
webp_decoder_select="vp8_decoder"
wmapro_decoder_select="mdct sinewin"
wmav1_decoder_select="mdct sinewin"

View File

@ -94,7 +94,7 @@ Then pass @code{--enable-libtwolame} to configure to enable it.
@section libvpx
FFmpeg can make use of the libvpx library for VP8 encoding.
FFmpeg can make use of the libvpx library for VP8/VP9 encoding.
Go to @url{http://www.webmproject.org/} and follow the instructions for
installing the library. Then pass @code{--enable-libvpx} to configure to
@ -676,6 +676,8 @@ following image formats are supported:
@tab fourcc: VP60,VP61,VP62
@item VP8 @tab E @tab X
@tab fourcc: VP80, encoding supported through external library libvpx
@item VP9 @tab E @tab X
@tab encoding supported through external library libvpx
@item Pinnacle TARGA CineWave YUV16 @tab @tab X
@tab fourcc: Y216
@item Prores @tab @tab X

View File

@ -471,6 +471,7 @@ OBJS-$(CONFIG_VP5_DECODER) += vp5.o vp56.o vp56data.o vp56dsp.o \
OBJS-$(CONFIG_VP6_DECODER) += vp6.o vp56.o vp56data.o vp56dsp.o \
vp6dsp.o vp56rac.o
OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp8dsp.o vp56rac.o
OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9dsp.o vp56rac.o
OBJS-$(CONFIG_VPLAYER_DECODER) += textdec.o ass.o
OBJS-$(CONFIG_VQA_DECODER) += vqavideo.o
OBJS-$(CONFIG_WAVPACK_DECODER) += wavpack.o

View File

@ -285,6 +285,7 @@ void avcodec_register_all(void)
REGISTER_DECODER(VP6A, vp6a);
REGISTER_DECODER(VP6F, vp6f);
REGISTER_DECODER(VP8, vp8);
REGISTER_DECODER(VP9, vp9);
REGISTER_DECODER(VQA, vqa);
REGISTER_DECODER(WEBP, webp);
REGISTER_ENCDEC (WMV1, wmv1);

3576
libavcodec/vp9.c Normal file

File diff suppressed because it is too large Load Diff

72
libavcodec/vp9.h Normal file
View File

@ -0,0 +1,72 @@
/*
* VP9 compatible video decoder
*
* Copyright (C) 2013 Ronald S. Bultje <rsbultje gmail com>
* Copyright (C) 2013 Clément Bœsch <u pkh me>
*
* This file is part of FFmpeg.
*
* FFmpeg 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.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_VP9_H
#define AVCODEC_VP9_H
enum TxfmMode {
TX_4X4,
TX_8X8,
TX_16X16,
TX_32X32,
N_TXFM_SIZES,
TX_SWITCHABLE = N_TXFM_SIZES,
N_TXFM_MODES
};
enum TxfmType {
DCT_DCT,
DCT_ADST,
ADST_DCT,
ADST_ADST,
N_TXFM_TYPES
};
enum IntraPredMode {
VERT_PRED,
HOR_PRED,
DC_PRED,
DIAG_DOWN_LEFT_PRED,
DIAG_DOWN_RIGHT_PRED,
VERT_RIGHT_PRED,
HOR_DOWN_PRED,
VERT_LEFT_PRED,
HOR_UP_PRED,
TM_VP8_PRED,
LEFT_DC_PRED,
TOP_DC_PRED,
DC_128_PRED,
DC_127_PRED,
DC_129_PRED,
N_INTRA_PRED_MODES
};
enum FilterMode {
FILTER_8TAP_SMOOTH,
FILTER_8TAP_REGULAR,
FILTER_8TAP_SHARP,
FILTER_BILINEAR,
FILTER_SWITCHABLE,
};
#endif /* AVCODEC_VP9_H */

2153
libavcodec/vp9data.h Normal file

File diff suppressed because it is too large Load Diff

2049
libavcodec/vp9dsp.c Normal file

File diff suppressed because it is too large Load Diff

117
libavcodec/vp9dsp.h Normal file
View File

@ -0,0 +1,117 @@
/*
* VP9 compatible video decoder
*
* Copyright (C) 2013 Ronald S. Bultje <rsbultje gmail com>
* Copyright (C) 2013 Clément Bœsch <u pkh me>
*
* This file is part of FFmpeg.
*
* FFmpeg 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.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_VP9DSP_H
#define AVCODEC_VP9DSP_H
#include <stdint.h>
#include "vp9.h"
typedef void (*vp9_mc_func)(uint8_t *dst, ptrdiff_t dst_stride,
const uint8_t *ref, ptrdiff_t ref_stride,
int h, int mx, int my);
typedef struct VP9DSPContext {
/*
* dimension 1: 0=4x4, 1=8x8, 2=16x16, 3=32x32
* dimension 2: intra prediction modes
*
* dst/left/top is aligned by transform-size (i.e. 4, 8, 16 or 32 pixels)
* stride is aligned by 16 pixels
* top[-1] is top/left; top[4,7] is top-right for 4x4
*/
// FIXME(rbultje) maybe replace left/top pointers with HAVE_TOP/
// HAVE_LEFT/HAVE_TOPRIGHT flags instead, and then handle it in-place?
// also needs to fit in with what h264/vp8/etc do
void (*intra_pred[N_TXFM_SIZES][N_INTRA_PRED_MODES])(uint8_t *dst,
ptrdiff_t stride,
const uint8_t *left,
const uint8_t *top);
/*
* dimension 1: 0=4x4, 1=8x8, 2=16x16, 3=32x32, 4=lossless (3-4=dct only)
* dimension 2: 0=dct/dct, 1=dct/adst, 2=adst/dct, 3=adst/adst
*
* dst is aligned by transform-size (i.e. 4, 8, 16 or 32 pixels)
* stride is aligned by 16 pixels
* block is 16-byte aligned
* eob indicates the position (+1) of the last non-zero coefficient,
* in scan-order. This can be used to write faster versions, e.g. a
* dc-only 4x4/8x8/16x16/32x32, or a 4x4-only (eob<10) 8x8/16x16/32x32,
* etc.
*/
// FIXME also write idct_add_block() versions for whole (inter) pred
// blocks, so we can do 2 4x4s at once
void (*itxfm_add[N_TXFM_SIZES + 1][N_TXFM_TYPES])(uint8_t *dst,
ptrdiff_t stride,
int16_t *block, int eob);
/*
* dimension 1: width of filter (0=4, 1=8, 2=16)
* dimension 2: 0=col-edge filter (h), 1=row-edge filter (v)
*
* dst/stride are aligned by 8
*/
void (*loop_filter_8[3][2])(uint8_t *dst, ptrdiff_t stride,
int mb_lim, int lim, int hev_thr);
/*
* dimension 1: 0=col-edge filter (h), 1=row-edge filter (v)
*
* The width of filter is assumed to be 16; dst/stride are aligned by 16
*/
void (*loop_filter_16[2])(uint8_t *dst, ptrdiff_t stride,
int mb_lim, int lim, int hev_thr);
/*
* dimension 1/2: width of filter (0=4, 1=8) for each filter half
* dimension 3: 0=col-edge filter (h), 1=row-edge filter (v)
*
* dst/stride are aligned by operation size
* this basically calls loop_filter[d1][d3][0](), followed by
* loop_filter[d2][d3][0]() on the next 8 pixels
* mb_lim/lim/hev_thr contain two values in the lowest two bytes of the
* integer.
*/
// FIXME perhaps a mix4 that operates on 32px (for AVX2)
void (*loop_filter_mix2[2][2][2])(uint8_t *dst, ptrdiff_t stride,
int mb_lim, int lim, int hev_thr);
/*
* dimension 1: hsize (0: 64, 1: 32, 2: 16, 3: 8, 4: 4)
* dimension 2: filter type (0: smooth, 1: regular, 2: sharp, 3: bilin)
* dimension 3: averaging type (0: put, 1: avg)
* dimension 4: x subpel interpolation (0: none, 1: 8tap/bilin)
* dimension 5: y subpel interpolation (1: none, 1: 8tap/bilin)
*
* dst/stride are aligned by hsize
*/
vp9_mc_func mc[5][4][2][2][2];
} VP9DSPContext;
void ff_vp9dsp_init(VP9DSPContext *dsp);
void ff_vp9dsp_init_x86(VP9DSPContext *dsp);
#endif /* AVCODEC_VP9DSP_H */

View File

@ -34,6 +34,7 @@ OBJS-$(CONFIG_VORBIS_DECODER) += x86/vorbisdsp_init.o
OBJS-$(CONFIG_VP3DSP) += x86/vp3dsp_init.o
OBJS-$(CONFIG_VP6_DECODER) += x86/vp6dsp_init.o
OBJS-$(CONFIG_VP8_DECODER) += x86/vp8dsp_init.o
OBJS-$(CONFIG_VP9_DECODER) += x86/vp9dsp_init.o
OBJS-$(CONFIG_WEBP_DECODER) += x86/vp8dsp_init.o
OBJS-$(CONFIG_XMM_CLOBBER_TEST) += x86/w64xmmtest.o
@ -98,4 +99,5 @@ YASM-OBJS-$(CONFIG_VORBIS_DECODER) += x86/vorbisdsp.o
YASM-OBJS-$(CONFIG_VP3DSP) += x86/vp3dsp.o
YASM-OBJS-$(CONFIG_VP6_DECODER) += x86/vp6dsp.o
YASM-OBJS-$(CONFIG_VP8_DECODER) += x86/vp8dsp.o
YASM-OBJS-$(CONFIG_VP9_DECODER) += x86/vp9dsp.o
YASM-OBJS-$(CONFIG_WEBP_DECODER) += x86/vp8dsp.o

278
libavcodec/x86/vp9dsp.asm Normal file
View File

@ -0,0 +1,278 @@
;******************************************************************************
;* VP9 SIMD optimizations
;*
;* Copyright (c) 2013 Ronald S. Bultje <rsbultje gmail com>
;*
;* This file is part of FFmpeg.
;*
;* FFmpeg 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.
;*
;* FFmpeg 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 FFmpeg; if not, write to the Free Software
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "libavutil/x86/x86util.asm"
SECTION_RODATA
; FIXME share with vp8dsp.asm
pw_256: times 8 dw 256
%macro F8_TAPS 8
times 8 db %1, %2
times 8 db %3, %4
times 8 db %5, %6
times 8 db %7, %8
%endmacro
; int8_t ff_filters_ssse3[3][15][4][16]
const filters_ssse3 ; smooth
F8_TAPS -3, -1, 32, 64, 38, 1, -3, 0
F8_TAPS -2, -2, 29, 63, 41, 2, -3, 0
F8_TAPS -2, -2, 26, 63, 43, 4, -4, 0
F8_TAPS -2, -3, 24, 62, 46, 5, -4, 0
F8_TAPS -2, -3, 21, 60, 49, 7, -4, 0
F8_TAPS -1, -4, 18, 59, 51, 9, -4, 0
F8_TAPS -1, -4, 16, 57, 53, 12, -4, -1
F8_TAPS -1, -4, 14, 55, 55, 14, -4, -1
F8_TAPS -1, -4, 12, 53, 57, 16, -4, -1
F8_TAPS 0, -4, 9, 51, 59, 18, -4, -1
F8_TAPS 0, -4, 7, 49, 60, 21, -3, -2
F8_TAPS 0, -4, 5, 46, 62, 24, -3, -2
F8_TAPS 0, -4, 4, 43, 63, 26, -2, -2
F8_TAPS 0, -3, 2, 41, 63, 29, -2, -2
F8_TAPS 0, -3, 1, 38, 64, 32, -1, -3
; regular
F8_TAPS 0, 1, -5, 126, 8, -3, 1, 0
F8_TAPS -1, 3, -10, 122, 18, -6, 2, 0
F8_TAPS -1, 4, -13, 118, 27, -9, 3, -1
F8_TAPS -1, 4, -16, 112, 37, -11, 4, -1
F8_TAPS -1, 5, -18, 105, 48, -14, 4, -1
F8_TAPS -1, 5, -19, 97, 58, -16, 5, -1
F8_TAPS -1, 6, -19, 88, 68, -18, 5, -1
F8_TAPS -1, 6, -19, 78, 78, -19, 6, -1
F8_TAPS -1, 5, -18, 68, 88, -19, 6, -1
F8_TAPS -1, 5, -16, 58, 97, -19, 5, -1
F8_TAPS -1, 4, -14, 48, 105, -18, 5, -1
F8_TAPS -1, 4, -11, 37, 112, -16, 4, -1
F8_TAPS -1, 3, -9, 27, 118, -13, 4, -1
F8_TAPS 0, 2, -6, 18, 122, -10, 3, -1
F8_TAPS 0, 1, -3, 8, 126, -5, 1, 0
; sharp
F8_TAPS -1, 3, -7, 127, 8, -3, 1, 0
F8_TAPS -2, 5, -13, 125, 17, -6, 3, -1
F8_TAPS -3, 7, -17, 121, 27, -10, 5, -2
F8_TAPS -4, 9, -20, 115, 37, -13, 6, -2
F8_TAPS -4, 10, -23, 108, 48, -16, 8, -3
F8_TAPS -4, 10, -24, 100, 59, -19, 9, -3
F8_TAPS -4, 11, -24, 90, 70, -21, 10, -4
F8_TAPS -4, 11, -23, 80, 80, -23, 11, -4
F8_TAPS -4, 10, -21, 70, 90, -24, 11, -4
F8_TAPS -3, 9, -19, 59, 100, -24, 10, -4
F8_TAPS -3, 8, -16, 48, 108, -23, 10, -4
F8_TAPS -2, 6, -13, 37, 115, -20, 9, -4
F8_TAPS -2, 5, -10, 27, 121, -17, 7, -3
F8_TAPS -1, 3, -6, 17, 125, -13, 5, -2
F8_TAPS 0, 1, -3, 8, 127, -7, 3, -1
SECTION .text
%macro filter_h_fn 1
%assign %%px mmsize/2
cglobal %1_8tap_1d_h_%%px, 6, 6, 11, dst, dstride, src, sstride, h, filtery
mova m6, [pw_256]
mova m7, [filteryq+ 0]
%if ARCH_X86_64 && mmsize > 8
mova m8, [filteryq+16]
mova m9, [filteryq+32]
mova m10, [filteryq+48]
%endif
.loop:
movh m0, [srcq-3]
movh m1, [srcq-2]
movh m2, [srcq-1]
movh m3, [srcq+0]
movh m4, [srcq+1]
movh m5, [srcq+2]
punpcklbw m0, m1
punpcklbw m2, m3
movh m1, [srcq+3]
movh m3, [srcq+4]
add srcq, sstrideq
punpcklbw m4, m5
punpcklbw m1, m3
pmaddubsw m0, m7
%if ARCH_X86_64 && mmsize > 8
pmaddubsw m2, m8
pmaddubsw m4, m9
pmaddubsw m1, m10
%else
pmaddubsw m2, [filteryq+16]
pmaddubsw m4, [filteryq+32]
pmaddubsw m1, [filteryq+48]
%endif
paddw m0, m2
paddw m4, m1
paddsw m0, m4
pmulhrsw m0, m6
%ifidn %1, avg
movh m1, [dstq]
%endif
packuswb m0, m0
%ifidn %1, avg
pavgb m0, m1
%endif
movh [dstq], m0
add dstq, dstrideq
dec hd
jg .loop
RET
%endmacro
INIT_MMX ssse3
filter_h_fn put
filter_h_fn avg
INIT_XMM ssse3
filter_h_fn put
filter_h_fn avg
%macro filter_v_fn 1
%assign %%px mmsize/2
%if ARCH_X86_64
cglobal %1_8tap_1d_v_%%px, 6, 8, 11, dst, dstride, src, sstride, h, filtery, src4, sstride3
%else
cglobal %1_8tap_1d_v_%%px, 4, 7, 11, dst, dstride, src, sstride, filtery, src4, sstride3
mov filteryq, r5mp
%define hd r4mp
%endif
sub srcq, sstrideq
lea sstride3q, [sstrideq*3]
sub srcq, sstrideq
mova m6, [pw_256]
sub srcq, sstrideq
mova m7, [filteryq+ 0]
lea src4q, [srcq+sstrideq*4]
%if ARCH_X86_64 && mmsize > 8
mova m8, [filteryq+16]
mova m9, [filteryq+32]
mova m10, [filteryq+48]
%endif
.loop:
; FIXME maybe reuse loads from previous rows, or just
; more generally unroll this to prevent multiple loads of
; the same data?
movh m0, [srcq]
movh m1, [srcq+sstrideq]
movh m2, [srcq+sstrideq*2]
movh m3, [srcq+sstride3q]
movh m4, [src4q]
movh m5, [src4q+sstrideq]
punpcklbw m0, m1
punpcklbw m2, m3
movh m1, [src4q+sstrideq*2]
movh m3, [src4q+sstride3q]
add srcq, sstrideq
add src4q, sstrideq
punpcklbw m4, m5
punpcklbw m1, m3
pmaddubsw m0, m7
%if ARCH_X86_64 && mmsize > 8
pmaddubsw m2, m8
pmaddubsw m4, m9
pmaddubsw m1, m10
%else
pmaddubsw m2, [filteryq+16]
pmaddubsw m4, [filteryq+32]
pmaddubsw m1, [filteryq+48]
%endif
paddw m0, m2
paddw m4, m1
paddsw m0, m4
pmulhrsw m0, m6
%ifidn %1, avg
movh m1, [dstq]
%endif
packuswb m0, m0
%ifidn %1, avg
pavgb m0, m1
%endif
movh [dstq], m0
add dstq, dstrideq
dec hd
jg .loop
RET
%endmacro
INIT_MMX ssse3
filter_v_fn put
filter_v_fn avg
INIT_XMM ssse3
filter_v_fn put
filter_v_fn avg
%macro fpel_fn 6
%if %2 == 4
%define %%srcfn movh
%define %%dstfn movh
%else
%define %%srcfn movu
%define %%dstfn mova
%endif
%if %2 <= 16
cglobal %1%2, 5, 7, 4, dst, dstride, src, sstride, h, dstride3, sstride3
lea sstride3q, [sstrideq*3]
lea dstride3q, [dstrideq*3]
%else
cglobal %1%2, 5, 5, 4, dst, dstride, src, sstride, h
%endif
.loop:
%%srcfn m0, [srcq]
%%srcfn m1, [srcq+s%3]
%%srcfn m2, [srcq+s%4]
%%srcfn m3, [srcq+s%5]
lea srcq, [srcq+sstrideq*%6]
%ifidn %1, avg
pavgb m0, [dstq]
pavgb m1, [dstq+d%3]
pavgb m2, [dstq+d%4]
pavgb m3, [dstq+d%5]
%endif
%%dstfn [dstq], m0
%%dstfn [dstq+d%3], m1
%%dstfn [dstq+d%4], m2
%%dstfn [dstq+d%5], m3
lea dstq, [dstq+dstrideq*%6]
sub hd, %6
jnz .loop
RET
%endmacro
%define d16 16
%define s16 16
INIT_MMX mmx
fpel_fn put, 4, strideq, strideq*2, stride3q, 4
fpel_fn put, 8, strideq, strideq*2, stride3q, 4
INIT_MMX sse
fpel_fn avg, 4, strideq, strideq*2, stride3q, 4
fpel_fn avg, 8, strideq, strideq*2, stride3q, 4
INIT_XMM sse
fpel_fn put, 16, strideq, strideq*2, stride3q, 4
fpel_fn put, 32, mmsize, strideq, strideq+mmsize, 2
fpel_fn put, 64, mmsize, mmsize*2, mmsize*3, 1
INIT_XMM sse2
fpel_fn avg, 16, strideq, strideq*2, stride3q, 4
fpel_fn avg, 32, mmsize, strideq, strideq+mmsize, 2
fpel_fn avg, 64, mmsize, mmsize*2, mmsize*3, 1
%undef s16
%undef d16

View File

@ -0,0 +1,214 @@
/*
* VP9 SIMD optimizations
*
* Copyright (c) 2013 Ronald S. Bultje <rsbultje gmail com>
*
* This file is part of FFmpeg.
*
* FFmpeg 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.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "libavutil/cpu.h"
#include "libavutil/mem.h"
#include "libavutil/x86/asm.h"
#include "libavcodec/vp9dsp.h"
#if HAVE_YASM
#define fpel_func(avg, sz, opt) \
void ff_##avg##sz##_##opt(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, int mx, int my)
fpel_func(put, 4, mmx);
fpel_func(put, 8, mmx);
fpel_func(put, 16, sse);
fpel_func(put, 32, sse);
fpel_func(put, 64, sse);
fpel_func(avg, 4, sse);
fpel_func(avg, 8, sse);
fpel_func(avg, 16, sse2);
fpel_func(avg, 32, sse2);
fpel_func(avg, 64, sse2);
#undef fpel_func
#define mc_func(avg, sz, dir, opt) \
void ff_##avg##_8tap_1d_##dir##_##sz##_##opt(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, const int8_t (*filter)[16])
#define mc_funcs(sz) \
mc_func(put, sz, h, ssse3); \
mc_func(avg, sz, h, ssse3); \
mc_func(put, sz, v, ssse3); \
mc_func(avg, sz, v, ssse3)
mc_funcs(4);
mc_funcs(8);
#undef mc_funcs
#undef mc_func
#define mc_rep_func(avg, sz, hsz, dir, opt) \
static av_always_inline void \
ff_##avg##_8tap_1d_##dir##_##sz##_##opt(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, const int8_t (*filter)[16]) \
{ \
ff_##avg##_8tap_1d_##dir##_##hsz##_##opt(dst, dst_stride, src, \
src_stride, h, filter); \
ff_##avg##_8tap_1d_##dir##_##hsz##_##opt(dst + hsz, dst_stride, src + hsz, \
src_stride, h, filter); \
}
#define mc_rep_funcs(sz, hsz) \
mc_rep_func(put, sz, hsz, h, ssse3); \
mc_rep_func(avg, sz, hsz, h, ssse3); \
mc_rep_func(put, sz, hsz, v, ssse3); \
mc_rep_func(avg, sz, hsz, v, ssse3)
mc_rep_funcs(16, 8);
mc_rep_funcs(32, 16);
mc_rep_funcs(64, 32);
#undef mc_rep_funcs
#undef mc_rep_func
extern const int8_t ff_filters_ssse3[3][15][4][16];
#define filter_8tap_2d_fn(op, sz, f, fname) \
static void op##_8tap_##fname##_##sz##hv_ssse3(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, int mx, int my) \
{ \
LOCAL_ALIGNED_16(uint8_t, temp, [71 * 64]); \
ff_put_8tap_1d_h_##sz##_ssse3(temp, 64, src - 3 * src_stride, src_stride, \
h + 7, ff_filters_ssse3[f][mx - 1]); \
ff_##op##_8tap_1d_v_##sz##_ssse3(dst, dst_stride, temp + 3 * 64, 64, \
h, ff_filters_ssse3[f][my - 1]); \
}
#define filters_8tap_2d_fn(op, sz) \
filter_8tap_2d_fn(op, sz, FILTER_8TAP_REGULAR, regular) \
filter_8tap_2d_fn(op, sz, FILTER_8TAP_SHARP, sharp) \
filter_8tap_2d_fn(op, sz, FILTER_8TAP_SMOOTH, smooth)
#define filters_8tap_2d_fn2(op) \
filters_8tap_2d_fn(op, 64) \
filters_8tap_2d_fn(op, 32) \
filters_8tap_2d_fn(op, 16) \
filters_8tap_2d_fn(op, 8) \
filters_8tap_2d_fn(op, 4)
filters_8tap_2d_fn2(put)
filters_8tap_2d_fn2(avg)
#undef filters_8tap_2d_fn2
#undef filters_8tap_2d_fn
#undef filter_8tap_2d_fn
#define filter_8tap_1d_fn(op, sz, f, fname, dir, dvar) \
static void op##_8tap_##fname##_##sz##dir##_ssse3(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, int mx, int my) \
{ \
ff_##op##_8tap_1d_##dir##_##sz##_ssse3(dst, dst_stride, src, src_stride, \
h, ff_filters_ssse3[f][dvar - 1]); \
}
#define filters_8tap_1d_fn(op, sz, dir, dvar) \
filter_8tap_1d_fn(op, sz, FILTER_8TAP_REGULAR, regular, dir, dvar) \
filter_8tap_1d_fn(op, sz, FILTER_8TAP_SHARP, sharp, dir, dvar) \
filter_8tap_1d_fn(op, sz, FILTER_8TAP_SMOOTH, smooth, dir, dvar)
#define filters_8tap_1d_fn2(op, sz) \
filters_8tap_1d_fn(op, sz, h, mx) \
filters_8tap_1d_fn(op, sz, v, my)
#define filters_8tap_1d_fn3(op) \
filters_8tap_1d_fn2(op, 64) \
filters_8tap_1d_fn2(op, 32) \
filters_8tap_1d_fn2(op, 16) \
filters_8tap_1d_fn2(op, 8) \
filters_8tap_1d_fn2(op, 4)
filters_8tap_1d_fn3(put)
filters_8tap_1d_fn3(avg)
#undef filters_8tap_1d_fn
#undef filters_8tap_1d_fn2
#undef filters_8tap_1d_fn3
#undef filter_8tap_1d_fn
#endif /* HAVE_YASM */
av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp)
{
#if HAVE_YASM
int cpu_flags = av_get_cpu_flags();
#define init_fpel(idx1, idx2, sz, type, opt) \
dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][0][0] = \
dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][0][0] = \
dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][0][0] = \
dsp->mc[idx1][FILTER_BILINEAR ][idx2][0][0] = ff_##type##sz##_##opt
#define init_subpel1(idx1, idx2, idxh, idxv, sz, dir, type, opt) \
dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][idxh][idxv] = type##_8tap_smooth_##sz##dir##_##opt; \
dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][idxh][idxv] = type##_8tap_regular_##sz##dir##_##opt; \
dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][idxh][idxv] = type##_8tap_sharp_##sz##dir##_##opt
#define init_subpel2(idx, idxh, idxv, dir, type, opt) \
init_subpel1(0, idx, idxh, idxv, 64, dir, type, opt); \
init_subpel1(1, idx, idxh, idxv, 32, dir, type, opt); \
init_subpel1(2, idx, idxh, idxv, 16, dir, type, opt); \
init_subpel1(3, idx, idxh, idxv, 8, dir, type, opt); \
init_subpel1(4, idx, idxh, idxv, 4, dir, type, opt)
#define init_subpel3(idx, type, opt) \
init_subpel2(idx, 1, 1, hv, type, opt); \
init_subpel2(idx, 0, 1, v, type, opt); \
init_subpel2(idx, 1, 0, h, type, opt)
if (cpu_flags & AV_CPU_FLAG_MMX) {
init_fpel(4, 0, 4, put, mmx);
init_fpel(3, 0, 8, put, mmx);
}
if (cpu_flags & AV_CPU_FLAG_SSE) {
init_fpel(2, 0, 16, put, sse);
init_fpel(1, 0, 32, put, sse);
init_fpel(0, 0, 64, put, sse);
init_fpel(4, 1, 4, avg, sse);
init_fpel(3, 1, 8, avg, sse);
}
if (cpu_flags & AV_CPU_FLAG_SSE2) {
init_fpel(2, 1, 16, avg, sse2);
init_fpel(1, 1, 32, avg, sse2);
init_fpel(0, 1, 64, avg, sse2);
}
if (cpu_flags & AV_CPU_FLAG_SSSE3) {
init_subpel3(0, put, ssse3);
init_subpel3(1, avg, ssse3);
}
#undef init_fpel
#undef init_subpel1
#undef init_subpel2
#undef init_subpel3
#endif /* HAVE_YASM */
}

View File

@ -700,7 +700,7 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14
extern %1
%endmacro
%macro const 2+
%macro const 1-2+
%xdefine %1 mangle(private_prefix %+ _ %+ %1)
global %1
%1: %2

View File

@ -57,3 +57,33 @@ $(eval $(call FATE_VP8_FULL))
$(eval $(call FATE_VP8_FULL,-emu-edge,-flags +emu_edge))
FATE_SAMPLES_AVCONV-$(CONFIG_VP8_DECODER) += $(FATE_VP8-yes)
fate-vp8: $(FATE_VP8-yes)
define FATE_VP9_SUITE
FATE_VP9-$(CONFIG_MATROSKA_DEMUXER) += fate-vp9$(2)-$(1)
fate-vp9$(2)-$(1): CMD = framemd5 $(3) -i $(TARGET_SAMPLES)/vp9-test-vectors/vp90-2-$(1).webm
fate-vp9$(2)-$(1): REF = $(SRC_PATH)/tests/ref/fate/vp9-$(1)
endef
VP9_Q = 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 \
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 \
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 \
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
VP9_SHARP = 1 2 3 4 5 6 7
VP9_SIZE_A = 08 10 16 18 32 34 64 66
VP9_SIZE_B = 196 198 200 202 208 210 224 226
define FATE_VP9_FULL
$(foreach Q,$(VP9_Q),$(eval $(call FATE_VP9_SUITE,00-quantizer-$(Q),$(1),$(2))))
$(foreach SHARP,$(VP9_SHARP),$(eval $(call FATE_VP9_SUITE,01-sharpness-$(SHARP),$(1),$(2))))
$(foreach W,$(VP9_SIZE_A),$(eval $(foreach H,$(VP9_SIZE_A),$(eval $(call FATE_VP9_SUITE,02-size-$(W)x$(H),$(1),$(2))))))
$(foreach W,$(VP9_SIZE_B),$(eval $(foreach H,$(VP9_SIZE_B),$(eval $(call FATE_VP9_SUITE,03-size-$(W)x$(H),$(1),$(2))))))
$(eval $(call FATE_VP9_SUITE,03-deltaq,$(1),$(2)))
$(eval $(call FATE_VP9_SUITE,2pass-akiyo,$(1),$(2)))
$(eval $(call FATE_VP9_SUITE,segmentation-akiyo,$(1),$(2)))
$(eval $(call FATE_VP9_SUITE,tiling-pedestrian,$(1),$(2)))
endef
$(eval $(call FATE_VP9_FULL))
$(eval $(call FATE_VP9_FULL,-emu-edge,-flags +emu_edge))
FATE_SAMPLES_AVCONV-$(CONFIG_VP9_DECODER) += $(FATE_VP9-yes)
fate-vp9: $(FATE_VP9-yes)

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, c3fbb7abbdb5bd4ed4a7e34768c17df1
0, 1, 1, 1, 152064, 08203c2595bdb2d58ead6f921345d699

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, f041b870cf9236d5f22e2b08a77d5958
0, 1, 1, 1, 152064, cbdb7526986ae15592891488c9afc84c

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 98048cfdb4af5059f4085c5acc94ef8f
0, 1, 1, 1, 152064, 8160183e1eed1d0af4427be216b8b9f7

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 15c548208f5eda243a151a42f4d64855
0, 1, 1, 1, 152064, e96d463dc8e9b27b1c2ec40f77eee6ef

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 928c64a0747ac57ab50c1520d694fea7
0, 1, 1, 1, 152064, a6f6daa293231e95ef30ed168f582c84

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 082460718b7d7046c8fb23184b7f71ca
0, 1, 1, 1, 152064, 4a41aad51c40a92df72333e13f47d3fe

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, cfca1bed96ff62a69b2d841fda01c6b9
0, 1, 1, 1, 152064, 9b4d61f1b998745c108f8eb67925e03d

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6f5122064bead9d9882bec2698a6ed9c
0, 1, 1, 1, 152064, 50dae67d2f57a76eece210dee8b6df9e

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, eb3d6985fcda5d93dd62d53354e8a093
0, 1, 1, 1, 152064, 5b1f5b7780b4cafe1f75e56a0b526643

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, d7ccaf28c59875fe91983def5490d2b1
0, 1, 1, 1, 152064, bd98fe9492054826748de840b4495309

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 20dda6231f9801c9c237c6d09d9939b6
0, 1, 1, 1, 152064, 23c91e93807fb9a4ed5bd5bdd449d99f

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 960833315ebcdee97f46c4d98d0f3fef
0, 1, 1, 1, 152064, eec40507d17b64b7895a61cb87b2096a

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6533224d3b6ba1ec0dd973bbe56c6349
0, 1, 1, 1, 152064, 12ceadc6d28327a24a75f8c40b6084d1

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 7268de6756014f79a56dcf010c52a97f
0, 1, 1, 1, 152064, 9e39e9b0e2295b8460dfa05f44762771

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 57e9e333c641fa952f7485b788df225a
0, 1, 1, 1, 152064, 551f0cea83dcdf4540c3983736757874

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 17a0a2842856b9e89aede237648d5dda
0, 1, 1, 1, 152064, c9fcade888a38621bebe3d4b41664245

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6cc2089e9a3d352fe10b59ccd935c677
0, 1, 1, 1, 152064, d165bf7b9cb901e121a65038758d8613

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, bc80511c83162c09661f155cd29f6dd8
0, 1, 1, 1, 152064, a62f1cbdb3f86d2fb4c880cfd917def5

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, b2d350f6faa41cb50c2e8a9907d0f4a5
0, 1, 1, 1, 152064, 39b4380d16bc8e093dd4dba475175fb3

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 441e09be3c15fcb240afd74bb7a10a72
0, 1, 1, 1, 152064, 32ae5dac876ca5d5ae6ab7c74f4dc25d

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 7786eb9944dba0553e129133523a98c1
0, 1, 1, 1, 152064, 206d888f8453427f10a40aa8bf5f6df0

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, aab95e195be71feca050a839d7b3154d
0, 1, 1, 1, 152064, 02a05d699bbbdc477e34bb0dad9f0391

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 41f853c3ee2d4611b645cc643d82e287
0, 1, 1, 1, 152064, 1c240c653110ff8609ca0f0287a6496d

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, bc5b07369df50c8f97ce1a377fe513cf
0, 1, 1, 1, 152064, ce62ddb4f3e305d0f8587ae8bb44cc79

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 982d54041221c977b6f0e37a9236cc76
0, 1, 1, 1, 152064, 57631e7f13f645c834e2944ebfd6d40e

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, b0fb55f3f2f56b3d27038e83c10123ce
0, 1, 1, 1, 152064, 9fcac3becdcc2d30d778a55eca4c2018

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 4f645e0f354da77b9e2f2a6753c361da
0, 1, 1, 1, 152064, b7542998ec298273ca662bc9b658d10e

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6edc96a3747cad43828397045764206e
0, 1, 1, 1, 152064, 5fbc65d20fdca1abd69079851ce676d3

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 5db3e910e70da38bb91d01d73acc33dd
0, 1, 1, 1, 152064, b920ee7f7e61b7fdf9f44b1f738d0292

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 3cb3e310be5305077efa6216f6f10654
0, 1, 1, 1, 152064, 692d3e098af5978fe1a898ebc1a66a7a

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, e3b3cea66ea38c5dfba1aa73bb4c611d
0, 1, 1, 1, 152064, 42bb3e54b19c3f4c4f7ee3a6ba012e19

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 2523e9ecfd3781eafcd7da192dc105e9
0, 1, 1, 1, 152064, 6d5feea012b9a1f51fc643633e728764

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 0a0305eba36500ebf6cc6cc0f01f5a3b
0, 1, 1, 1, 152064, 2c76bcd6763467f9057a726fbcf50ab1

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, c68433e0e94047c220be9b629334f744
0, 1, 1, 1, 152064, fcfa4dff7a39bc9c5e315849ecbb46ea

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, ad9dc2f912c137b014a33e2792c88a25
0, 1, 1, 1, 152064, 11221ee4ea5c776f43af68756682cd5a

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 75031f898cccf303a64ab46b1f815389
0, 1, 1, 1, 152064, a4fc864e7fbc470dfcab6207e0eea152

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, c7824af009fde6cafdd8d39fae6bb6cf
0, 1, 1, 1, 152064, 516a82d5fc4dfa3daf713ed2ec36041b

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, fb23e0bc64728a492a33d985032f21b8

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 8347bfb891317e89ef66781d6c28e24f
0, 1, 1, 1, 152064, a5722f824d32deac042513a1a7dcdcd0

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 018968f97fac3bdff146cf22c1da5ef0
0, 1, 1, 1, 152064, ca8b09b01e5132183395e238f1c7901e

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 792660f6589ad5340be4bd0554435866
0, 1, 1, 1, 152064, 68c84c8a15d679e0a73678b93215c62c

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a456bdfc6c1c07b4cb3a3848843743b9
0, 1, 1, 1, 152064, fe41a12b8cb6bc5667ba2179e076f3b0

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, f016dd8431694d989700fb1ba71a5b2d
0, 1, 1, 1, 152064, e89c3c5b935157b40f2fb0ab92415828

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 7b8ab82625f3006bac89d4fb5197e71c
0, 1, 1, 1, 152064, 18bd3716045563dfba2c72b640b3274b

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 66fde04d8320c750e56406feefd29979
0, 1, 1, 1, 152064, f9d01d8fc1722ec345e624e14b404215

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, cc97597b015896d73f3e60e7ae44c4da
0, 1, 1, 1, 152064, fea98bc508f92135641ab99762444b14

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 79ed95c741178bb3c0954f1f6f8e21a3
0, 1, 1, 1, 152064, f02a06a5e2b5b7619c9a52c5bea0564d

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 9b98e948b8c2a822f21bd8419e6f4410
0, 1, 1, 1, 152064, 491382d68c16c2a3c6f1746598bc4a97

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, f0f095b0edae7262f44d7ed7ef84ded4
0, 1, 1, 1, 152064, 0e833889ccac81d60251007d1baf6500

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6c1b7b7827617fb9b8417aca2cfdbcaa
0, 1, 1, 1, 152064, 4c1fc8a89297fdcf79f0faabd42b8684

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, ca6142db68463487bc28c888ab38476c
0, 1, 1, 1, 152064, 02a71153ec70f569524c3d814cb62f86

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, eece2627df1ddf0872256eb92352e179
0, 1, 1, 1, 152064, 0ee9f221246ad747250e4b5e8ba586e2

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 7290039d974c4e50db9d69f9864bcdbe
0, 1, 1, 1, 152064, 264765de9d02503038a4da54133b9f85

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 917af24da66f143a56a01eb2c2254285
0, 1, 1, 1, 152064, 45a05d3bc644420519619e4115662a70

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 6fea2820bb10a9dec9add4d2452b01f5
0, 1, 1, 1, 152064, 74675169a4bfc2ff5463c4db5d85a79f

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 11e5d196f6537fb7d85988d90195e556
0, 1, 1, 1, 152064, 8536106795f7c93c5a43a11493527469

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 40839b7a3a40ec10f96b8a75224f646d
0, 1, 1, 1, 152064, 11408dd73e8c45ddaab99f5c9650102b

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, d0e9fa03dd48da4592ebaadb4e3794e0
0, 1, 1, 1, 152064, 5172e29b1e04cd543833d6a68aab297c

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, bef4a27d460e7697e038fe6f1c8bd597
0, 1, 1, 1, 152064, 124674686cafc5f2ff5bc7ea412b8f3b

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, ae9d99e9d16ef20073300559566844ae
0, 1, 1, 1, 152064, da9405e5a6bfe4ed18d927ba2004008e

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 9e66bb8e1b5e206ea4afe4bf2d335ac5
0, 1, 1, 1, 152064, 092b74c905c12c1e87e90f5a79857736

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, d062dc6be246c8042744018765ef50a8
0, 1, 1, 1, 152064, 45fd9cbacb6a91060a7e49a58a85869d

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 62f7e42fe653e81c5a65a25389e045b5
0, 1, 1, 1, 152064, cb0cdd0b25689e0a43328550011d960d

View File

@ -0,0 +1,3 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, 8467643dceff827e04acd82eeff1d1b0
0, 1, 1, 1, 152064, c786f49d66f4dfd685dea9605821a19f

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, aa20a75be3a316193496706c9f760d08
0, 2, 2, 1, 152064, 95567be97a64d3c9efe45f2524116a2e
0, 3, 3, 1, 152064, 219e86cd6b3cca312856eead21776b1c
0, 4, 4, 1, 152064, 4a67fd359ca362398e97c15eb018a2bb
0, 5, 5, 1, 152064, 9916d4e359274d690827f0eb22547423
0, 6, 6, 1, 152064, a07785b52561150c48f1a8eff89d5d75
0, 7, 7, 1, 152064, a3382a92982953dfa20018e5ac975b51
0, 8, 8, 1, 152064, 911836989ca7b148438aa3ec7fc7e303
0, 9, 9, 1, 152064, 5627b981e3fc9e4401d35d3a5ab25917

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, cd94572239817ae7c9b07de739c3272b
0, 2, 2, 1, 152064, 383cf752d457e122b5ff49d08960208e
0, 3, 3, 1, 152064, 1c0a6ec9cd3ce29b8b004e7526f1b07e
0, 4, 4, 1, 152064, 91c42a8a108d67947cabfc2a5a80df66
0, 5, 5, 1, 152064, 08c57fc1f3fec0305883315a66c714d1
0, 6, 6, 1, 152064, 70cb8d8dc83eac82f2d3c4b0376bb1aa
0, 7, 7, 1, 152064, ffd62a9ef829ec81f0f74f740488a41f
0, 8, 8, 1, 152064, bab0aa23b5854e2a70926046e4618710
0, 9, 9, 1, 152064, fec456f38f2a43661e786a8d5f67ed15

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, 0d487a146393a0b8b84b4be1b371b507
0, 2, 2, 1, 152064, 68372e191eba620a431cfff226026ac3
0, 3, 3, 1, 152064, de7fd274460e36b983fe93acc208d72f
0, 4, 4, 1, 152064, afbd36c61bab65b98ff9acf08e215721
0, 5, 5, 1, 152064, e1e9fc2ab4e7a187a8d8d84aae48d6b9
0, 6, 6, 1, 152064, 11d95de6a9cc5e00511e99534779faac
0, 7, 7, 1, 152064, cd2f5539fdfc2d8eefe6b6da28c13398
0, 8, 8, 1, 152064, a8b3aeed41da7aeb8d5b962ee4a4af93
0, 9, 9, 1, 152064, 4283670bd1c1c506ef18d3dafca22035

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, 8bad76c55b5149169d64ce6512521de6
0, 2, 2, 1, 152064, c1d986e1f9bf46382e598ba289b9bd7c
0, 3, 3, 1, 152064, 86c097ac6069c786023d3561dae68bac
0, 4, 4, 1, 152064, 8c238a2831b8c7c49736b6de6ff76ed8
0, 5, 5, 1, 152064, cb5a038ed0a74a317ee72dae93a7ee3e
0, 6, 6, 1, 152064, f8fe330a257e3e4e4c39c1c12820a654
0, 7, 7, 1, 152064, a73e2fcdcbb9334c0c123f8276a2c881
0, 8, 8, 1, 152064, 24fccece8ee639e4d0e00e4060e1db0c
0, 9, 9, 1, 152064, 46d6e9aad69a39c718c5fd1e41e86e6e

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, f1ce0a5d57a46c9ff1331804b7b03fdb
0, 2, 2, 1, 152064, 0364a085b06bee6b980189cf5378eda9
0, 3, 3, 1, 152064, 4b5358698d734b0ae210909a913d4c1e
0, 4, 4, 1, 152064, dc22565aaceee77b15fd8ab3c84bd5e0
0, 5, 5, 1, 152064, 5f6340b656536292b46ba9a647aeb6e4
0, 6, 6, 1, 152064, b7d4bce9a04b2a6caa45801be15e331e
0, 7, 7, 1, 152064, 534c851cfe59ffc047815ece98d8cede
0, 8, 8, 1, 152064, 786b0e1564d5c71aabfc2dd528cff4e7
0, 9, 9, 1, 152064, cac0366209cf471bb7cc3e64966cbbd4

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, 45d9ca07ed04210b1ebc743169bc8ec4
0, 2, 2, 1, 152064, 5b646cc309a711f1d8814f925002d8c4
0, 3, 3, 1, 152064, 34db8db727fa1ded0a55cc7cf85be249
0, 4, 4, 1, 152064, 54173d08afe6369b16a9c0c9cc6ce04d
0, 5, 5, 1, 152064, 76275b0a478cdb3c1fb527ebbce023c3
0, 6, 6, 1, 152064, e7643cdf0c42f2af700d8730bfc1a453
0, 7, 7, 1, 152064, 6e53097e56f680cb658d63100e7736f7
0, 8, 8, 1, 152064, 1a407c3c8ea1d5245ae68c5ce7de70e1
0, 9, 9, 1, 152064, 6cbca24912cadf09b20be74f14e359c9

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 152064, a2e5c820fd9733e18f9349fb658ca281
0, 1, 1, 1, 152064, f719d0be18d16a448b4e7da3e2d9bf28
0, 2, 2, 1, 152064, 83ee8ebc0ca796782a2376a76f2ffc26
0, 3, 3, 1, 152064, 7cf5afdbc229e1af50a5377cfc23d831
0, 4, 4, 1, 152064, 44244e896e0362f6376ba5afa563ba8b
0, 5, 5, 1, 152064, df5f518d44eb6cb91b2df5a30d27ef82
0, 6, 6, 1, 152064, 43cc3f151b8337aca7ee659c8abeb783
0, 7, 7, 1, 152064, 4e89573470d9b97464e10806fc81aa8b
0, 8, 8, 1, 152064, 62e0ba70f07ece8d85372f0a42e83a9a
0, 9, 9, 1, 152064, 45ac2928acb11326f6c4a21401f3609c

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 96, 52def242c36123e5a8f5f53d6a971399
0, 1, 1, 1, 96, 79c93360fbd47179400414bbfee0901c
0, 2, 2, 1, 96, c3b1947c79537baa7838905276276a91
0, 3, 3, 1, 96, 20f35e501bdee0bc63e87b9240265c25
0, 4, 4, 1, 96, 5e8f1c464bafd54833c51860906b5368
0, 5, 5, 1, 96, f57b592600dfc99e634a083278af769a
0, 6, 6, 1, 96, 7b02191f85590cbad3f148c7b92d6436
0, 7, 7, 1, 96, b0a1c9870447a1744f64cd4087ef55ee
0, 8, 8, 1, 96, c82712b1ba7a95efb67cbdde0ad708b6
0, 9, 9, 1, 96, 89f4539f8d7a7b45a91fd2f46335988e

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 120, ea3e0f807304b0eb2d3e329b0124f75c
0, 1, 1, 1, 120, 8d13cf682d63e7eb13094f55d67fc458
0, 2, 2, 1, 120, e729cc6c3684c94a8f6118c618efc3ea
0, 3, 3, 1, 120, ac43a0ace8e4112e877c2491ecc14fb5
0, 4, 4, 1, 120, 53695f90b88d8e8cb838f0faec3238d3
0, 5, 5, 1, 120, 40afd1c4dfd4a2e3b31631c46d252bcc
0, 6, 6, 1, 120, 2b656f76f2e84d2f82d9bda2b5be94d3
0, 7, 7, 1, 120, b22f004d678d047bc401be5e040cf883
0, 8, 8, 1, 120, 57c840319abfb9c31013fbde54de3fb0
0, 9, 9, 1, 120, 0f3dfc156216d7cfb6fd1d8c77dadab9

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 192, 0553e56a9d89aea496421885aab491f5
0, 1, 1, 1, 192, b2a14cf676f7ebf3c50450050f76ad16
0, 2, 2, 1, 192, a308d981e09b50571fb0c8ebdcefe505
0, 3, 3, 1, 192, d592ec625a0ac0373e82610c3eed9864
0, 4, 4, 1, 192, acd19642455e643023b4fb882c3891ba
0, 5, 5, 1, 192, 5af5390fd8c29b795e0ddf83f3f34284
0, 6, 6, 1, 192, 473505aa2a76231725cf2107d6c9dbef
0, 7, 7, 1, 192, 84860db6887e320f2d64f80cf0032e57
0, 8, 8, 1, 192, 408e9cf60e99ae99d204ff08f3196d1a
0, 9, 9, 1, 192, d8af96b79258f9382e911ed38340bdf5

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 216, 4c41f93b1b280b37bc77d7047435eaa4
0, 1, 1, 1, 216, c9c80fdba2ebc2b8c3490ae35e34f84f
0, 2, 2, 1, 216, 089d86acb3263fa5ef4f591a7f44556d
0, 3, 3, 1, 216, 938fca6d93b83484144f5054e4838a41
0, 4, 4, 1, 216, e0592e2ac9f5e09525ce0d3904cadf47
0, 5, 5, 1, 216, ea43ff5d1330986e60c08567262ea764
0, 6, 6, 1, 216, 08b40fe109ee90188f1cba9bbb1b376e
0, 7, 7, 1, 216, b067068a2a7e36d5c5b5b405a1e73a18
0, 8, 8, 1, 216, 9cf2d350296288803434b7451bd2be85
0, 9, 9, 1, 216, 3c785e21dc228d6396738fbfcb470289

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 384, f92a7777fd69aa2f2914d9a41c4828ba
0, 1, 1, 1, 384, 62e1cc73487d2249a88a60e35a22d9c7
0, 2, 2, 1, 384, aa2619b605cb65eda15fdd99d5775550
0, 3, 3, 1, 384, e6f0a491c543b835d0cefe5ca62c3dbe
0, 4, 4, 1, 384, 361be1a06913c398f09494ca1b2d288f
0, 5, 5, 1, 384, 0497bf849a973357c0ccb8d43f5bd8b4
0, 6, 6, 1, 384, 5ac6ac523147c409dd00820622161dd7
0, 7, 7, 1, 384, 7d07245574a46c524360f09be29a5f19
0, 8, 8, 1, 384, fcfa7fbcaf42f81e4e34a4ee5a029ca1
0, 9, 9, 1, 384, 336e3fe4f15d3d6c82d82b1855dcfeb4

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 408, f3f2cd8f157466ff23dace85d77367ce
0, 1, 1, 1, 408, 639d9b70a14062e95559c12d2b597f91
0, 2, 2, 1, 408, b2ee07a6656af583f19593229fa11848
0, 3, 3, 1, 408, 74e3b5ab4c798a0afe745694e871bbd5
0, 4, 4, 1, 408, 35f1c30d0f8678f319a392a6c53b5989
0, 5, 5, 1, 408, 07e2b4c0b92a394bfb11124fe80476f0
0, 6, 6, 1, 408, 7864bd20dfc5280e5f027d67ea22bf30
0, 7, 7, 1, 408, 10a2925a7b91dfa9b82de76069388fd4
0, 8, 8, 1, 408, 79cc7f7a149e8d6e04e065f75e63733c
0, 9, 9, 1, 408, 6453d10d97532d9bb03f7c06cba9fca0

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 768, 764bd02b781a38c621a109c12f3d9393
0, 1, 1, 1, 768, 79496bd2b9212026af816b3b7a0587d5
0, 2, 2, 1, 768, 2a3afd47ba3d075033fd94d5c3746c45
0, 3, 3, 1, 768, fca00cad8d37a6646337baebadd0ca31
0, 4, 4, 1, 768, aca376fb3f8a5ef670ecc2430037262a
0, 5, 5, 1, 768, 7e6c8d96d1e24855c3e380f1bf2ce02c
0, 6, 6, 1, 768, 09e051241972969d439f27f324d78490
0, 7, 7, 1, 768, 2566b2a425caaba41305bf04ff10ea01
0, 8, 8, 1, 768, db3995bedee42ada1b4ee63c339daf1b
0, 9, 9, 1, 768, b00b8f1bf4fd907f0487738f5b5442c6

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 792, df20e8df89449fe50bb610e95a449a95
0, 1, 1, 1, 792, 18f1a66d463274d1b0489f3a50e86857
0, 2, 2, 1, 792, b0cc102875a94c9a92e53826617adbe9
0, 3, 3, 1, 792, dfece7c17b4b149283ef51bdc1bd440e
0, 4, 4, 1, 792, 6e346884f67be259fcabe493109cb63c
0, 5, 5, 1, 792, 6d282127311eb2d958377490d7cb77f0
0, 6, 6, 1, 792, 637ac8b14ca5ddbaf7b8910406c3cd08
0, 7, 7, 1, 792, e7980f3fcb36969da0d218c4389fa9e8
0, 8, 8, 1, 792, 730a1c95b9fb165f6e1a2f33a0d25de0
0, 9, 9, 1, 792, 7bd8424d0783b1c8ad617e17408371bb

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 120, e1e66a88615da98523ef887f1463fc42
0, 1, 1, 1, 120, 549842fa98c8faf572882d38b0aae390
0, 2, 2, 1, 120, 17ee85785517705fdc78c6122a4b2548
0, 3, 3, 1, 120, 1143391d419dac30a6c11f366157c974
0, 4, 4, 1, 120, b62d2a962c4c36809ef75a610106715c
0, 5, 5, 1, 120, e6f143ca33fbc0e776bb149950cdedff
0, 6, 6, 1, 120, 01716a1077ec66df00474fd4510d2789
0, 7, 7, 1, 120, 8cb5b6a865fa2cbb15f0d7736fda88a6
0, 8, 8, 1, 120, 0fb9fd883e895a540fe1704dddbbab04
0, 9, 9, 1, 120, 150a3b99aa24ef102c92f87c8adb4386

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 150, 083d638f2e147295d817bb14fff5e4f4
0, 1, 1, 1, 150, 6dbdc445b6fd6bb99f2025cc2a40977e
0, 2, 2, 1, 150, 41714089383b181d64fbfa7de5904608
0, 3, 3, 1, 150, 11fdb8465e1599f7a9227706646d2cba
0, 4, 4, 1, 150, 907876b3342a10040db0851a936af4e3
0, 5, 5, 1, 150, e7b18d47d06b25de205d873d3d941640
0, 6, 6, 1, 150, 523ce7413c8da7f6a657a9b661f36c44
0, 7, 7, 1, 150, 23caff863af875c66c903662a3e1e6a1
0, 8, 8, 1, 150, ed4cc5557203e5b7a119112ee9ceb00b
0, 9, 9, 1, 150, 4bb78a996be3188888d1c60e11a08e1b

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 240, fab07d6209d2413e0a434e1aaaa12154
0, 1, 1, 1, 240, f9ffffdb96f98527ba2e553d1265edbb
0, 2, 2, 1, 240, 56a992264cf7da2b23dd97435e9d0365
0, 3, 3, 1, 240, b1db980423d8004bd45a789b02b92a65
0, 4, 4, 1, 240, b29496aedc7026566367b634f55ebb28
0, 5, 5, 1, 240, 2bc9def672da4a2fc17cbd669e2b8081
0, 6, 6, 1, 240, 8c54721514cdf577a52a8668b9135f13
0, 7, 7, 1, 240, 2efab81d5e039d82b3bc7b0303b022c4
0, 8, 8, 1, 240, bd0f42b91b5d126fd0baec765b1096ad
0, 9, 9, 1, 240, c6bfea2735a629167bc6a7a7c76eb7f3

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 270, 0e9182e214aae732d94d007e5fe44888
0, 1, 1, 1, 270, 2630e2674b5611d68218fddac08815e2
0, 2, 2, 1, 270, d5cdd7d6a3de17939f60bb60ef6877da
0, 3, 3, 1, 270, 29d1961096061029e78963fa82581eca
0, 4, 4, 1, 270, 5c2629f8aa59757f6b4aafa9f6cbcba1
0, 5, 5, 1, 270, 1f1a8b61e4fbd6222ddf42e9d0a07032
0, 6, 6, 1, 270, cfb9771190ac2d0129907102d6abb63f
0, 7, 7, 1, 270, cd98dd856ba573a26a943cbe53221f26
0, 8, 8, 1, 270, ca13c161f067c4a4ce22bd58a2aca55b
0, 9, 9, 1, 270, de4bd1a474a76a35b796a5fc45b4f893

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 480, 622e6407a051ea08706394d03330ffbf
0, 1, 1, 1, 480, 1841a0daf7c3ef7be94e01fdb1d3968a
0, 2, 2, 1, 480, 37790e6cb2415f7add0ac5d3ab354755
0, 3, 3, 1, 480, 91485880e17c292096a7335566d3648f
0, 4, 4, 1, 480, eb6f74983d5fd13d6bd90afbce8836e1
0, 5, 5, 1, 480, 0069ab5ff7f0d4d601f7d0f9b7a08338
0, 6, 6, 1, 480, dbf04254765f7497070387e8c34895c6
0, 7, 7, 1, 480, 410a9b2d9855b2c29618070994adae96
0, 8, 8, 1, 480, 7e7f34effd90209f29f1b9ae01488b3b
0, 9, 9, 1, 480, 471530f74082c01c9b0f1fcf3d240d77

View File

@ -0,0 +1,11 @@
#tb 0: 1001/30000
0, 0, 0, 1, 510, bfeeaf51f972fd0dfe9ee757083cbb54
0, 1, 1, 1, 510, 10cd4ed6d762004846412d9cd0caa407
0, 2, 2, 1, 510, 04cca4008d656ed180de88dd2ddb4f21
0, 3, 3, 1, 510, ec777e377836895748c06849fa35ed2d
0, 4, 4, 1, 510, b55633d0f9239dff3e45a4abce4a35a7
0, 5, 5, 1, 510, 063c3ab4b4c599942c3a8a5b7bfe5029
0, 6, 6, 1, 510, 07b920169d32b5fc51d5b9ae16fef5bf
0, 7, 7, 1, 510, 8d49e727db9d3072b5ab7bab2133d9be
0, 8, 8, 1, 510, 17441437203447e946a57d2f96966332
0, 9, 9, 1, 510, 5d3f14af0e5cd81d0c7d2059f13efa5a

Some files were not shown because too many files have changed in this diff Show More