189 |
static int ARG_CPU_FLAGS = 0; |
static int ARG_CPU_FLAGS = 0; |
190 |
static int ARG_STATS = 0; |
static int ARG_STATS = 0; |
191 |
static int ARG_SSIM = -1; |
static int ARG_SSIM = -1; |
192 |
|
static int ARG_PSNRHVSM = 0; |
193 |
static char* ARG_SSIM_PATH = NULL; |
static char* ARG_SSIM_PATH = NULL; |
194 |
static int ARG_DUMP = 0; |
static int ARG_DUMP = 0; |
195 |
static int ARG_LUMIMASKING = 0; |
static int ARG_LUMIMASKING = 0; |
231 |
static int ARG_TURBO = 0; |
static int ARG_TURBO = 0; |
232 |
static int ARG_VHQMODE = 1; |
static int ARG_VHQMODE = 1; |
233 |
static int ARG_BVHQ = 0; |
static int ARG_BVHQ = 0; |
234 |
|
static int ARG_QMETRIC = 0; |
235 |
static int ARG_CLOSED_GOP = 1; |
static int ARG_CLOSED_GOP = 1; |
236 |
static int ARG_CHROMAME = 1; |
static int ARG_CHROMAME = 1; |
237 |
static int ARG_PAR = 1; |
static int ARG_PAR = 1; |
257 |
static int ARG_VBVMAXRATE = 0; |
static int ARG_VBVMAXRATE = 0; |
258 |
static int ARG_VBVPEAKRATE = 0; |
static int ARG_VBVPEAKRATE = 0; |
259 |
static int ARG_THREADS = 0; |
static int ARG_THREADS = 0; |
260 |
|
static int ARG_SLICES = 1; |
261 |
static int ARG_VFR = 0; |
static int ARG_VFR = 0; |
262 |
static int ARG_PROGRESS = 0; |
static int ARG_PROGRESS = 0; |
263 |
static int ARG_COLORSPACE = XVID_CSP_YV12; |
static int ARG_COLORSPACE = XVID_CSP_YV12; |
391 |
ARG_BITRATE = atoi(argv[i+1]); |
ARG_BITRATE = atoi(argv[i+1]); |
392 |
if (ARG_BITRATE) { |
if (ARG_BITRATE) { |
393 |
i++; |
i++; |
394 |
if (ARG_BITRATE <= 10000) |
if (ARG_BITRATE <= 20000) |
395 |
/* if given parameter is <= 10000, assume it means kbps */ |
/* if given parameter is <= 20000, assume it means kbps */ |
396 |
ARG_BITRATE *= 1000; |
ARG_BITRATE *= 1000; |
397 |
} |
} |
398 |
else |
else |
448 |
} else if (strcmp("-threads", argv[i]) == 0 && i < argc -1) { |
} else if (strcmp("-threads", argv[i]) == 0 && i < argc -1) { |
449 |
i++; |
i++; |
450 |
ARG_THREADS = atoi(argv[i]); |
ARG_THREADS = atoi(argv[i]); |
451 |
|
} else if (strcmp("-slices", argv[i]) == 0 && i < argc -1) { |
452 |
|
i++; |
453 |
|
ARG_SLICES = atoi(argv[i]); |
454 |
} else if (strcmp("-bquant_ratio", argv[i]) == 0 && i < argc - 1) { |
} else if (strcmp("-bquant_ratio", argv[i]) == 0 && i < argc - 1) { |
455 |
i++; |
i++; |
456 |
ARG_BQRATIO = atoi(argv[i]); |
ARG_BQRATIO = atoi(argv[i]); |
556 |
} else if (strcmp("-vhqmode", argv[i]) == 0 && i < argc - 1) { |
} else if (strcmp("-vhqmode", argv[i]) == 0 && i < argc - 1) { |
557 |
i++; |
i++; |
558 |
ARG_VHQMODE = atoi(argv[i]); |
ARG_VHQMODE = atoi(argv[i]); |
559 |
|
} else if (strcmp("-metric", argv[i]) == 0 && i < argc - 1) { |
560 |
|
i++; |
561 |
|
ARG_QMETRIC = atoi(argv[i]); |
562 |
} else if (strcmp("-framerate", argv[i]) == 0 && i < argc - 1) { |
} else if (strcmp("-framerate", argv[i]) == 0 && i < argc - 1) { |
563 |
int exponent; |
int exponent; |
564 |
i++; |
i++; |
587 |
i++; |
i++; |
588 |
ARG_SSIM = atoi(argv[i]); |
ARG_SSIM = atoi(argv[i]); |
589 |
} |
} |
590 |
|
} else if (strcmp("-psnrhvsm", argv[i]) == 0) { |
591 |
|
ARG_PSNRHVSM = 1; |
592 |
} else if (strcmp("-ssim_file", argv[i]) == 0 && i < argc -1) { |
} else if (strcmp("-ssim_file", argv[i]) == 0 && i < argc -1) { |
593 |
i++; |
i++; |
594 |
ARG_SSIM_PATH = argv[i]; |
ARG_SSIM_PATH = argv[i]; |
708 |
ARG_VBVMAXRATE = atoi(argv[i]); |
ARG_VBVMAXRATE = atoi(argv[i]); |
709 |
} else if (strcmp("-vbvpeak", argv[i]) == 0 && i < argc -1) { |
} else if (strcmp("-vbvpeak", argv[i]) == 0 && i < argc -1) { |
710 |
i++; |
i++; |
711 |
ARG_VBVPEAKRATE = atoi(argv[i])*3; |
ARG_VBVPEAKRATE = atoi(argv[i]); |
712 |
} else if (strcmp("-reaction", argv[i]) == 0 && i < argc -1) { |
} else if (strcmp("-reaction", argv[i]) == 0 && i < argc -1) { |
713 |
i++; |
i++; |
714 |
ARG_REACTION = atoi(argv[i]); |
ARG_REACTION = atoi(argv[i]); |
1876 |
fprintf(stderr, " -quality integer : quality ([0..%d]) (6)\n", ME_ELEMENTS - 1); |
fprintf(stderr, " -quality integer : quality ([0..%d]) (6)\n", ME_ELEMENTS - 1); |
1877 |
fprintf(stderr, " -vhqmode integer : level of R-D optimizations ([0..4]) (1)\n"); |
fprintf(stderr, " -vhqmode integer : level of R-D optimizations ([0..4]) (1)\n"); |
1878 |
fprintf(stderr, " -bvhq : use R-D optimizations for B-frames\n"); |
fprintf(stderr, " -bvhq : use R-D optimizations for B-frames\n"); |
1879 |
|
fprintf(stderr, " -metric integer : distortion metric for R-D opt (PSNR:0, PSNRHVSM: 1)\n"); |
1880 |
fprintf(stderr, " -qpel : use quarter pixel ME\n"); |
fprintf(stderr, " -qpel : use quarter pixel ME\n"); |
1881 |
fprintf(stderr, " -gmc : use global motion compensation\n"); |
fprintf(stderr, " -gmc : use global motion compensation\n"); |
1882 |
fprintf(stderr, " -qtype integer : quantization type (H263:0, MPEG4:1) (0)\n"); |
fprintf(stderr, " -qtype integer : quantization type (H263:0, MPEG4:1) (0)\n"); |
1888 |
fprintf(stderr, " -stats : print stats about encoded frames\n"); |
fprintf(stderr, " -stats : print stats about encoded frames\n"); |
1889 |
fprintf(stderr, " -ssim [integer] : prints ssim for every frame (accurate: 0 fast: 4) (2)\n"); |
fprintf(stderr, " -ssim [integer] : prints ssim for every frame (accurate: 0 fast: 4) (2)\n"); |
1890 |
fprintf(stderr, " -ssim_file filename : outputs the ssim stats into a file\n"); |
fprintf(stderr, " -ssim_file filename : outputs the ssim stats into a file\n"); |
1891 |
|
fprintf(stderr, " -psnrhvsm : prints PSNRHVSM metric for every frame\n"); |
1892 |
fprintf(stderr, " -debug : activates xvidcore internal debugging output\n"); |
fprintf(stderr, " -debug : activates xvidcore internal debugging output\n"); |
1893 |
fprintf(stderr, " -vop_debug : print some info directly into encoded frames\n"); |
fprintf(stderr, " -vop_debug : print some info directly into encoded frames\n"); |
1894 |
fprintf(stderr, " -nochromame : Disable chroma motion estimation\n"); |
fprintf(stderr, " -nochromame : Disable chroma motion estimation\n"); |
1902 |
fprintf(stderr, " -drop integer : Frame Drop Ratio (0..100) (0)\n"); |
fprintf(stderr, " -drop integer : Frame Drop Ratio (0..100) (0)\n"); |
1903 |
fprintf(stderr, " -start integer : Starting frame number\n"); |
fprintf(stderr, " -start integer : Starting frame number\n"); |
1904 |
fprintf(stderr, " -threads integer : Number of threads\n"); |
fprintf(stderr, " -threads integer : Number of threads\n"); |
1905 |
|
fprintf(stderr, " -slices integer : Number of slices\n"); |
1906 |
fprintf(stderr, " -progress [integer] : Show progress updates every n frames (10)\n"); |
fprintf(stderr, " -progress [integer] : Show progress updates every n frames (10)\n"); |
1907 |
fprintf(stderr, " -par integer[:integer] : Set Pixel Aspect Ratio.\n"); |
fprintf(stderr, " -par integer[:integer] : Set Pixel Aspect Ratio.\n"); |
1908 |
fprintf(stderr, " 1 = 1:1\n"); |
fprintf(stderr, " 1 = 1:1\n"); |
2188 |
rc2pass2.vbv_size = ARG_VBVSIZE; |
rc2pass2.vbv_size = ARG_VBVSIZE; |
2189 |
rc2pass2.vbv_initial = (ARG_VBVSIZE*3)/4; |
rc2pass2.vbv_initial = (ARG_VBVSIZE*3)/4; |
2190 |
rc2pass2.vbv_maxrate = ARG_VBVMAXRATE; |
rc2pass2.vbv_maxrate = ARG_VBVMAXRATE; |
2191 |
rc2pass2.vbv_peakrate = ARG_VBVPEAKRATE*3; |
rc2pass2.vbv_peakrate = ARG_VBVPEAKRATE; |
2192 |
|
|
2193 |
|
|
2194 |
plugins[xvid_enc_create.num_plugins].func = xvid_plugin_2pass2; |
plugins[xvid_enc_create.num_plugins].func = xvid_plugin_2pass2; |
2255 |
xvid_enc_create.num_plugins++; |
xvid_enc_create.num_plugins++; |
2256 |
} |
} |
2257 |
|
|
2258 |
|
if (ARG_PSNRHVSM>0) { |
2259 |
|
plugins[xvid_enc_create.num_plugins].func = xvid_plugin_psnrhvsm; |
2260 |
|
plugins[xvid_enc_create.num_plugins].param = NULL; |
2261 |
|
xvid_enc_create.num_plugins++; |
2262 |
|
} |
2263 |
|
|
2264 |
#if 0 |
#if 0 |
2265 |
if (ARG_DEBUG) { |
if (ARG_DEBUG) { |
2266 |
plugins[xvid_enc_create.num_plugins].func = rawenc_debug; |
plugins[xvid_enc_create.num_plugins].func = rawenc_debug; |
2270 |
#endif |
#endif |
2271 |
|
|
2272 |
xvid_enc_create.num_threads = ARG_THREADS; |
xvid_enc_create.num_threads = ARG_THREADS; |
2273 |
|
xvid_enc_create.num_slices = ARG_SLICES; |
2274 |
|
|
2275 |
/* Frame rate */ |
/* Frame rate */ |
2276 |
xvid_enc_create.fincr = ARG_DWSCALE; |
xvid_enc_create.fincr = ARG_DWSCALE; |
2493 |
if (ARG_BVHQ) |
if (ARG_BVHQ) |
2494 |
xvid_enc_frame.vop_flags |= XVID_VOP_RD_BVOP; |
xvid_enc_frame.vop_flags |= XVID_VOP_RD_BVOP; |
2495 |
|
|
2496 |
|
if (ARG_QMETRIC == 1) |
2497 |
|
xvid_enc_frame.vop_flags |= XVID_VOP_RD_PSNRHVSM; |
2498 |
|
|
2499 |
switch (ARG_VHQMODE) /* this is the same code as for vfw */ |
switch (ARG_VHQMODE) /* this is the same code as for vfw */ |
2500 |
{ |
{ |
2501 |
case 1: /* VHQ_MODE_DECISION */ |
case 1: /* VHQ_MODE_DECISION */ |