[svn] / trunk / xvidcore / src / motion / motion_comp.c Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/motion/motion_comp.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 232, Fri Jun 21 16:12:48 2002 UTC revision 341, Thu Jul 25 00:43:19 2002 UTC
# Line 197  Line 197 
197          const int32_t edged_width = pParam->edged_width;          const int32_t edged_width = pParam->edged_width;
198          int32_t dx, dy;          int32_t dx, dy;
199          int32_t b_dx, b_dy;          int32_t b_dx, b_dy;
200            int k,sum;
201          int x = i;          int x = i;
202          int y = j;          int y = j;
203    
204    
   
205          switch (mb->mode) {          switch (mb->mode) {
206          case MODE_FORWARD:          case MODE_FORWARD:
207                  dx = mb->mvs[0].x;                  dx = mb->mvs[0].x;
# Line 287  Line 287 
287                  break;                  break;
288    
289    
290          case MODE_INTERPOLATE:          case MODE_INTERPOLATE:          /* _could_ use DIRECT, but would be overkill (no 4MV there) */
291    
292                  dx = mb->mvs[0].x;                  dx = mb->mvs[0].x;
293                  dy = mb->mvs[0].y;                  dy = mb->mvs[0].y;
294    
295                  b_dx = mb->b_mvs[0].x;                  b_dx = mb->b_mvs[0].x;
296                  b_dy = mb->b_mvs[0].y;                  b_dy = mb->b_mvs[0].y;
297    
298                  transfer_8to16sub2_c(&dct_codes[0 * 64],                  for (k=0;k<4;k++)
299                                                           cur->y + (i * 16) + (j * 16) * edged_width,                  {
300                                                           get_ref(f_ref->y, f_refh->y, f_refv->y,                          transfer_8to16sub2_c(&dct_codes[k * 64],
301                                                                           f_refhv->y, 16 * i, 16 * j, 1, dx, dy,                                                           cur->y + (i * 16+(k&1)*8) + (j * 16+((k>>1)*8)) * edged_width,
                                                                          edged_width), get_ref(b_ref->y, b_refh->y,  
                                                                                                                    b_refv->y,  
                                                                                                                    b_refhv->y, 16 * i,  
                                                                                                                    16 * j, 1, b_dx,  
                                                                                                                    b_dy, edged_width),  
                                                          edged_width);  
   
                 transfer_8to16sub2_c(&dct_codes[1 * 64],  
                                                          cur->y + (i * 16 + 8) + (j * 16) * edged_width,  
302                                                           get_ref(f_ref->y, f_refh->y, f_refv->y,                                                           get_ref(f_ref->y, f_refh->y, f_refv->y,
303                                                                           f_refhv->y, 16 * i + 8, 16 * j, 1, dx, dy,                                                                           f_refhv->y, 2*i + (k&1), 2*j + (k>>1), 8, dx, dy,
                                                                          edged_width), get_ref(b_ref->y, b_refh->y,  
                                                                                                                    b_refv->y,  
                                                                                                                    b_refhv->y,  
                                                                                                                    16 * i + 8, 16 * j,  
                                                                                                                    1, b_dx, b_dy,  
304                                                                                                                     edged_width),                                                                                                                     edged_width),
305                                                           edged_width);                                                           get_ref(b_ref->y, b_refh->y, b_refv->y,
306                                                                             b_refhv->y, 2*i + (k&1), 2 * j+(k>>1), 8, b_dx, b_dy,
                 transfer_8to16sub2_c(&dct_codes[2 * 64],  
                                                          cur->y + (i * 16) + (j * 16 + 8) * edged_width,  
                                                          get_ref(f_ref->y, f_refh->y, f_refv->y,  
                                                                          f_refhv->y, 16 * i, 16 * j + 8, 1, dx, dy,  
                                                                          edged_width), get_ref(b_ref->y, b_refh->y,  
                                                                                                                    b_refv->y,  
                                                                                                                    b_refhv->y, 16 * i,  
                                                                                                                    16 * j + 8, 1, b_dx,  
                                                                                                                    b_dy, edged_width),  
                                                          edged_width);  
   
                 transfer_8to16sub2_c(&dct_codes[3 * 64],  
                                                          cur->y + (i * 16 + 8) + (j * 16 +  
                                                                                                           8) * edged_width,  
                                                          get_ref(f_ref->y, f_refh->y, f_refv->y,  
                                                                          f_refhv->y, 16 * i + 8, 16 * j + 8, 1, dx,  
                                                                          dy, edged_width), get_ref(b_ref->y,  
                                                                                                                            b_refh->y,  
                                                                                                                            b_refv->y,  
                                                                                                                            b_refhv->y,  
                                                                                                                            16 * i + 8,  
                                                                                                                            16 * j + 8, 1,  
                                                                                                                            b_dx, b_dy,  
307                                                                                                                             edged_width),                                                                                                                             edged_width),
308                                                           edged_width);                                                           edged_width);
309                    }
310    
311                  dx = (dx & 3) ? (dx >> 1) | 1 : dx / 2;                  dx = (dx & 3) ? (dx >> 1) | 1 : dx / 2;
312                  dy = (dy & 3) ? (dy >> 1) | 1 : dy / 2;                  dy = (dy & 3) ? (dy >> 1) | 1 : dy / 2;
# Line 352  Line 317 
317                  transfer_8to16sub2_c(&dct_codes[4 * 64],                  transfer_8to16sub2_c(&dct_codes[4 * 64],
318                                                           cur->u + (y * 8) * edged_width / 2 + (x * 8),                                                           cur->u + (y * 8) * edged_width / 2 + (x * 8),
319                                                           get_ref(f_ref->u, f_refh->u, f_refv->u,                                                           get_ref(f_ref->u, f_refh->u, f_refv->u,
320                                                                           f_refhv->u, 8 * i, 8 * j, 1, dx, dy,                                                                           f_refhv->u, i, j, 8, dx, dy,
321                                                                           edged_width / 2), get_ref(b_ref->u,                                                                           edged_width / 2),
322                                                                                                                             b_refh->u,                                                           get_ref(b_ref->u, b_refh->u, b_refv->u,
323                                                                                                                             b_refv->u,                                                                           b_refhv->u, i, j, 8, b_dx, b_dy,
324                                                                                                                             b_refhv->u,                                                                           edged_width / 2),
                                                                                                                            8 * i, 8 * j, 1,  
                                                                                                                            b_dx, b_dy,  
                                                                                                                            edged_width /  
                                                                                                                            2),  
325                                                           edged_width / 2);                                                           edged_width / 2);
326    
327                  transfer_8to16sub2_c(&dct_codes[5 * 64],                  transfer_8to16sub2_c(&dct_codes[5 * 64],
328                                                           cur->v + (y * 8) * edged_width / 2 + (x * 8),                                                           cur->v + (y * 8) * edged_width / 2 + (x * 8),
329                                                           get_ref(f_ref->v, f_refh->v, f_refv->v,                                                           get_ref(f_ref->v, f_refh->v, f_refv->v,
330                                                                           f_refhv->v, 8 * i, 8 * j, 1, dx, dy,                                                                           f_refhv->v, 8 * i, 8 * j, 1, dx, dy,
331                                                                           edged_width / 2), get_ref(b_ref->v,                                                                           edged_width / 2),
332                                                                                                                             b_refh->v,                                                           get_ref(b_ref->v, b_refh->v, b_refv->v,
333                                                                                                                             b_refv->v,                                                                           b_refhv->v, 8 * i, 8 * j, 1, b_dx, b_dy,
334                                                                                                                             b_refhv->v,                                                                           edged_width / 2),
                                                                                                                            8 * i, 8 * j, 1,  
                                                                                                                            b_dx, b_dy,  
                                                                                                                            edged_width /  
                                                                                                                            2),  
335                                                           edged_width / 2);                                                           edged_width / 2);
336    
337                  break;                  break;
338    
339          case MODE_DIRECT:          case MODE_DIRECT:
340                  // todo  
341                  break;                  for (k=0;k<4;k++)
342                    {
343                            dx = mb->mvs[k].x;
344                            dy = mb->mvs[k].y;
345    
346                            b_dx = mb->b_mvs[k].x;
347                            b_dy = mb->b_mvs[k].y;
348    
349    //              fprintf(stderr,"Direct Vector %d -- %d:%d    %d:%d\n",k,dx,dy,b_dx,b_dy);
350    
351                            transfer_8to16sub2_c(&dct_codes[k * 64],
352                                                             cur->y + (i*16 + (k&1)*8) + (j*16 + (k>>1)*8 ) * edged_width,
353                                                             get_ref(f_ref->y, f_refh->y, f_refv->y, f_refhv->y,
354                                                                             2*i + (k&1), 2*j + (k>>1), 8, dx, dy,
355                                                                             edged_width),
356                                                             get_ref(b_ref->y, b_refh->y, b_refv->y, b_refhv->y,
357                                                                             2*i + (k&1), 2*j + (k>>1), 8, b_dx, b_dy,
358                                                                             edged_width),
359                                                             edged_width);
360          }          }
361    
362                    sum = mb->mvs[0].x + mb->mvs[1].x + mb->mvs[2].x + mb->mvs[3].x;
363                    dx = (sum == 0 ? 0 : SIGN(sum) * (roundtab[ABS(sum) % 16] + (ABS(sum) / 16) * 2));
364    
365                    sum = mb->mvs[0].y + mb->mvs[1].y + mb->mvs[2].y + mb->mvs[3].y;
366                    dy = (sum == 0 ? 0 : SIGN(sum) * (roundtab[ABS(sum) % 16] + (ABS(sum) / 16) * 2));
367    
368    
369                    sum = mb->b_mvs[0].x + mb->b_mvs[1].x + mb->b_mvs[2].x + mb->b_mvs[3].x;
370                    b_dx = (sum == 0 ? 0 : SIGN(sum) * (roundtab[ABS(sum) % 16] + (ABS(sum) / 16) * 2));
371    
372                    sum = mb->b_mvs[0].y + mb->b_mvs[1].y + mb->b_mvs[2].y + mb->b_mvs[3].y;
373                    b_dy = (sum == 0 ? 0 : SIGN(sum) * (roundtab[ABS(sum) % 16] + (ABS(sum) / 16) * 2));
374    
375    /*              // for QPel don't forget to always do
376    
377                    if (quarterpel)
378                            sum /= 2;
379    */
380    
381                    transfer_8to16sub2_c(&dct_codes[4 * 64],
382                                                             cur->u + (y * 8) * edged_width / 2 + (x * 8),
383                                                             get_ref(f_ref->u, f_refh->u, f_refv->u,
384                                                                             f_refhv->u, i, j, 8, dx, dy,
385                                                                             edged_width / 2),
386                                                             get_ref(b_ref->u, b_refh->u, b_refv->u,
387                                                                             b_refhv->u, i, j, 8, b_dx, b_dy,
388                                                                             edged_width / 2),
389                                                             edged_width / 2);
390    
391                    transfer_8to16sub2_c(&dct_codes[5 * 64],
392                                                             cur->v + (y * 8) * edged_width / 2 + (x * 8),
393                                                             get_ref(f_ref->v, f_refh->v, f_refv->v,
394                                                                             f_refhv->v, i, j, 8, dx, dy,
395                                                                             edged_width / 2),
396                                                             get_ref(b_ref->v, b_refh->v, b_refv->v,
397                                                                             b_refhv->v, i, j, 8, b_dx, b_dy,
398                                                                             edged_width / 2),
399                                                             edged_width / 2);
400    
401    
402                    break;
403            }
404  }  }

Legend:
Removed from v.232  
changed lines
  Added in v.341

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4