[svn] / trunk / xvidcore / src / plugins / plugin_2pass2.c Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/plugins/plugin_2pass2.c

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

revision 1905, Fri Nov 12 10:10:40 2010 UTC revision 1906, Tue Nov 16 14:42:07 2010 UTC
# Line 25  Line 25 
25   *  along with this program; if not, write to the Free Software   *  along with this program; if not, write to the Free Software
26   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
27   *   *
28   * $Id: plugin_2pass2.c,v 1.9 2010-03-09 10:00:14 Isibaar Exp $   * $Id: plugin_2pass2.c,v 1.10 2010-11-16 14:42:07 Isibaar Exp $
29   *   *
30   *****************************************************************************/   *****************************************************************************/
31    
# Line 1446  Line 1446 
1446   * aren't...)   * aren't...)
1447   *   *
1448   * DivX profiles have 2 criteria: VBV as in MPEG standard   * DivX profiles have 2 criteria: VBV as in MPEG standard
1449   *                                a limit on peak bitrate for any 3 seconds   *                                a limit on peak bitrate for any 1 second
1450   *   *
1451   * But if VBV is fulfilled, peakrate is automatically fulfilled in any profile   * But if VBV is fulfilled, peakrate is automatically fulfilled in any profile
1452   * define so far, so we check for it (for completeness) but correct only VBV   * defined so far, so we check for it (for completeness) but correct only VBV
1453   *   *
1454   *****************************************************************************/   *****************************************************************************/
1455    
1456  #define VBV_COMPLIANT 0  #define VBV_COMPLIANT 0
1457  #define VBV_UNDERFLOW 1 /* video buffer runs empty */  #define VBV_UNDERFLOW 1 /* video buffer runs empty */
1458  #define VBV_OVERFLOW 2  /* doesn't exist for VBR encoding */  #define VBV_OVERFLOW 2  /* doesn't exist for VBR encoding */
1459  #define VBV_PEAKRATE 4  /* peak bitrate (within 3s) violated */  #define VBV_PEAKRATE  4  /* peak bitrate (within 1s) violated */
1460    
1461  static int  static int
1462  check_curve_for_vbv_compliancy(rc_2pass2_t * rc, const float fps)  check_curve_for_vbv_compliancy(rc_2pass2_t * rc, const float fps)
# Line 1464  Line 1464 
1464          /* We do all calculations in float, for higher accuracy,          /* We do all calculations in float, for higher accuracy,
1465           * and in bytes for convenience.           * and in bytes for convenience.
1466           *           *
1467           * typical values from DivX Home Theater profile:           * typical values from e.g. Home profile:
1468           *  vbv_size= 384*1024 (384kB)           *  vbv_size= 384*1024 (384kB)
1469           *  vbv_initial= 288*1024 (75% fill)           *  vbv_initial= 288*1024 (75% fill)
1470           *  maxrate= 4854000 (4.854MBps)           *  maxrate= 4854000 (4.854MBps)
1471           *  peakrate= 8000000 (8MBps)           *  peakrate= 8000000 (8MBps)
1472           *           *
1473           *  PAL: offset3s = 75 (3 seconds of 25fps)           *  PAL: offset1s = 25 (1 second of 25fps)
1474           *  NTSC: offset3s = 90 (3 seconds of 29.97fps) or 72 (3 seconds of 23.976fps)           *  NTSC: offset1s = 30 (1 second of 29.97fps) or 24 (1 second of 23.976fps)
1475           */           */
1476    
1477          const float vbv_size = (float)rc->param.vbv_size/8.f;          const float vbv_size = (float)rc->param.vbv_size/8.f;
# Line 1482  Line 1482 
1482          const float peakrate = (float)rc->param.vbv_peakrate;          const float peakrate = (float)rc->param.vbv_peakrate;
1483          const float r0 = (int)(maxrate/fps+0.5)/8.f;          const float r0 = (int)(maxrate/fps+0.5)/8.f;
1484    
1485          int bytes3s = 0;          int bytes1s = 0;
1486          int offset3s = (int)(3.f*fps+0.5);          int offset1s = (int)(1.f*fps+0.5);
1487          int i;          int i;
1488    
1489          /* 1Gbit should be enough to inuitialize the vbvmin          /* 1Gbit should be enough to inuitialize the vbvmin
# Line 1491  Line 1491 
1491          vbvmin = 1000*1000*1000;          vbvmin = 1000*1000*1000;
1492    
1493          for (i=0; i<rc->num_frames; i++) {          for (i=0; i<rc->num_frames; i++) {
1494                  /* DivX 3s peak bitrate check  */                  /* DivX 1s peak bitrate check  */
1495                  bytes3s += rc->stats[i].scaled_length;                  bytes1s += rc->stats[i].scaled_length;
1496                  if (i>=offset3s)                  if (i>=offset1s)
1497                          bytes3s -= rc->stats[i-offset3s].scaled_length;                          bytes1s -= rc->stats[i-offset1s].scaled_length;
1498    
1499      /* ignore peakrate constraint if peakrate is <= 0.f */      /* ignore peakrate constraint if peakrate is <= 0.f */
1500                  if (peakrate>0.f && 8.f*bytes3s > 3*peakrate)                  if (peakrate>0.f && 8.f*bytes1s > peakrate)
1501                          return(VBV_PEAKRATE);                          return(VBV_PEAKRATE);
1502    
1503                  /* update vbv fill level */                  /* update vbv fill level */

Legend:
Removed from v.1905  
changed lines
  Added in v.1906

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