290 |
if (rc == NULL) |
if (rc == NULL) |
291 |
return XVID_ERR_MEMORY; |
return XVID_ERR_MEMORY; |
292 |
|
|
293 |
rc->param = *param; |
/* v1.0.x */ |
294 |
|
rc->param.version = param->version; |
295 |
|
rc->param.bitrate = param->bitrate; |
296 |
|
rc->param.filename = param->filename; |
297 |
|
rc->param.keyframe_boost = param->keyframe_boost; |
298 |
|
rc->param.curve_compression_high = param->curve_compression_high; |
299 |
|
rc->param.curve_compression_low = param->curve_compression_low; |
300 |
|
rc->param.overflow_control_strength = param->overflow_control_strength; |
301 |
|
rc->param.max_overflow_improvement = param->max_overflow_improvement; |
302 |
|
rc->param.max_overflow_degradation = param->max_overflow_degradation; |
303 |
|
rc->param.kfreduction = param->kfreduction; |
304 |
|
rc->param.kfthreshold = param->kfthreshold; |
305 |
|
rc->param.container_frame_overhead = param->container_frame_overhead; |
306 |
|
|
307 |
|
if (XVID_VERSION_MINOR(param->version) >= 1) { |
308 |
|
rc->param.vbv_size = param->vbv_size; |
309 |
|
rc->param.vbv_initial = param->vbv_initial; |
310 |
|
rc->param.vbv_maxrate = param->vbv_maxrate; |
311 |
|
rc->param.vbv_peakrate = param->vbv_peakrate; |
312 |
|
}else{ |
313 |
|
rc->param.vbv_size = |
314 |
|
rc->param.vbv_initial = |
315 |
|
rc->param.vbv_maxrate = |
316 |
|
rc->param.vbv_peakrate = 0; |
317 |
|
} |
318 |
|
|
319 |
/* Initialize all defaults */ |
/* Initialize all defaults */ |
320 |
#define _INIT(a, b) if((a) <= 0) (a) = (b) |
#define _INIT(a, b) if((a) <= 0) (a) = (b) |
1655 |
{ |
{ |
1656 |
float S_red = 0.f; /* how much to redistribute */ |
float S_red = 0.f; /* how much to redistribute */ |
1657 |
float S_elig = 0.f; /* sum of bit for those scenes you can still swallow something*/ |
float S_elig = 0.f; /* sum of bit for those scenes you can still swallow something*/ |
1658 |
|
float f_red; |
1659 |
int l; |
int l; |
1660 |
|
|
1661 |
for (l=0;l<num_scenes;l++) /* check how much is wrong */ |
for (l=0;l<num_scenes;l++) /* check how much is wrong */ |
1698 |
return -2; |
return -2; |
1699 |
} |
} |
1700 |
|
|
1701 |
const float f_red = (1.f + S_red/S_elig); |
f_red = (1.f + S_red/S_elig); |
1702 |
|
|
1703 |
#ifdef VBV_DEBUG |
#ifdef VBV_DEBUG |
1704 |
printf("Moving %.0f kB to avoid buffer underflow, correction factor: %.5f\n",S_red/1024.f,f_red); |
printf("Moving %.0f kB to avoid buffer underflow, correction factor: %.5f\n",S_red/1024.f,f_red); |