22 |
* along with this program; if not, write to the Free Software |
* along with this program; if not, write to the Free Software |
23 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
24 |
* |
* |
25 |
* $Id: xvid_encraw.c,v 1.40 2010-03-09 14:56:02 Isibaar Exp $ |
* $Id: xvid_encraw.c,v 1.48 2010-12-30 11:46:17 Isibaar Exp $ |
26 |
* |
* |
27 |
****************************************************************************/ |
****************************************************************************/ |
28 |
|
|
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; |
348 |
int use_assembler = 1; |
int use_assembler = 1; |
349 |
int i; |
int i; |
350 |
|
|
|
#if defined(XVID_AVI_INPUT) |
|
|
PAVIFILE avi_in = NULL; |
|
|
PAVISTREAM avi_in_stream = NULL; |
|
|
PGETFRAME get_frame = NULL; |
|
|
#else |
|
|
#define get_frame NULL |
|
|
#endif |
|
|
#if defined(XVID_AVI_OUTPUT) |
|
|
PAVIFILE myAVIFile = NULL; |
|
|
PAVISTREAM myAVIStream = NULL; |
|
|
BITMAPINFOHEADER myBitmapInfoHeader; |
|
|
#endif |
|
|
#if defined(XVID_AVI_INPUT) || defined(XVID_AVI_OUTPUT) |
|
|
AVIFileInit(); |
|
|
#endif |
|
|
#ifdef XVID_MKV_OUTPUT |
|
|
PMKVFILE myMKVFile=NULL; |
|
|
PMKVSTREAM myMKVStream=NULL; |
|
|
MKVSTREAMINFO myMKVStreamInfo; |
|
|
#endif |
|
|
|
|
351 |
printf("xvid_encraw - raw mpeg4 bitstream encoder "); |
printf("xvid_encraw - raw mpeg4 bitstream encoder "); |
352 |
printf("written by Christoph Lampert\n\n"); |
printf("written by Christoph Lampert\n\n"); |
353 |
|
|
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]); |
485 |
memset(&ZONES[NUM_ZONES], 0, sizeof(zone_t)); |
memset(&ZONES[NUM_ZONES], 0, sizeof(zone_t)); |
486 |
|
|
487 |
ZONES[NUM_ZONES].frame = startframe; |
ZONES[NUM_ZONES].frame = startframe; |
488 |
ZONES[NUM_ZONES].modifier = atof(options)*100; |
ZONES[NUM_ZONES].modifier = (int)(atof(options)*100); |
489 |
if (toupper(c)=='Q') |
if (toupper(c)=='Q') |
490 |
ZONES[NUM_ZONES].mode = XVID_ZONE_QUANT; |
ZONES[NUM_ZONES].mode = XVID_ZONE_QUANT; |
491 |
else if (toupper(c)=='W') |
else if (toupper(c)=='W') |
498 |
if ((frameoptions=strchr(options, ','))!=NULL) { |
if ((frameoptions=strchr(options, ','))!=NULL) { |
499 |
int readchar=0, count; |
int readchar=0, count; |
500 |
frameoptions++; |
frameoptions++; |
501 |
while (readchar<strlen(frameoptions)) { |
while (readchar<(int)strlen(frameoptions)) { |
502 |
if (sscanf(frameoptions+readchar, "%d%n", &(ZONES[NUM_ZONES].bvop_threshold), &count)==1) { |
if (sscanf(frameoptions+readchar, "%d%n", &(ZONES[NUM_ZONES].bvop_threshold), &count)==1) { |
503 |
readchar += count; |
readchar += count; |
504 |
} |
} |
536 |
else { |
else { |
537 |
ZONES[NUM_ZONES].mode = XVID_ZONE_WEIGHT; |
ZONES[NUM_ZONES].mode = XVID_ZONE_WEIGHT; |
538 |
} |
} |
539 |
ZONES[NUM_ZONES].modifier = atof(argv[i+2])*100; |
ZONES[NUM_ZONES].modifier = (int)(atof(argv[i+2])*100); |
540 |
i++; |
i++; |
541 |
ZONES[NUM_ZONES].frame = atoi(argv[i]); |
ZONES[NUM_ZONES].frame = atoi(argv[i]); |
542 |
i++; |
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++; |
565 |
ARG_FRAMERATE = (float) atof(argv[i]); |
ARG_FRAMERATE = (float) atof(argv[i]); |
566 |
exponent = strcspn(argv[i], "."); |
exponent = (int)strcspn(argv[i], "."); |
567 |
if (exponent<strlen(argv[i])) |
if (exponent<(int)strlen(argv[i])) |
568 |
exponent=pow(10.0, (int)(strlen(argv[i])-1-exponent)); |
exponent=(int)pow(10.0, (int)(strlen(argv[i])-1-exponent)); |
569 |
else |
else |
570 |
exponent=1; |
exponent=1; |
571 |
ARG_DWRATE = atof(argv[i])*exponent; |
ARG_DWRATE = (int)(atof(argv[i])*exponent); |
572 |
ARG_DWSCALE = exponent; |
ARG_DWSCALE = exponent; |
573 |
exponent = gcd(ARG_DWRATE, ARG_DWSCALE); |
exponent = gcd(ARG_DWRATE, ARG_DWSCALE); |
574 |
ARG_DWRATE /= exponent; |
ARG_DWRATE /= exponent; |
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]); |
824 |
} |
} |
825 |
|
|
826 |
if (ARG_INPUTFILE != NULL) { |
if (ARG_INPUTFILE != NULL) { |
827 |
#ifdef XVID_AVI_INPUT |
#if defined(XVID_AVI_INPUT) |
828 |
if (strcmp(ARG_INPUTFILE+(strlen(ARG_INPUTFILE)-3), "avs")==0 || |
if (strcmp(ARG_INPUTFILE+(strlen(ARG_INPUTFILE)-3), "avs")==0 || |
829 |
strcmp(ARG_INPUTFILE+(strlen(ARG_INPUTFILE)-3), "avi")==0 || |
strcmp(ARG_INPUTFILE+(strlen(ARG_INPUTFILE)-3), "avi")==0 || |
830 |
ARG_INPUTTYPE==2) |
ARG_INPUTTYPE==2) |
831 |
{ |
{ |
832 |
|
PAVIFILE avi_in = NULL; |
833 |
|
PAVISTREAM avi_in_stream = NULL; |
834 |
|
PGETFRAME get_frame = NULL; |
835 |
|
BITMAPINFOHEADER myBitmapInfoHeader; |
836 |
AVISTREAMINFO avi_info; |
AVISTREAMINFO avi_info; |
|
|
|
837 |
FILE *avi_fp = fopen(ARG_INPUTFILE, "rb"); |
FILE *avi_fp = fopen(ARG_INPUTFILE, "rb"); |
838 |
|
|
839 |
|
AVIFileInit(); |
840 |
|
|
841 |
if (avi_fp == NULL) { |
if (avi_fp == NULL) { |
842 |
fprintf(stderr, "Couldn't open file '%s'!\n", ARG_INPUTFILE); |
fprintf(stderr, "Couldn't open file '%s'!\n", ARG_INPUTFILE); |
843 |
return (-1); |
return (-1); |
900 |
temp = (unsigned char*)AVIStreamGetFrame(get_frame, 0); |
temp = (unsigned char*)AVIStreamGetFrame(get_frame, 0); |
901 |
if (temp != NULL) { |
if (temp != NULL) { |
902 |
int i; |
int i; |
903 |
for (i = 0; i < ((DWORD*)temp)[0]; i++) { |
for (i = 0; i < (int)((DWORD*)temp)[0]; i++) { |
904 |
fprintf(stderr, "%2d ", temp[i]); |
fprintf(stderr, "%2d ", temp[i]); |
905 |
} |
} |
906 |
fprintf(stderr, "\n"); |
fprintf(stderr, "\n"); |
916 |
if (ARG_MAXFRAMENR<0) |
if (ARG_MAXFRAMENR<0) |
917 |
ARG_MAXFRAMENR = avi_info.dwLength-ARG_STARTFRAMENR; |
ARG_MAXFRAMENR = avi_info.dwLength-ARG_STARTFRAMENR; |
918 |
else |
else |
919 |
ARG_MAXFRAMENR = min(ARG_MAXFRAMENR, avi_info.dwLength-ARG_STARTFRAMENR); |
ARG_MAXFRAMENR = min(ARG_MAXFRAMENR, (int)(avi_info.dwLength-ARG_STARTFRAMENR)); |
920 |
|
|
921 |
XDIM = avi_info.rcFrame.right - avi_info.rcFrame.left; |
XDIM = avi_info.rcFrame.right - avi_info.rcFrame.left; |
922 |
YDIM = avi_info.rcFrame.bottom - avi_info.rcFrame.top; |
YDIM = avi_info.rcFrame.bottom - avi_info.rcFrame.top; |
930 |
|
|
931 |
if (get_frame) AVIStreamGetFrameClose(get_frame); |
if (get_frame) AVIStreamGetFrameClose(get_frame); |
932 |
if (avi_in_stream) AVIStreamRelease(avi_in_stream); |
if (avi_in_stream) AVIStreamRelease(avi_in_stream); |
933 |
|
AVIFileExit(); |
934 |
} |
} |
935 |
else |
else |
936 |
#endif |
#endif |
963 |
fprintf(stderr, "Parameter conflict: Do not specify both -bitrate and -size\n"); |
fprintf(stderr, "Parameter conflict: Do not specify both -bitrate and -size\n"); |
964 |
goto release_all; |
goto release_all; |
965 |
} else |
} else |
966 |
ARG_BITRATE = ((ARG_TARGETSIZE * 8) / (ARG_MAXFRAMENR / ARG_FRAMERATE)) * 1024; |
ARG_BITRATE = (int)(((ARG_TARGETSIZE * 8) / (ARG_MAXFRAMENR / ARG_FRAMERATE)) * 1024); |
967 |
} |
} |
968 |
|
|
969 |
/* Set constant quant to default if no bitrate given for single pass */ |
/* Set constant quant to default if no bitrate given for single pass */ |
1034 |
sprintf(statsfilename[k], "%s.%03d", ARG_PASS1, k); |
sprintf(statsfilename[k], "%s.%03d", ARG_PASS1, k); |
1035 |
enc_data[k].statsfilename1 = statsfilename[k]; |
enc_data[k].statsfilename1 = statsfilename[k]; |
1036 |
} |
} |
1037 |
enc_data[k].start_num = k*((ARG_MAXFRAMENR-ARG_STARTFRAMENR)/ARG_NUM_APP_THREADS); |
enc_data[k].start_num = (k*(ARG_MAXFRAMENR-ARG_STARTFRAMENR))/ARG_NUM_APP_THREADS; |
1038 |
enc_data[k].stop_num = ((k+1)*(ARG_MAXFRAMENR-ARG_STARTFRAMENR))/ARG_NUM_APP_THREADS; |
enc_data[k].stop_num = ((k+1)*(ARG_MAXFRAMENR-ARG_STARTFRAMENR))/ARG_NUM_APP_THREADS; |
1039 |
} |
} |
1040 |
|
|
1159 |
|
|
1160 |
release_all: |
release_all: |
1161 |
|
|
|
#if defined(XVID_AVI_INPUT) || defined(XVID_AVI_OUTPUT) |
|
|
AVIFileExit(); |
|
|
#endif |
|
|
|
|
1162 |
return (0); |
return (0); |
|
|
|
1163 |
} |
} |
1164 |
|
|
1165 |
/***************************************************************************** |
/***************************************************************************** |
1202 |
|
|
1203 |
char filename[256]; |
char filename[256]; |
1204 |
|
|
1205 |
|
#ifdef XVID_MKV_OUTPUT |
1206 |
|
PMKVFILE myMKVFile = NULL; |
1207 |
|
PMKVSTREAM myMKVStream = NULL; |
1208 |
|
MKVSTREAMINFO myMKVStreamInfo; |
1209 |
|
#endif |
1210 |
#if defined(XVID_AVI_INPUT) |
#if defined(XVID_AVI_INPUT) |
1211 |
PAVIFILE avi_in = NULL; |
PAVIFILE avi_in = NULL; |
1212 |
PAVISTREAM avi_in_stream = NULL; |
PAVISTREAM avi_in_stream = NULL; |
1213 |
PGETFRAME get_frame = NULL; |
PGETFRAME get_frame = NULL; |
1214 |
|
BITMAPINFOHEADER myBitmapInfoHeader; |
1215 |
#else |
#else |
1216 |
#define get_frame NULL |
#define get_frame NULL |
1217 |
#endif |
#endif |
1220 |
PAVIFILE myAVIFile=NULL; |
PAVIFILE myAVIFile=NULL; |
1221 |
PAVISTREAM myAVIStream=NULL; |
PAVISTREAM myAVIStream=NULL; |
1222 |
AVISTREAMINFO myAVIStreamInfo; |
AVISTREAMINFO myAVIStreamInfo; |
1223 |
BITMAPINFOHEADER myBitmapInfoHeader; |
#endif |
1224 |
|
#if defined(XVID_AVI_INPUT) || defined(XVID_AVI_OUTPUT) |
1225 |
|
if (ARG_NUM_APP_THREADS > 1) |
1226 |
|
CoInitializeEx(0, COINIT_MULTITHREADED); |
1227 |
|
AVIFileInit(); |
1228 |
#endif |
#endif |
1229 |
|
|
1230 |
if (ARG_INPUTFILE == NULL || strcmp(ARG_INPUTFILE, "stdin") == 0) { |
if (ARG_INPUTFILE == NULL || strcmp(ARG_INPUTFILE, "stdin") == 0) { |
1238 |
AVISTREAMINFO avi_info; |
AVISTREAMINFO avi_info; |
1239 |
FILE *avi_fp = fopen(ARG_INPUTFILE, "rb"); |
FILE *avi_fp = fopen(ARG_INPUTFILE, "rb"); |
1240 |
|
|
|
if (ARG_NUM_APP_THREADS > 1) |
|
|
CoInitializeEx(0, COINIT_MULTITHREADED); |
|
|
|
|
1241 |
if (avi_fp == NULL) { |
if (avi_fp == NULL) { |
1242 |
fprintf(stderr, "Couldn't open file '%s'!\n", ARG_INPUTFILE); |
fprintf(stderr, "Couldn't open file '%s'!\n", ARG_INPUTFILE); |
1243 |
return; |
return; |
1300 |
temp = (unsigned char*)AVIStreamGetFrame(get_frame, 0); |
temp = (unsigned char*)AVIStreamGetFrame(get_frame, 0); |
1301 |
if (temp != NULL) { |
if (temp != NULL) { |
1302 |
int i; |
int i; |
1303 |
for (i = 0; i < ((DWORD*)temp)[0]; i++) { |
for (i = 0; i < (int)((DWORD*)temp)[0]; i++) { |
1304 |
fprintf(stderr, "%2d ", temp[i]); |
fprintf(stderr, "%2d ", temp[i]); |
1305 |
} |
} |
1306 |
fprintf(stderr, "\n"); |
fprintf(stderr, "\n"); |
1527 |
* Encode and decode this frame |
* Encode and decode this frame |
1528 |
****************************************************************************/ |
****************************************************************************/ |
1529 |
|
|
1530 |
if ((input_num+start_num) >= (unsigned int)(stop_num-1) && ARG_MAXBFRAMES) { |
if ((unsigned int)(input_num+start_num) >= (unsigned int)(stop_num-1) && ARG_MAXBFRAMES) { |
1531 |
stats_type = XVID_TYPE_PVOP; |
stats_type = XVID_TYPE_PVOP; |
1532 |
} |
} |
1533 |
else |
else |
1721 |
if (myMKVStream) MKVStreamRelease(myMKVStream); |
if (myMKVStream) MKVStreamRelease(myMKVStream); |
1722 |
if (myMKVFile) MKVFileRelease(myMKVFile); |
if (myMKVFile) MKVFileRelease(myMKVFile); |
1723 |
#endif |
#endif |
1724 |
|
#if defined(XVID_AVI_INPUT) || defined(XVID_AVI_OUTPUT) |
1725 |
|
AVIFileExit(); |
1726 |
|
#endif |
1727 |
|
|
1728 |
free_all_memory: |
free_all_memory: |
1729 |
free(out_buffer); |
free(out_buffer); |
1865 |
fprintf(stderr, "-odegrade integer : max overflow degradation (5)\n"); |
fprintf(stderr, "-odegrade integer : max overflow degradation (5)\n"); |
1866 |
fprintf(stderr, "-chigh integer : high bitrate scenes degradation (0)\n"); |
fprintf(stderr, "-chigh integer : high bitrate scenes degradation (0)\n"); |
1867 |
fprintf(stderr, "-clow integer : low bitrate scenes improvement (0)\n"); |
fprintf(stderr, "-clow integer : low bitrate scenes improvement (0)\n"); |
1868 |
fprintf(stderr, "-overhead integer : container frame overhead (24)\n"); |
fprintf(stderr, "-overhead integer : container frame overhead (0)\n"); |
1869 |
fprintf(stderr, "-vbvsize integer : use vbv buffer size\n"); |
fprintf(stderr, "-vbvsize integer : use vbv buffer size\n"); |
1870 |
fprintf(stderr, "-vbvmax integer : vbv max bitrate\n"); |
fprintf(stderr, "-vbvmax integer : vbv max bitrate\n"); |
1871 |
fprintf(stderr, "-vbvpeak integer : vbv peak bitrate over 1 second\n"); |
fprintf(stderr, "-vbvpeak integer : vbv peak bitrate over 1 second\n"); |
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"); |
1931 |
int bytes, xsize, ysize, depth; |
int bytes, xsize, ysize, depth; |
1932 |
char dummy[2]; |
char dummy[2]; |
1933 |
|
|
1934 |
bytes = fread(dummy, 1, 2, handle); |
bytes = (int) fread(dummy, 1, 2, handle); |
1935 |
|
|
1936 |
if ((bytes < 2) || (dummy[0] != 'P') || (dummy[1] != '5')) |
if ((bytes < 2) || (dummy[0] != 'P') || (dummy[1] != '5')) |
1937 |
return (1); |
return (1); |
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 */ |
2591 |
|
|
2592 |
ZONES[NUM_ZONES].frame = 0; |
ZONES[NUM_ZONES].frame = 0; |
2593 |
ZONES[NUM_ZONES].mode = XVID_ZONE_QUANT; |
ZONES[NUM_ZONES].mode = XVID_ZONE_QUANT; |
2594 |
ZONES[NUM_ZONES].modifier = ARG_CQ; |
ZONES[NUM_ZONES].modifier = (int)ARG_CQ; |
2595 |
ZONES[NUM_ZONES].type = XVID_TYPE_AUTO; |
ZONES[NUM_ZONES].type = XVID_TYPE_AUTO; |
2596 |
ZONES[NUM_ZONES].greyscale = 0; |
ZONES[NUM_ZONES].greyscale = 0; |
2597 |
ZONES[NUM_ZONES].chroma_opt = 0; |
ZONES[NUM_ZONES].chroma_opt = 0; |
2607 |
for(i = 0; i < NUM_ZONES; i++) |
for(i = 0; i < NUM_ZONES; i++) |
2608 |
if (ZONES[i].mode == XVID_ZONE_WEIGHT) { |
if (ZONES[i].mode == XVID_ZONE_WEIGHT) { |
2609 |
ZONES[i].mode = XVID_ZONE_QUANT; |
ZONES[i].mode = XVID_ZONE_QUANT; |
2610 |
ZONES[i].modifier = (100*ARG_CQ) / ZONES[i].modifier; |
ZONES[i].modifier = (int) ((100*ARG_CQ) / ZONES[i].modifier); |
2611 |
} |
} |
2612 |
} |
} |
2613 |
|
|
2676 |
int i; |
int i; |
2677 |
char* userdata; |
char* userdata; |
2678 |
|
|
2679 |
for (i=0; i <= (bufsize-sizeof(userdata_start_code)); i++) { |
for (i=0; i <= (int)(bufsize-sizeof(userdata_start_code)); i++) { |
2680 |
if (memcmp((void*)userdata_start_code, (void*)(buf+i), strlen(userdata_start_code))==0) { |
if (memcmp((void*)userdata_start_code, (void*)(buf+i), strlen(userdata_start_code))==0) { |
2681 |
if ((userdata = strstr(buf+i+4, "DivX"))!=NULL) { |
if ((userdata = strstr(buf+i+4, "DivX"))!=NULL) { |
2682 |
userdata[strlen(userdata)-1] = '\0'; |
userdata[strlen(userdata)-1] = '\0'; |