187 static const uint8_t
weight[64]={
198 static const uint8_t brane[256]={
199 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
200 0x04,0x05,0xcc,0xcc,0xcc,0xcc,0xcc,0x41,0x15,0x16,0xcc,0xcc,0xcc,0xcc,0xcc,0x52,
201 0x04,0xcc,0x05,0xcc,0xcc,0xcc,0x41,0xcc,0x15,0xcc,0x16,0xcc,0xcc,0xcc,0x52,0xcc,
202 0x04,0xcc,0xcc,0x05,0xcc,0x41,0xcc,0xcc,0x15,0xcc,0xcc,0x16,0xcc,0x52,0xcc,0xcc,
203 0x04,0xcc,0xcc,0xcc,0x41,0xcc,0xcc,0xcc,0x15,0xcc,0xcc,0xcc,0x16,0xcc,0xcc,0xcc,
204 0x04,0xcc,0xcc,0x41,0xcc,0x05,0xcc,0xcc,0x15,0xcc,0xcc,0x52,0xcc,0x16,0xcc,0xcc,
205 0x04,0xcc,0x41,0xcc,0xcc,0xcc,0x05,0xcc,0x15,0xcc,0x52,0xcc,0xcc,0xcc,0x16,0xcc,
206 0x04,0x41,0xcc,0xcc,0xcc,0xcc,0xcc,0x05,0x15,0x52,0xcc,0xcc,0xcc,0xcc,0xcc,0x16,
207 0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
208 0x48,0x49,0xcc,0xcc,0xcc,0xcc,0xcc,0x85,0x59,0x5A,0xcc,0xcc,0xcc,0xcc,0xcc,0x96,
209 0x48,0xcc,0x49,0xcc,0xcc,0xcc,0x85,0xcc,0x59,0xcc,0x5A,0xcc,0xcc,0xcc,0x96,0xcc,
210 0x48,0xcc,0xcc,0x49,0xcc,0x85,0xcc,0xcc,0x59,0xcc,0xcc,0x5A,0xcc,0x96,0xcc,0xcc,
211 0x48,0xcc,0xcc,0xcc,0x49,0xcc,0xcc,0xcc,0x59,0xcc,0xcc,0xcc,0x96,0xcc,0xcc,0xcc,
212 0x48,0xcc,0xcc,0x85,0xcc,0x49,0xcc,0xcc,0x59,0xcc,0xcc,0x96,0xcc,0x5A,0xcc,0xcc,
213 0x48,0xcc,0x85,0xcc,0xcc,0xcc,0x49,0xcc,0x59,0xcc,0x96,0xcc,0xcc,0xcc,0x5A,0xcc,
214 0x48,0x85,0xcc,0xcc,0xcc,0xcc,0xcc,0x49,0x59,0x96,0xcc,0xcc,0xcc,0xcc,0xcc,0x5A,
217 static const uint8_t needs[16]={
227 int16_t *tmpI= tmpIt;
228 uint8_t *tmp2= tmp2t[0];
229 const uint8_t *hpel[11];
231 r= brane[dx + 16*dy]&15;
232 l= brane[dx + 16*dy]>>4;
234 b= needs[l] | needs[
r];
240 for(x=0; x < b_w; x++){
250 if(!p || p->fast_mc){
251 am= 20*(
a2+
a3) - 5*(
a1+a4) + (
a0+a5);
255 am= p->hcoeff[0]*(
a2+
a3) + p->hcoeff[1]*(
a1+a4) + p->hcoeff[2]*(
a0+a5) + p->hcoeff[3]*(a_1+a6);
260 if(am&(~255)) am= ~(am>>31);
273 for(y=0; y < b_h; y++){
274 for(x=0; x < b_w+1; x++){
285 am= (20*(
a2+
a3) - 5*(
a1+a4) + (
a0+a5) + 16)>>5;
287 am= (p->hcoeff[0]*(
a2+
a3) + p->hcoeff[1]*(
a1+a4) + p->hcoeff[2]*(
a0+a5) + p->hcoeff[3]*(a_1+a6) + 32)>>6;
289 if(am&(~255)) am= ~(am>>31);
301 for(y=0; y < b_h; y++){
302 for(x=0; x < b_w; x++){
313 am= (20*(
a2+
a3) - 5*(
a1+a4) + (
a0+a5) + 512)>>10;
315 am= (p->hcoeff[0]*(
a2+
a3) + p->hcoeff[1]*(
a1+a4) + p->hcoeff[2]*(
a0+a5) + p->hcoeff[3]*(a_1+a6) + 2048)>>12;
316 if(am&(~255)) am= ~(am>>31);
330 hpel[ 6]= tmp2t[1] + 1;
333 hpel[ 9]= hpel[1] + 64;
334 hpel[10]= hpel[8] + 1;
336#define MC_STRIDE(x) (needs[x] ? 64 : stride)
339 int dxy = dx / 8 + dy / 8 * 4;
340 const uint8_t *
src1 = hpel[dxy ];
341 const uint8_t *
src2 = hpel[dxy + 1];
342 const uint8_t *src3 = hpel[dxy + 4];
343 const uint8_t *src4 = hpel[dxy + 5];
350 for(y=0; y < b_h; y++){
351 for(x=0; x < b_w; x++){
352 dst[x]= ((8-dx)*(8-dy)*
src1[x] + dx*(8-dy)*
src2[x]+
353 (8-dx)* dy *src3[x] + dx* dy *src4[x]+32)>>6;
362 const uint8_t *
src1= hpel[l];
363 const uint8_t *
src2= hpel[
r];
366 int a=
weight[((dx&7) + (8*(dy&7)))];
368 for(y=0; y < b_h; y++){
369 for(x=0; x < b_w; x++){