--- 2pass.c 2002/09/28 02:01:47 1.7.2.2 +++ 2pass.c 2002/09/12 21:18:49 1.8 @@ -41,13 +41,12 @@ DWORD version = -20; DWORD read, wrote; - int frames = 0, credits_frames = 0, i_frames = 0, recminpsize = 0, recminisize = 0; + int frames = 0, credits_frames = 0, i_frames = 0; __int64 total_ext = 0, total = 0, i_total = 0, i_boost_total = 0, start = 0, end = 0, start_curved = 0, end_curved = 0; __int64 desired = (__int64)codec->config.desired_size * 1024; double total1 = 0.0; double total2 = 0.0; - double dbytes, dbytes2; if (codec->config.hinted_me) { @@ -174,17 +173,6 @@ else ++credits_frames; - if (twopass->nns1.quant & NNSTATS_KEYFRAME) - { - if (!(twopass->nns1.kblk + twopass->nns1.mblk)) - recminisize = twopass->nns1.bytes; - } - else - { - if (!(twopass->nns1.kblk + twopass->nns1.mblk)) - recminpsize = twopass->nns1.bytes; - } - ++frames; } twopass->keyframe_locations[i_frames] = frames; @@ -264,20 +252,10 @@ } } - if (frames == 0) - { - twopass->minpsize = (twopass->nns1.kblk + 88) / 8; - twopass->minisize = ((twopass->nns1.kblk * 22) + 240) / 8; - if (recminpsize > twopass->minpsize) - twopass->minpsize = recminpsize; - if (recminisize > twopass->minisize) - twopass->minisize = recminisize; - } - if (!codec_is_in_credits(&codec->config, frames) && !(twopass->nns1.quant & NNSTATS_KEYFRAME)) { - dbytes = twopass->nns2.bytes / twopass->movie_curve; + double dbytes = twopass->nns2.bytes / twopass->movie_curve; total1 += dbytes; if (codec->config.use_alt_curve) @@ -285,21 +263,21 @@ if (dbytes > twopass->average_frame) { if (dbytes >= twopass->alt_curve_high) - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev); + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev); else { switch(codec->config.alt_curve_type) { case 2: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff))); break; case 1: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * (dbytes - twopass->average_frame) / twopass->alt_curve_high_diff); break; case 0: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff)))); } } @@ -307,21 +285,21 @@ else { if (dbytes <= twopass->alt_curve_low) - dbytes2 = dbytes; + total2 += dbytes; else { switch(codec->config.alt_curve_type) { case 2: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff))); break; case 1: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * (dbytes - twopass->average_frame) / twopass->alt_curve_low_diff); break; case 0: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual + twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual + twopass->alt_curve_qual_dev * (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff)))); } } @@ -331,20 +309,15 @@ { if (dbytes > twopass->average_frame) { - dbytes2 = ((double)dbytes + (twopass->average_frame - dbytes) * + total2 += ((double)dbytes + (twopass->average_frame - dbytes) * codec->config.curve_compression_high / 100.0); } else { - dbytes2 = ((double)dbytes + (twopass->average_frame - dbytes) * + total2 += ((double)dbytes + (twopass->average_frame - dbytes) * codec->config.curve_compression_low / 100.0); } } - - if (dbytes2 < twopass->minpsize) - dbytes2 = twopass->minpsize; - - total2 += dbytes2; } ++frames; @@ -406,17 +379,6 @@ total += twopass->nns1.bytes; - if (twopass->nns1.quant & NNSTATS_KEYFRAME) - { - if (!(twopass->nns1.kblk + twopass->nns1.mblk)) - recminisize = twopass->nns1.bytes; - } - else - { - if (!(twopass->nns1.kblk + twopass->nns1.mblk)) - recminpsize = twopass->nns1.bytes; - } - ++frames; } twopass->keyframe_locations[i_frames] = frames; @@ -549,20 +511,10 @@ } } - if (frames == 0) - { - twopass->minpsize = (twopass->nns1.kblk + 88) / 8; - twopass->minisize = ((twopass->nns1.kblk * 22) + 240) / 8; - if (recminpsize > twopass->minpsize) - twopass->minpsize = recminpsize; - if (recminisize > twopass->minisize) - twopass->minisize = recminisize; - } - if (!codec_is_in_credits(&codec->config, frames) && !(twopass->nns1.quant & NNSTATS_KEYFRAME)) { - dbytes = twopass->nns1.bytes / twopass->movie_curve; + double dbytes = twopass->nns1.bytes / twopass->movie_curve; total1 += dbytes; if (codec->config.use_alt_curve) @@ -570,21 +522,21 @@ if (dbytes > twopass->average_frame) { if (dbytes >= twopass->alt_curve_high) - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev); + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev); else { switch(codec->config.alt_curve_type) { case 2: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff))); break; case 1: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * (dbytes - twopass->average_frame) / twopass->alt_curve_high_diff); break; case 0: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff)))); } } @@ -592,21 +544,21 @@ else { if (dbytes <= twopass->alt_curve_low) - dbytes2 = dbytes; + total2 += dbytes; else { switch(codec->config.alt_curve_type) { case 2: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff))); break; case 1: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev * (dbytes - twopass->average_frame) / twopass->alt_curve_low_diff); break; case 0: - dbytes2 = dbytes * (twopass->alt_curve_mid_qual + twopass->alt_curve_qual_dev * + total2 += dbytes * (twopass->alt_curve_mid_qual + twopass->alt_curve_qual_dev * (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff)))); } } @@ -616,20 +568,15 @@ { if (dbytes > twopass->average_frame) { - dbytes2 = ((double)dbytes + (twopass->average_frame - dbytes) * + total2 += ((double)dbytes + (twopass->average_frame - dbytes) * codec->config.curve_compression_high / 100.0); } else { - dbytes2 = ((double)dbytes + (twopass->average_frame - dbytes) * + total2 += ((double)dbytes + (twopass->average_frame - dbytes) * codec->config.curve_compression_low / 100.0); } } - - if (dbytes2 < twopass->minpsize) - dbytes2 = twopass->minpsize; - - total2 += dbytes2; } ++frames; @@ -994,18 +941,10 @@ curve_comp_error += bytes2 - bytes1; bytes2 = bytes1; } - else + else if (bytes2 < 1) { - if (frame->intra) - { - if (bytes2 < twopass->minisize) - { - curve_comp_error -= twopass->minisize - bytes2; - bytes2 = twopass->minisize; - } - } - else if (bytes2 < twopass->minpsize) - bytes2 = twopass->minpsize; + curve_comp_error += --bytes2; + bytes2 = 1; } } @@ -1068,14 +1007,10 @@ bytes2 = twopass->max_framesize; } - // make sure to not scale below the minimum framesize - if (twopass->nns1.quant & NNSTATS_KEYFRAME) + if (bytes2 < 1) { - if (bytes2 < twopass->minisize) - bytes2 = twopass->minisize; + bytes2 = 1; } - else if (bytes2 < twopass->minpsize) - bytes2 = twopass->minpsize; twopass->bytes1 = bytes1; twopass->bytes2 = bytes2; @@ -1294,5 +1229,4 @@ } return; } -} - +} \ No newline at end of file