165 |
static frame_stats_t framestats[7]; |
static frame_stats_t framestats[7]; |
166 |
|
|
167 |
static int ARG_STATS = 0; |
static int ARG_STATS = 0; |
168 |
|
static int ARG_SSIM = -1; |
169 |
|
static char* ARG_SSIM_PATH = NULL; |
170 |
static int ARG_DUMP = 0; |
static int ARG_DUMP = 0; |
171 |
static int ARG_LUMIMASKING = 0; |
static int ARG_LUMIMASKING = 0; |
172 |
static int ARG_BITRATE = 0; |
static int ARG_BITRATE = 0; |
391 |
} else if (strcmp("-h", argv[i]) == 0 && i < argc - 1) { |
} else if (strcmp("-h", argv[i]) == 0 && i < argc - 1) { |
392 |
i++; |
i++; |
393 |
YDIM = atoi(argv[i]); |
YDIM = atoi(argv[i]); |
394 |
|
} else if (strcmp("-csp",argv[i]) == 0 && i < argc - 1) { |
395 |
|
i++; |
396 |
|
if (strcmp(argv[i],"i420") == 0){ |
397 |
|
ARG_COLORSPACE = XVID_CSP_I420; |
398 |
|
} else if(strcmp(argv[i],"yv12") == 0){ |
399 |
|
ARG_COLORSPACE = XVID_CSP_YV12; |
400 |
|
} else { |
401 |
|
printf("Invalid colorspace\n"); |
402 |
|
return 0; |
403 |
|
} |
404 |
} else if (strcmp("-bitrate", argv[i]) == 0) { |
} else if (strcmp("-bitrate", argv[i]) == 0) { |
405 |
if (i < argc - 1) |
if (i < argc - 1) |
406 |
ARG_BITRATE = atoi(argv[i+1]); |
ARG_BITRATE = atoi(argv[i+1]); |
590 |
ARG_INPUTFILE = argv[i]; |
ARG_INPUTFILE = argv[i]; |
591 |
} else if (strcmp("-stats", argv[i]) == 0) { |
} else if (strcmp("-stats", argv[i]) == 0) { |
592 |
ARG_STATS = 1; |
ARG_STATS = 1; |
593 |
|
} else if (strcmp("-ssim", argv[i]) == 0) { |
594 |
|
ARG_SSIM = 2; |
595 |
|
if ((i < argc - 1) && (*argv[i+1] != '-')) { |
596 |
|
i++; |
597 |
|
ARG_SSIM = atoi(argv[i]); |
598 |
|
} |
599 |
|
} else if (strcmp("-ssim_file", argv[i]) == 0 && i < argc -1) { |
600 |
|
i++; |
601 |
|
ARG_SSIM_PATH = argv[i]; |
602 |
} else if (strcmp("-timecode", argv[i]) == 0 && i < argc -1) { |
} else if (strcmp("-timecode", argv[i]) == 0 && i < argc -1) { |
603 |
i++; |
i++; |
604 |
ARG_TIMECODEFILE = argv[i]; |
ARG_TIMECODEFILE = argv[i]; |
1211 |
framestats[5].size += stats_length; |
framestats[5].size += stats_length; |
1212 |
} |
} |
1213 |
|
|
1214 |
|
#define SSE2PSNR(sse, width, height) ((!(sse))?0.0f : 48.131f - 10*(float)log10((float)(sse)/((float)((width)*(height))))) |
1215 |
|
|
1216 |
if (ARG_PROGRESS == 0) { |
if (ARG_PROGRESS == 0) { |
1217 |
printf("%5d: key=%i, time= %6.0f, len= %7d", !result ? input_num : -1, |
printf("%5d: key=%i, time= %6.0f, len= %7d", !result ? input_num : -1, |
1219 |
printf(" | type=%s, quant= %2d, len= %7d", type, stats_quant, |
printf(" | type=%s, quant= %2d, len= %7d", type, stats_quant, |
1220 |
stats_length); |
stats_length); |
1221 |
|
|
|
#define SSE2PSNR(sse, width, height) ((!(sse))?0.0f : 48.131f - 10*(float)log10((float)(sse)/((float)((width)*(height))))) |
|
1222 |
|
|
1223 |
if (ARG_STATS) { |
if (ARG_STATS) { |
1224 |
printf(", psnr y = %2.2f, psnr u = %2.2f, psnr v = %2.2f", |
printf(", psnr y = %2.2f, psnr u = %2.2f, psnr v = %2.2f", |
1225 |
SSE2PSNR(sse[0], XDIM, YDIM), SSE2PSNR(sse[1], XDIM / 2, |
SSE2PSNR(sse[0], XDIM, YDIM), SSE2PSNR(sse[1], XDIM / 2, YDIM / 2), |
|
YDIM / 2), |
|
1226 |
SSE2PSNR(sse[2], XDIM / 2, YDIM / 2)); |
SSE2PSNR(sse[2], XDIM / 2, YDIM / 2)); |
|
|
|
|
totalPSNR[0] += SSE2PSNR(sse[0], XDIM, YDIM); |
|
|
totalPSNR[1] += SSE2PSNR(sse[1], XDIM/2, YDIM/2); |
|
|
totalPSNR[2] += SSE2PSNR(sse[2], XDIM/2, YDIM/2); |
|
1227 |
} |
} |
1228 |
printf("\n"); |
printf("\n"); |
1229 |
} else { |
} else { |
1240 |
} |
} |
1241 |
} |
} |
1242 |
|
|
1243 |
|
if (ARG_STATS) { |
1244 |
|
totalPSNR[0] += SSE2PSNR(sse[0], XDIM, YDIM); |
1245 |
|
totalPSNR[1] += SSE2PSNR(sse[1], XDIM/2, YDIM/2); |
1246 |
|
totalPSNR[2] += SSE2PSNR(sse[2], XDIM/2, YDIM/2); |
1247 |
} |
} |
1248 |
#undef SSE2PSNR |
#undef SSE2PSNR |
1249 |
|
} |
1250 |
|
|
1251 |
if (m4v_size < 0) |
if (m4v_size < 0) |
1252 |
break; |
break; |
1519 |
#endif |
#endif |
1520 |
fprintf(stderr, " -w integer: frame width ([1.2048])\n"); |
fprintf(stderr, " -w integer: frame width ([1.2048])\n"); |
1521 |
fprintf(stderr, " -h integer: frame height ([1.2048])\n"); |
fprintf(stderr, " -h integer: frame height ([1.2048])\n"); |
1522 |
|
fprintf(stderr, " -csp string : colorspace of raw input file i420, yv12 (default)\n"); |
1523 |
fprintf(stderr, " -frames integer: number of frames to encode\n"); |
fprintf(stderr, " -frames integer: number of frames to encode\n"); |
1524 |
fprintf(stderr, "\n"); |
fprintf(stderr, "\n"); |
1525 |
fprintf(stderr, "Output options:\n"); |
fprintf(stderr, "Output options:\n"); |
1583 |
fprintf(stderr, " -noclosed_gop : Disable closed GOP mode\n"); |
fprintf(stderr, " -noclosed_gop : Disable closed GOP mode\n"); |
1584 |
fprintf(stderr, " -lumimasking : use lumimasking algorithm\n"); |
fprintf(stderr, " -lumimasking : use lumimasking algorithm\n"); |
1585 |
fprintf(stderr, " -stats : print stats about encoded frames\n"); |
fprintf(stderr, " -stats : print stats about encoded frames\n"); |
1586 |
|
fprintf(stderr, " -ssim [integer] : prints ssim for every frame (accurate: 0 fast: 4) (2)\n"); |
1587 |
|
fprintf(stderr, " -ssim_file filename : outputs the ssim stats into a file\n"); |
1588 |
fprintf(stderr, " -debug : activates xvidcore internal debugging output\n"); |
fprintf(stderr, " -debug : activates xvidcore internal debugging output\n"); |
1589 |
fprintf(stderr, " -vop_debug : print some info directly into encoded frames\n"); |
fprintf(stderr, " -vop_debug : print some info directly into encoded frames\n"); |
1590 |
fprintf(stderr, " -nochromame : Disable chroma motion estimation\n"); |
fprintf(stderr, " -nochromame : Disable chroma motion estimation\n"); |
1787 |
xvid_plugin_single_t single; |
xvid_plugin_single_t single; |
1788 |
xvid_plugin_2pass1_t rc2pass1; |
xvid_plugin_2pass1_t rc2pass1; |
1789 |
xvid_plugin_2pass2_t rc2pass2; |
xvid_plugin_2pass2_t rc2pass2; |
1790 |
|
xvid_plugin_ssim_t ssim; |
1791 |
//xvid_plugin_fixed_t rcfixed; |
//xvid_plugin_fixed_t rcfixed; |
1792 |
xvid_enc_plugin_t plugins[7]; |
xvid_enc_plugin_t plugins[8]; |
1793 |
xvid_gbl_init_t xvid_gbl_init; |
xvid_gbl_init_t xvid_gbl_init; |
1794 |
xvid_enc_create_t xvid_enc_create; |
xvid_enc_create_t xvid_enc_create; |
1795 |
int i; |
int i; |
1918 |
xvid_enc_create.num_plugins++; |
xvid_enc_create.num_plugins++; |
1919 |
} |
} |
1920 |
|
|
1921 |
|
if (ARG_SSIM>=0 || ARG_SSIM_PATH != NULL) { |
1922 |
|
memset(&ssim, 0, sizeof(xvid_plugin_ssim_t)); |
1923 |
|
|
1924 |
|
plugins[xvid_enc_create.num_plugins].func = xvid_plugin_ssim; |
1925 |
|
|
1926 |
|
if( ARG_SSIM >=0){ |
1927 |
|
ssim.b_printstat = 1; |
1928 |
|
ssim.acc = ARG_SSIM; |
1929 |
|
} else { |
1930 |
|
ssim.b_printstat = 0; |
1931 |
|
ssim.acc = 2; |
1932 |
|
} |
1933 |
|
|
1934 |
|
if(ARG_SSIM_PATH != NULL){ |
1935 |
|
ssim.stat_path = ARG_SSIM_PATH; |
1936 |
|
} |
1937 |
|
|
1938 |
|
ssim.cpu_flags = xvid_gbl_init.cpu_flags; |
1939 |
|
ssim.b_visualize = 0; |
1940 |
|
plugins[xvid_enc_create.num_plugins].param = &ssim; |
1941 |
|
xvid_enc_create.num_plugins++; |
1942 |
|
} |
1943 |
|
|
1944 |
#if 0 |
#if 0 |
1945 |
if (ARG_DEBUG) { |
if (ARG_DEBUG) { |
1946 |
plugins[xvid_enc_create.num_plugins].func = rawenc_debug; |
plugins[xvid_enc_create.num_plugins].func = rawenc_debug; |
2024 |
fprintf(stderr, "SSE "); |
fprintf(stderr, "SSE "); |
2025 |
if (xvid_gbl_info.cpu_flags & XVID_CPU_SSE2) |
if (xvid_gbl_info.cpu_flags & XVID_CPU_SSE2) |
2026 |
fprintf(stderr, "SSE2 "); |
fprintf(stderr, "SSE2 "); |
2027 |
|
if (xvid_gbl_info.cpu_flags & XVID_CPU_SSE3) |
2028 |
|
fprintf(stderr, "SSE3 "); |
2029 |
|
if (xvid_gbl_info.cpu_flags & XVID_CPU_SSE41) |
2030 |
|
fprintf(stderr, "SSE41 "); |
2031 |
if (xvid_gbl_info.cpu_flags & XVID_CPU_3DNOW) |
if (xvid_gbl_info.cpu_flags & XVID_CPU_3DNOW) |
2032 |
fprintf(stderr, "3DNOW "); |
fprintf(stderr, "3DNOW "); |
2033 |
if (xvid_gbl_info.cpu_flags & XVID_CPU_3DNOWEXT) |
if (xvid_gbl_info.cpu_flags & XVID_CPU_3DNOWEXT) |
2083 |
if (image) { |
if (image) { |
2084 |
xvid_enc_frame.input.plane[0] = image; |
xvid_enc_frame.input.plane[0] = image; |
2085 |
#ifndef READ_PNM |
#ifndef READ_PNM |
|
if (ARG_INPUTTYPE==2) |
|
2086 |
xvid_enc_frame.input.csp = ARG_COLORSPACE; |
xvid_enc_frame.input.csp = ARG_COLORSPACE; |
|
else |
|
|
xvid_enc_frame.input.csp = XVID_CSP_I420; |
|
2087 |
xvid_enc_frame.input.stride[0] = XDIM; |
xvid_enc_frame.input.stride[0] = XDIM; |
2088 |
#else |
#else |
2089 |
xvid_enc_frame.input.csp = XVID_CSP_BGR; |
xvid_enc_frame.input.csp = XVID_CSP_BGR; |