[cvs] / vfw / src / 2pass.c Repository:
ViewVC logotype

Diff of /vfw/src/2pass.c

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

revision 1.7.2.2, Sat Sep 28 02:01:47 2002 UTC revision 1.8, Thu Sep 12 21:18:49 2002 UTC
# Line 41  Line 41 
41          DWORD version = -20;          DWORD version = -20;
42          DWORD read, wrote;          DWORD read, wrote;
43    
44          int     frames = 0, credits_frames = 0, i_frames = 0, recminpsize = 0, recminisize = 0;          int     frames = 0, credits_frames = 0, i_frames = 0;
45          __int64 total_ext = 0, total = 0, i_total = 0, i_boost_total = 0, start = 0, end = 0, start_curved = 0, end_curved = 0;          __int64 total_ext = 0, total = 0, i_total = 0, i_boost_total = 0, start = 0, end = 0, start_curved = 0, end_curved = 0;
46          __int64 desired = (__int64)codec->config.desired_size * 1024;          __int64 desired = (__int64)codec->config.desired_size * 1024;
47    
48          double total1 = 0.0;          double total1 = 0.0;
49          double total2 = 0.0;          double total2 = 0.0;
         double dbytes, dbytes2;  
50    
51          if (codec->config.hinted_me)          if (codec->config.hinted_me)
52          {          {
# Line 174  Line 173 
173                                  else                                  else
174                                          ++credits_frames;                                          ++credits_frames;
175    
                                 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;  
                                 }  
   
176                                  ++frames;                                  ++frames;
177                          }                          }
178                          twopass->keyframe_locations[i_frames] = frames;                          twopass->keyframe_locations[i_frames] = frames;
# Line 264  Line 252 
252                                          }                                          }
253                                  }                                  }
254    
                                 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;  
                                 }  
   
255                                  if (!codec_is_in_credits(&codec->config, frames) &&                                  if (!codec_is_in_credits(&codec->config, frames) &&
256                                          !(twopass->nns1.quant & NNSTATS_KEYFRAME))                                          !(twopass->nns1.quant & NNSTATS_KEYFRAME))
257                                  {                                  {
258                                          dbytes = twopass->nns2.bytes / twopass->movie_curve;                                          double dbytes = twopass->nns2.bytes / twopass->movie_curve;
259                                          total1 += dbytes;                                          total1 += dbytes;
260    
261                                          if (codec->config.use_alt_curve)                                          if (codec->config.use_alt_curve)
# Line 285  Line 263 
263                                                  if (dbytes > twopass->average_frame)                                                  if (dbytes > twopass->average_frame)
264                                                  {                                                  {
265                                                          if (dbytes >= twopass->alt_curve_high)                                                          if (dbytes >= twopass->alt_curve_high)
266                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev);                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev);
267                                                          else                                                          else
268                                                          {                                                          {
269                                                                  switch(codec->config.alt_curve_type)                                                                  switch(codec->config.alt_curve_type)
270                                                                  {                                                                  {
271                                                                  case 2:                                                                  case 2:
272                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *
273                                                                          sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff)));                                                                          sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff)));
274                                                                          break;                                                                          break;
275                                                                  case 1:                                                                  case 1:
276                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *
277                                                                          (dbytes - twopass->average_frame) / twopass->alt_curve_high_diff);                                                                          (dbytes - twopass->average_frame) / twopass->alt_curve_high_diff);
278                                                                          break;                                                                          break;
279                                                                  case 0:                                                                  case 0:
280                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *
281                                                                          (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff))));                                                                          (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff))));
282                                                                  }                                                                  }
283                                                          }                                                          }
# Line 307  Line 285 
285                                                  else                                                  else
286                                                  {                                                  {
287                                                          if (dbytes <= twopass->alt_curve_low)                                                          if (dbytes <= twopass->alt_curve_low)
288                                                                  dbytes2 = dbytes;                                                                  total2 += dbytes;
289                                                          else                                                          else
290                                                          {                                                          {
291                                                                  switch(codec->config.alt_curve_type)                                                                  switch(codec->config.alt_curve_type)
292                                                                  {                                                                  {
293                                                                  case 2:                                                                  case 2:
294                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *
295                                                                          sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff)));                                                                          sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff)));
296                                                                          break;                                                                          break;
297                                                                  case 1:                                                                  case 1:
298                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *
299                                                                          (dbytes - twopass->average_frame) / twopass->alt_curve_low_diff);                                                                          (dbytes - twopass->average_frame) / twopass->alt_curve_low_diff);
300                                                                          break;                                                                          break;
301                                                                  case 0:                                                                  case 0:
302                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual + twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual + twopass->alt_curve_qual_dev *
303                                                                          (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff))));                                                                          (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff))));
304                                                                  }                                                                  }
305                                                          }                                                          }
# Line 331  Line 309 
309                                          {                                          {
310                                                  if (dbytes > twopass->average_frame)                                                  if (dbytes > twopass->average_frame)
311                                                  {                                                  {
312                                                          dbytes2 = ((double)dbytes + (twopass->average_frame - dbytes) *                                                          total2 += ((double)dbytes + (twopass->average_frame - dbytes) *
313                                                                  codec->config.curve_compression_high / 100.0);                                                                  codec->config.curve_compression_high / 100.0);
314                                                  }                                                  }
315                                                  else                                                  else
316                                                  {                                                  {
317                                                          dbytes2 = ((double)dbytes + (twopass->average_frame - dbytes) *                                                          total2 += ((double)dbytes + (twopass->average_frame - dbytes) *
318                                                                  codec->config.curve_compression_low / 100.0);                                                                  codec->config.curve_compression_low / 100.0);
319                                                  }                                                  }
320                                          }                                          }
   
                                         if (dbytes2 < twopass->minpsize)  
                                                 dbytes2 = twopass->minpsize;  
   
                                         total2 += dbytes2;  
321                                  }                                  }
322    
323                                  ++frames;                                  ++frames;
# Line 406  Line 379 
379    
380                                  total += twopass->nns1.bytes;                                  total += twopass->nns1.bytes;
381    
                                 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;  
                                 }  
   
382                                  ++frames;                                  ++frames;
383                          }                          }
384                          twopass->keyframe_locations[i_frames] = frames;                          twopass->keyframe_locations[i_frames] = frames;
# Line 549  Line 511 
511                                          }                                          }
512                                  }                                  }
513    
                                 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;  
                                 }  
   
514                                  if (!codec_is_in_credits(&codec->config, frames) &&                                  if (!codec_is_in_credits(&codec->config, frames) &&
515                                          !(twopass->nns1.quant & NNSTATS_KEYFRAME))                                          !(twopass->nns1.quant & NNSTATS_KEYFRAME))
516                                  {                                  {
517                                          dbytes = twopass->nns1.bytes / twopass->movie_curve;                                          double dbytes = twopass->nns1.bytes / twopass->movie_curve;
518                                          total1 += dbytes;                                          total1 += dbytes;
519    
520                                          if (codec->config.use_alt_curve)                                          if (codec->config.use_alt_curve)
# Line 570  Line 522 
522                                                  if (dbytes > twopass->average_frame)                                                  if (dbytes > twopass->average_frame)
523                                                  {                                                  {
524                                                          if (dbytes >= twopass->alt_curve_high)                                                          if (dbytes >= twopass->alt_curve_high)
525                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev);                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev);
526                                                          else                                                          else
527                                                          {                                                          {
528                                                                  switch(codec->config.alt_curve_type)                                                                  switch(codec->config.alt_curve_type)
529                                                                  {                                                                  {
530                                                                  case 2:                                                                  case 2:
531                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *
532                                                                          sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff)));                                                                          sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff)));
533                                                                          break;                                                                          break;
534                                                                  case 1:                                                                  case 1:
535                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *
536                                                                          (dbytes - twopass->average_frame) / twopass->alt_curve_high_diff);                                                                          (dbytes - twopass->average_frame) / twopass->alt_curve_high_diff);
537                                                                          break;                                                                          break;
538                                                                  case 0:                                                                  case 0:
539                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *
540                                                                          (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff))));                                                                          (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_high_diff))));
541                                                                  }                                                                  }
542                                                          }                                                          }
# Line 592  Line 544 
544                                                  else                                                  else
545                                                  {                                                  {
546                                                          if (dbytes <= twopass->alt_curve_low)                                                          if (dbytes <= twopass->alt_curve_low)
547                                                                  dbytes2 = dbytes;                                                                  total2 += dbytes;
548                                                          else                                                          else
549                                                          {                                                          {
550                                                                  switch(codec->config.alt_curve_type)                                                                  switch(codec->config.alt_curve_type)
551                                                                  {                                                                  {
552                                                                  case 2:                                                                  case 2:
553                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *
554                                                                          sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff)));                                                                          sin(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff)));
555                                                                          break;                                                                          break;
556                                                                  case 1:                                                                  case 1:
557                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual - twopass->alt_curve_qual_dev *
558                                                                          (dbytes - twopass->average_frame) / twopass->alt_curve_low_diff);                                                                          (dbytes - twopass->average_frame) / twopass->alt_curve_low_diff);
559                                                                          break;                                                                          break;
560                                                                  case 0:                                                                  case 0:
561                                                                  dbytes2 = dbytes * (twopass->alt_curve_mid_qual + twopass->alt_curve_qual_dev *                                                                  total2 += dbytes * (twopass->alt_curve_mid_qual + twopass->alt_curve_qual_dev *
562                                                                          (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff))));                                                                          (1.0 - cos(DEG2RAD * ((dbytes - twopass->average_frame) * 90.0 / twopass->alt_curve_low_diff))));
563                                                                  }                                                                  }
564                                                          }                                                          }
# Line 616  Line 568 
568                                          {                                          {
569                                                  if (dbytes > twopass->average_frame)                                                  if (dbytes > twopass->average_frame)
570                                                  {                                                  {
571                                                          dbytes2 = ((double)dbytes + (twopass->average_frame - dbytes) *                                                          total2 += ((double)dbytes + (twopass->average_frame - dbytes) *
572                                                                  codec->config.curve_compression_high / 100.0);                                                                  codec->config.curve_compression_high / 100.0);
573                                                  }                                                  }
574                                                  else                                                  else
575                                                  {                                                  {
576                                                          dbytes2 = ((double)dbytes + (twopass->average_frame - dbytes) *                                                          total2 += ((double)dbytes + (twopass->average_frame - dbytes) *
577                                                                  codec->config.curve_compression_low / 100.0);                                                                  codec->config.curve_compression_low / 100.0);
578                                                  }                                                  }
579                                          }                                          }
   
                                         if (dbytes2 < twopass->minpsize)  
                                                 dbytes2 = twopass->minpsize;  
   
                                         total2 += dbytes2;  
580                                  }                                  }
581    
582                                  ++frames;                                  ++frames;
# Line 994  Line 941 
941                          curve_comp_error += bytes2 - bytes1;                          curve_comp_error += bytes2 - bytes1;
942                          bytes2 = bytes1;                          bytes2 = bytes1;
943                  }                  }
944                  else                  else if (bytes2 < 1)
                 {  
                         if (frame->intra)  
945                          {                          {
946                                  if (bytes2 < twopass->minisize)                          curve_comp_error += --bytes2;
947                                  {                          bytes2 = 1;
                                         curve_comp_error -= twopass->minisize - bytes2;  
                                         bytes2 = twopass->minisize;  
                                 }  
                         }  
                         else if (bytes2 < twopass->minpsize)  
                                 bytes2 = twopass->minpsize;  
948                  }                  }
949          }          }
950    
# Line 1068  Line 1007 
1007                  bytes2 = twopass->max_framesize;                  bytes2 = twopass->max_framesize;
1008          }          }
1009    
1010          // make sure to not scale below the minimum framesize          if (bytes2 < 1)
         if (twopass->nns1.quant & NNSTATS_KEYFRAME)  
1011          {          {
1012                  if (bytes2 < twopass->minisize)                  bytes2 = 1;
                         bytes2 = twopass->minisize;  
1013          }          }
         else if (bytes2 < twopass->minpsize)  
                 bytes2 = twopass->minpsize;  
1014    
1015          twopass->bytes1 = bytes1;          twopass->bytes1 = bytes1;
1016          twopass->bytes2 = bytes2;          twopass->bytes2 = bytes2;
# Line 1295  Line 1230 
1230                  return;                  return;
1231          }          }
1232  }  }
   

Legend:
Removed from v.1.7.2.2  
changed lines
  Added in v.1.8

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