627 |
|
|
628 |
int frames = 0, credits_frames = 0, i_frames = 0; |
int frames = 0, credits_frames = 0, i_frames = 0; |
629 |
__int64 total = 0, i_total = 0, i_boost_total = 0, start = 0, end = 0, start_curved = 0, end_curved = 0; |
__int64 total = 0, i_total = 0, i_boost_total = 0, start = 0, end = 0, start_curved = 0, end_curved = 0; |
630 |
__int64 desired = codec->config.desired_size * 1024; |
__int64 desired = (__int64)codec->config.desired_size * 1024; |
631 |
|
|
632 |
double total1 = 0.0; |
double total1 = 0.0; |
633 |
double total2 = 0.0; |
double total2 = 0.0; |
747 |
++frames; |
++frames; |
748 |
} |
} |
749 |
|
|
750 |
twopass->movie_curve = ((float)(total + i_boost_total) / total); |
twopass->movie_curve = ((double)(total + i_boost_total) / total); |
751 |
twopass->average_frame = ((double)(total - i_total) / (frames - credits_frames - i_frames) / twopass->movie_curve); |
twopass->average_frame = ((double)(total - i_total) / (frames - credits_frames - i_frames) / twopass->movie_curve); |
752 |
|
|
753 |
SetFilePointer(twopass->stats1, sizeof(DWORD), 0, FILE_BEGIN); |
SetFilePointer(twopass->stats1, sizeof(DWORD), 0, FILE_BEGIN); |
764 |
twopass->alt_curve_high_diff = twopass->alt_curve_high - twopass->average_frame; |
twopass->alt_curve_high_diff = twopass->alt_curve_high - twopass->average_frame; |
765 |
if (codec->config.alt_curve_use_auto) |
if (codec->config.alt_curve_use_auto) |
766 |
{ |
{ |
767 |
if (twopass->movie_curve > 1.0f) |
if (twopass->movie_curve > 1.0) |
768 |
{ |
{ |
769 |
codec->config.alt_curve_min_rel_qual = (int)(100.0 - (100.0 - 100.0 / twopass->movie_curve) * (double)codec->config.alt_curve_auto_str / 100.0); |
codec->config.alt_curve_min_rel_qual = (int)(100.0 - (100.0 - 100.0 / twopass->movie_curve) * (double)codec->config.alt_curve_auto_str / 100.0); |
770 |
if (codec->config.alt_curve_min_rel_qual < 20) |
if (codec->config.alt_curve_min_rel_qual < 20) |
960 |
|
|
961 |
// credits curve = (total / desired_size) * (100 / credits_rate) |
// credits curve = (total / desired_size) * (100 / credits_rate) |
962 |
twopass->credits_start_curve = twopass->credits_end_curve = |
twopass->credits_start_curve = twopass->credits_end_curve = |
963 |
((float)total / desired) * ((float)100 / codec->config.credits_rate); |
((double)total / desired) * ((double)100 / codec->config.credits_rate); |
964 |
|
|
965 |
start_curved = (__int64)(start / twopass->credits_start_curve); |
start_curved = (__int64)(start / twopass->credits_start_curve); |
966 |
end_curved = (__int64)(end / twopass->credits_end_curve); |
end_curved = (__int64)(end / twopass->credits_end_curve); |
967 |
|
|
968 |
// movie curve = (total - credits) / (desired_size - curved credits) |
// movie curve = (total - credits) / (desired_size - curved credits) |
969 |
twopass->movie_curve = (float) |
twopass->movie_curve = (double) |
970 |
(total - start - end) / |
(total - start - end) / |
971 |
(desired - start_curved - end_curved); |
(desired - start_curved - end_curved); |
972 |
|
|
975 |
case CREDITS_MODE_QUANT : |
case CREDITS_MODE_QUANT : |
976 |
|
|
977 |
// movie curve = (total - credits) / (desired_size - credits) |
// movie curve = (total - credits) / (desired_size - credits) |
978 |
twopass->movie_curve = (float) |
twopass->movie_curve = (double) |
979 |
(total - start - end) / (desired - start - end); |
(total - start - end) / (desired - start - end); |
980 |
|
|
981 |
// aid the average asymmetric frame calculation below |
// aid the average asymmetric frame calculation below |
987 |
case CREDITS_MODE_SIZE : |
case CREDITS_MODE_SIZE : |
988 |
|
|
989 |
// start curve = (start / start desired size) |
// start curve = (start / start desired size) |
990 |
twopass->credits_start_curve = (float) |
twopass->credits_start_curve = (double) |
991 |
(start / 1024) / codec->config.credits_start_size; |
(start / 1024) / codec->config.credits_start_size; |
992 |
|
|
993 |
// end curve = (end / end desired size) |
// end curve = (end / end desired size) |
994 |
twopass->credits_end_curve = (float) |
twopass->credits_end_curve = (double) |
995 |
(end / 1024) / codec->config.credits_end_size; |
(end / 1024) / codec->config.credits_end_size; |
996 |
|
|
997 |
start_curved = (__int64)(start / twopass->credits_start_curve); |
start_curved = (__int64)(start / twopass->credits_start_curve); |
998 |
end_curved = (__int64)(end / twopass->credits_end_curve); |
end_curved = (__int64)(end / twopass->credits_end_curve); |
999 |
|
|
1000 |
// movie curve = (total - credits) / (desired_size - curved credits) |
// movie curve = (total - credits) / (desired_size - curved credits) |
1001 |
twopass->movie_curve = (float) |
twopass->movie_curve = (double) |
1002 |
(total - start - end) / |
(total - start - end) / |
1003 |
(desired - start_curved - end_curved); |
(desired - start_curved - end_curved); |
1004 |
|
|
1024 |
twopass->alt_curve_high_diff = twopass->alt_curve_high - twopass->average_frame; |
twopass->alt_curve_high_diff = twopass->alt_curve_high - twopass->average_frame; |
1025 |
if (codec->config.alt_curve_use_auto) |
if (codec->config.alt_curve_use_auto) |
1026 |
{ |
{ |
1027 |
if (twopass->movie_curve > 1.0f) |
if (twopass->movie_curve > 1.0) |
1028 |
{ |
{ |
1029 |
codec->config.alt_curve_min_rel_qual = (int)(100.0 - (100.0 - 100.0 / twopass->movie_curve) * (double)codec->config.alt_curve_auto_str / 100.0); |
codec->config.alt_curve_min_rel_qual = (int)(100.0 - (100.0 - 100.0 / twopass->movie_curve) * (double)codec->config.alt_curve_auto_str / 100.0); |
1030 |
if (codec->config.alt_curve_min_rel_qual < 20) |
if (codec->config.alt_curve_min_rel_qual < 20) |