19 |
* along with this program; if not, write to the Free Software |
* along with this program; if not, write to the Free Software |
20 |
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
21 |
* |
* |
22 |
* $Id: codec.c,v 1.30 2010-12-27 16:11:05 Isibaar Exp $ |
* $Id: codec.c,v 1.30.2.1 2010-12-30 22:07:43 Isibaar Exp $ |
23 |
* |
* |
24 |
*************************************************************************/ |
*************************************************************************/ |
25 |
|
|
437 |
if ((profiles[codec->config.profile].flags & PROFILE_RESYNCMARKER) && codec->config.num_slices != 1) { |
if ((profiles[codec->config.profile].flags & PROFILE_RESYNCMARKER) && codec->config.num_slices != 1) { |
438 |
|
|
439 |
if (codec->config.num_slices == 0) { /* auto */ |
if (codec->config.num_slices == 0) { /* auto */ |
440 |
int rows = (lpbiInput->bmiHeader.biHeight + 15) / 16; |
int mb_width = (lpbiInput->bmiHeader.biWidth + 15) / 16; |
441 |
int slices = (rows > 36) ? 4 : 1; /* use multiple slices only for HD resolutions */ |
int mb_height = (lpbiInput->bmiHeader.biHeight + 15) / 16; |
442 |
|
|
443 |
create.num_slices = (rows > 45) ? 8 : slices; |
int slices = (int)((mb_width*mb_height) / 811); /* use multiple slices only above SD resolutions for now */ |
444 |
|
|
445 |
if (create.num_slices > create.num_threads) |
if (slices > 1) { |
446 |
create.num_slices = create.num_threads; |
if (create.num_threads <= 1) |
447 |
|
slices &= ~1; /* make even */ |
448 |
|
else if (create.num_threads <= slices) |
449 |
|
slices = (slices / create.num_threads) * create.num_threads; /* multiple of threads */ |
450 |
|
else if (create.num_threads % slices) |
451 |
|
slices = (!(create.num_threads%2)) ? (create.num_threads/2) : (create.num_threads/3); |
452 |
|
} |
453 |
|
|
454 |
|
create.num_slices = slices; |
455 |
} |
} |
456 |
else { |
else { |
457 |
create.num_slices = codec->config.num_slices; /* force manual value - by registry edit */ |
create.num_slices = codec->config.num_slices; /* force manual value - by registry edit */ |