| 921 | } |
| 922 | |
| 923 | static void mc_block(Plane *p, uint8_t *dst, const uint8_t *src, uint8_t *tmp, int stride, int b_w, int b_h, int dx, int dy){ |
| 924 | static const uint8_t weight[64]={ |
| 925 | 8,7,6,5,4,3,2,1, |
| 926 | 7,7,0,0,0,0,0,1, |
| 927 | 6,0,6,0,0,0,2,0, |
| 928 | 5,0,0,5,0,3,0,0, |
| 929 | 4,0,0,0,4,0,0,0, |
| 930 | 3,0,0,5,0,3,0,0, |
| 931 | 2,0,6,0,0,0,2,0, |
| 932 | 1,7,0,0,0,0,0,1, |
| 933 | }; |
| 934 | |
| 935 | static const uint8_t brane[256]={ |
| 936 | 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12, |
| 937 | 0x04,0x05,0xcc,0xcc,0xcc,0xcc,0xcc,0x41,0x15,0x16,0xcc,0xcc,0xcc,0xcc,0xcc,0x52, |
| 938 | 0x04,0xcc,0x05,0xcc,0xcc,0xcc,0x41,0xcc,0x15,0xcc,0x16,0xcc,0xcc,0xcc,0x52,0xcc, |
| 939 | 0x04,0xcc,0xcc,0x05,0xcc,0x41,0xcc,0xcc,0x15,0xcc,0xcc,0x16,0xcc,0x52,0xcc,0xcc, |
| 940 | 0x04,0xcc,0xcc,0xcc,0x41,0xcc,0xcc,0xcc,0x15,0xcc,0xcc,0xcc,0x16,0xcc,0xcc,0xcc, |
| 941 | 0x04,0xcc,0xcc,0x41,0xcc,0x05,0xcc,0xcc,0x15,0xcc,0xcc,0x52,0xcc,0x16,0xcc,0xcc, |
| 942 | 0x04,0xcc,0x41,0xcc,0xcc,0xcc,0x05,0xcc,0x15,0xcc,0x52,0xcc,0xcc,0xcc,0x16,0xcc, |
| 943 | 0x04,0x41,0xcc,0xcc,0xcc,0xcc,0xcc,0x05,0x15,0x52,0xcc,0xcc,0xcc,0xcc,0xcc,0x16, |
| 944 | 0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x56, |
| 945 | 0x48,0x49,0xcc,0xcc,0xcc,0xcc,0xcc,0x85,0x59,0x5A,0xcc,0xcc,0xcc,0xcc,0xcc,0x96, |
| 946 | 0x48,0xcc,0x49,0xcc,0xcc,0xcc,0x85,0xcc,0x59,0xcc,0x5A,0xcc,0xcc,0xcc,0x96,0xcc, |
| 947 | 0x48,0xcc,0xcc,0x49,0xcc,0x85,0xcc,0xcc,0x59,0xcc,0xcc,0x5A,0xcc,0x96,0xcc,0xcc, |
| 948 | 0x48,0xcc,0xcc,0xcc,0x49,0xcc,0xcc,0xcc,0x59,0xcc,0xcc,0xcc,0x96,0xcc,0xcc,0xcc, |
| 949 | 0x48,0xcc,0xcc,0x85,0xcc,0x49,0xcc,0xcc,0x59,0xcc,0xcc,0x96,0xcc,0x5A,0xcc,0xcc, |
| 950 | 0x48,0xcc,0x85,0xcc,0xcc,0xcc,0x49,0xcc,0x59,0xcc,0x96,0xcc,0xcc,0xcc,0x5A,0xcc, |
| 951 | 0x48,0x85,0xcc,0xcc,0xcc,0xcc,0xcc,0x49,0x59,0x96,0xcc,0xcc,0xcc,0xcc,0xcc,0x5A, |
| 952 | }; |
| 953 | |
| 954 | static const uint8_t needs[16]={ |
| 955 | 0,1,0,0, |
| 956 | 2,4,2,0, |
| 957 | 0,1,0,0, |
| 958 | 15 |
| 959 | }; |
| 960 | |
| 961 | int x, y, b, r, l; |
| 962 | int16_t tmpIt [64*(32+HTAPS_MAX)]; |
| 963 | uint8_t tmp2t[3][stride*(32+HTAPS_MAX)]; |
| 964 | int16_t *tmpI= tmpIt; |
| 965 | uint8_t *tmp2= tmp2t[0]; |
| 966 | const uint8_t *hpel[11]; |
| 967 | assert(dx<16 && dy<16); |
| 968 | r= brane[dx + 16*dy]&15; |
| 969 | l= brane[dx + 16*dy]>>4; |
| 970 | |
| 971 | b= needs[l] | needs[r]; |
| 972 | if(p && !p->diag_mc) |
| 973 | b= 15; |
| 974 | |
| 975 | if(b&5){ |
| 976 | for(y=0; y < b_h+HTAPS_MAX-1; y++){ |
| 977 | for(x=0; x < b_w; x++){ |
| 978 | int a_1=src[x + HTAPS_MAX/2-4]; |
| 979 | int a0= src[x + HTAPS_MAX/2-3]; |
| 980 | int a1= src[x + HTAPS_MAX/2-2]; |