42 |
|
|
43 |
#include <pthread.h> |
#include <pthread.h> |
44 |
#include <signal.h> |
#include <signal.h> |
45 |
|
|
46 |
|
#ifndef WIN32 |
47 |
#include <unistd.h> |
#include <unistd.h> |
48 |
|
#endif |
49 |
|
|
50 |
#include "../encoder.h" |
#include "../encoder.h" |
51 |
#include "../utils/mbfunctions.h" |
#include "../utils/mbfunctions.h" |
81 |
|
|
82 |
case MODE_INTER: |
case MODE_INTER: |
83 |
case MODE_INTER_Q: |
case MODE_INTER_Q: |
84 |
pmv = get_pmv(pMBs, x, y, iWcount, 0); |
pmv = get_pmv2(pMBs, iWcount, 0, x, y, 0); |
85 |
pMB->pmvs[0].x = pMB->mvs[0].x - pmv.x; |
pMB->pmvs[0].x = pMB->mvs[0].x - pmv.x; |
86 |
pMB->pmvs[0].y = pMB->mvs[0].y - pmv.y; |
pMB->pmvs[0].y = pMB->mvs[0].y - pmv.y; |
87 |
break; |
break; |
88 |
|
|
89 |
case MODE_INTER4V: |
case MODE_INTER4V: |
90 |
for (k=0;k<4;k++) { |
for (k=0;k<4;k++) { |
91 |
pmv = get_pmv(pMBs, x, y, iWcount, k); |
pmv = get_pmv2(pMBs, iWcount, 0, x, y, k); |
92 |
pMB->pmvs[k].x = pMB->mvs[k].x - pmv.x; |
pMB->pmvs[k].x = pMB->mvs[k].x - pmv.x; |
93 |
pMB->pmvs[k].y = pMB->mvs[k].y - pmv.y; |
pMB->pmvs[k].y = pMB->mvs[k].y - pmv.y; |
94 |
} |
} |
164 |
pCurrent = ¤t->image; |
pCurrent = ¤t->image; |
165 |
pRef = &reference->image; |
pRef = &reference->image; |
166 |
|
|
167 |
// time = read_tsc(); |
// time = read_counter(); |
168 |
|
|
169 |
for (y = miny; y < maxy; y++) { |
for (y = miny; y < maxy; y++) { |
170 |
for (x = minx; x < maxx; x++) { |
for (x = minx; x < maxx; x++) { |
262 |
} |
} |
263 |
} /* end of x/y loop */ |
} /* end of x/y loop */ |
264 |
|
|
265 |
// fprintf(stderr,"[%d,%d] Full ME %lld ticks \n",arg->id,run,read_tsc()-time); |
// fprintf(stderr,"[%d,%d] Full ME %lld ticks \n",arg->id,run,read_counter()-time); |
266 |
|
|
267 |
pthread_mutex_lock(&me_mutex); |
pthread_mutex_lock(&me_mutex); |
268 |
|
|
282 |
|
|
283 |
// fprintf(stderr,"[%d,%d] wait corrqueue %d done\n",arg->id,run,me_corrqueue); |
// fprintf(stderr,"[%d,%d] wait corrqueue %d done\n",arg->id,run,me_corrqueue); |
284 |
|
|
285 |
// time = read_tsc(); |
// time = read_counter(); |
286 |
|
|
287 |
// if (me_iIntra <= iLimit) |
// if (me_iIntra <= iLimit) |
288 |
// { |
// { |
306 |
// pthread_mutex_lock(&me_mutex); |
// pthread_mutex_lock(&me_mutex); |
307 |
// } |
// } |
308 |
|
|
309 |
// fprintf(stderr,"[%d,%d] Full CORR %lld ticks \n",arg->id,run,read_tsc()-time); |
// fprintf(stderr,"[%d,%d] Full CORR %lld ticks \n",arg->id,run,read_counter()-time); |
310 |
|
|
311 |
me_outqueue--; |
me_outqueue--; |
312 |
|
|
356 |
|
|
357 |
pthread_mutex_lock(&me_mutex); |
pthread_mutex_lock(&me_mutex); |
358 |
me_iIntra=0; |
me_iIntra=0; |
359 |
me_inqueue=NUMTHREADS; |
me_inqueue=pParam->num_threads; |
360 |
me_corrqueue=NUMTHREADS; |
me_corrqueue=pParam->num_threads; |
361 |
me_outqueue=NUMTHREADS; |
me_outqueue=pParam->num_threads; |
362 |
|
|
363 |
if (!threadscreated) |
if (!threadscreated) |
364 |
{ |
{ |
365 |
for (i=0;i<NUMTHREADS;i++) { /* split domain into NUMTHREADS parts */ |
for (i=0;i<pParam->num_threads;i++) { /* split domain into NUMTHREADS parts */ |
366 |
|
|
367 |
jdata[i].id = i; |
jdata[i].id = i; |
368 |
jdata[i].minx = i*iWcount/NUMTHREADS; |
jdata[i].minx = i*iWcount/pParam->num_threads; |
369 |
jdata[i].maxx = (i+1)*iWcount/NUMTHREADS; |
jdata[i].maxx = (i+1)*iWcount/pParam->num_threads; |
370 |
jdata[i].miny = 0; |
jdata[i].miny = 0; |
371 |
jdata[i].maxy = iHcount; |
jdata[i].maxy = iHcount; |
372 |
jdata[i].gdata = &gdata; |
jdata[i].gdata = &gdata; |