163 |
int stop_num; |
int stop_num; |
164 |
|
|
165 |
char *outfilename; /* output filename */ |
char *outfilename; /* output filename */ |
166 |
|
char *outavifilename; /* output avi filename */ |
167 |
|
char *outmkvfilename; /* output mkv filename */ |
168 |
char *statsfilename1; /* pass1 statsfile */ |
char *statsfilename1; /* pass1 statsfile */ |
169 |
|
|
170 |
int input_num; |
int input_num; |
1000 |
return (-1); |
return (-1); |
1001 |
} |
} |
1002 |
#ifdef USE_APP_LEVEL_THREADING |
#ifdef USE_APP_LEVEL_THREADING |
1003 |
|
{ |
1004 |
|
int pos; |
1005 |
fseek(in_file, 0, SEEK_END); /* Determine input size */ |
fseek(in_file, 0, SEEK_END); /* Determine input size */ |
1006 |
pos = ftell(in_file); |
pos = ftell(in_file); |
1007 |
ARG_MAXFRAMENR = pos / IMAGE_SIZE(XDIM, YDIM); /* PGM, header size ?? */ |
ARG_MAXFRAMENR = pos / IMAGE_SIZE(XDIM, YDIM); /* PGM, header size ?? */ |
1008 |
|
} |
1009 |
#endif |
#endif |
1010 |
fclose(in_file); |
fclose(in_file); |
1011 |
} |
} |
1036 |
#ifdef USE_APP_LEVEL_THREADING |
#ifdef USE_APP_LEVEL_THREADING |
1037 |
if (ARG_INPUTFILE == NULL || strcmp(ARG_INPUTFILE, "stdin") == 0 || |
if (ARG_INPUTFILE == NULL || strcmp(ARG_INPUTFILE, "stdin") == 0 || |
1038 |
ARG_NUM_APP_THREADS <= 1 || ARG_THREADS != 0 || |
ARG_NUM_APP_THREADS <= 1 || ARG_THREADS != 0 || |
1039 |
ARG_TIMECODEFILE != NULL || ARG_AVIOUTPUTFILE != NULL || |
ARG_TIMECODEFILE != NULL || ARG_INPUTTYPE == 1) /* TODO: PGM input */ |
|
ARG_INPUTTYPE == 1 || ARG_MKVOUTPUTFILE != NULL) /* TODO: PGM input */ |
|
1040 |
#endif /* Spawn just one encoder instance */ |
#endif /* Spawn just one encoder instance */ |
1041 |
{ |
{ |
1042 |
enc_sequence_data_t enc_data; |
enc_sequence_data_t enc_data; |
1046 |
ARG_NUM_APP_THREADS = 1; |
ARG_NUM_APP_THREADS = 1; |
1047 |
|
|
1048 |
enc_data.outfilename = ARG_OUTPUTFILE; |
enc_data.outfilename = ARG_OUTPUTFILE; |
1049 |
|
enc_data.outavifilename = ARG_AVIOUTPUTFILE; |
1050 |
|
enc_data.outmkvfilename = ARG_MKVOUTPUTFILE; |
1051 |
enc_data.statsfilename1 = ARG_PASS1; |
enc_data.statsfilename1 = ARG_PASS1; |
1052 |
enc_data.start_num = ARG_STARTFRAMENR; |
enc_data.start_num = ARG_STARTFRAMENR; |
1053 |
enc_data.stop_num = ARG_MAXFRAMENR; |
enc_data.stop_num = ARG_MAXFRAMENR; |
1070 |
|
|
1071 |
enc_sequence_data_t enc_data[MAX_ENC_INSTANCES]; |
enc_sequence_data_t enc_data[MAX_ENC_INSTANCES]; |
1072 |
char outfile[MAX_ENC_INSTANCES][256]; |
char outfile[MAX_ENC_INSTANCES][256]; |
1073 |
|
char outavifile[MAX_ENC_INSTANCES][256]; |
1074 |
|
char outmkvfile[MAX_ENC_INSTANCES][256]; |
1075 |
char statsfilename[MAX_ENC_INSTANCES][256]; |
char statsfilename[MAX_ENC_INSTANCES][256]; |
1076 |
|
|
1077 |
for (k = 0; k < MAX_ENC_INSTANCES; k++) |
for (k = 0; k < MAX_ENC_INSTANCES; k++) |
1086 |
ARG_THREADS = -1; |
ARG_THREADS = -1; |
1087 |
|
|
1088 |
enc_data[0].outfilename = ARG_OUTPUTFILE; |
enc_data[0].outfilename = ARG_OUTPUTFILE; |
1089 |
|
enc_data[0].outavifilename = ARG_AVIOUTPUTFILE; |
1090 |
|
enc_data[0].outmkvfilename = ARG_MKVOUTPUTFILE; |
1091 |
enc_data[0].statsfilename1 = ARG_PASS1; |
enc_data[0].statsfilename1 = ARG_PASS1; |
1092 |
enc_data[0].start_num = ARG_STARTFRAMENR; |
enc_data[0].start_num = ARG_STARTFRAMENR; |
1093 |
enc_data[0].stop_num = (ARG_MAXFRAMENR-ARG_STARTFRAMENR)/ARG_NUM_APP_THREADS; |
enc_data[0].stop_num = (ARG_MAXFRAMENR-ARG_STARTFRAMENR)/ARG_NUM_APP_THREADS; |
1094 |
|
|
1095 |
for (k = 1; k < ARG_NUM_APP_THREADS; k++) { |
for (k = 1; k < ARG_NUM_APP_THREADS; k++) { |
1096 |
|
if (ARG_OUTPUTFILE) { |
1097 |
sprintf(outfile[k], "%s.%03d", ARG_OUTPUTFILE, k); |
sprintf(outfile[k], "%s.%03d", ARG_OUTPUTFILE, k); |
1098 |
enc_data[k].outfilename = outfile[k]; |
enc_data[k].outfilename = outfile[k]; |
1099 |
|
} |
1100 |
|
else |
1101 |
|
enc_data[k].outfilename = NULL; |
1102 |
|
|
1103 |
|
if (ARG_AVIOUTPUTFILE) { |
1104 |
|
sprintf(outavifile[k], "%.*s_%03d.avi", strlen(ARG_AVIOUTPUTFILE) - 4, ARG_AVIOUTPUTFILE, k); |
1105 |
|
enc_data[k].outavifilename = outavifile[k]; |
1106 |
|
} |
1107 |
|
else |
1108 |
|
enc_data[k].outavifilename = NULL; |
1109 |
|
|
1110 |
|
if (ARG_MKVOUTPUTFILE) { |
1111 |
|
sprintf(outmkvfile[k], "%.*s_%03d.mkv", strlen(ARG_MKVOUTPUTFILE) - 4, ARG_MKVOUTPUTFILE, k); |
1112 |
|
enc_data[k].outmkvfilename = outmkvfile[k]; |
1113 |
|
} |
1114 |
|
else |
1115 |
|
enc_data[k].outmkvfilename = NULL; |
1116 |
|
|
1117 |
if (ARG_PASS1) { |
if (ARG_PASS1) { |
1118 |
sprintf(statsfilename[k], "%s.%03d", ARG_PASS1, k); |
sprintf(statsfilename[k], "%s.%03d", ARG_PASS1, k); |
1119 |
enc_data[k].statsfilename1 = statsfilename[k]; |
enc_data[k].statsfilename1 = statsfilename[k]; |
1258 |
int start_num = h->start_num; |
int start_num = h->start_num; |
1259 |
int stop_num = h->stop_num; |
int stop_num = h->stop_num; |
1260 |
char *outfilename = h->outfilename; |
char *outfilename = h->outfilename; |
1261 |
|
char *outavifilename = h->outavifilename; |
1262 |
|
char *outmkvfilename = h->outmkvfilename; |
1263 |
float *totalPSNR = h->totalPSNR; |
float *totalPSNR = h->totalPSNR; |
1264 |
|
|
1265 |
int input_num; |
int input_num; |
1476 |
} |
} |
1477 |
|
|
1478 |
#ifdef XVID_AVI_OUTPUT |
#ifdef XVID_AVI_OUTPUT |
1479 |
if (ARG_AVIOUTPUTFILE != NULL ) { |
if (outavifilename != NULL ) { |
1480 |
{ |
{ |
1481 |
/* Open the .avi output then close it */ |
/* Open the .avi output then close it */ |
1482 |
/* Resets the file size to 0, which AVIFile doesn't seem to do */ |
/* Resets the file size to 0, which AVIFile doesn't seem to do */ |
1483 |
FILE *scrub; |
FILE *scrub; |
1484 |
if ((scrub = fopen(ARG_AVIOUTPUTFILE, "w+b")) == NULL) { |
if ((scrub = fopen(outavifilename, "w+b")) == NULL) { |
1485 |
fprintf(stderr, "Error opening output file %s\n", ARG_AVIOUTPUTFILE); |
fprintf(stderr, "Error opening output file %s\n", outavifilename); |
1486 |
goto release_all; |
goto release_all; |
1487 |
} |
} |
1488 |
else |
else |
1493 |
myAVIStreamInfo.fccHandler = MAKEFOURCC('x', 'v', 'i', 'd'); |
myAVIStreamInfo.fccHandler = MAKEFOURCC('x', 'v', 'i', 'd'); |
1494 |
myAVIStreamInfo.dwScale = ARG_DWSCALE; |
myAVIStreamInfo.dwScale = ARG_DWSCALE; |
1495 |
myAVIStreamInfo.dwRate = ARG_DWRATE; |
myAVIStreamInfo.dwRate = ARG_DWRATE; |
1496 |
myAVIStreamInfo.dwLength = ARG_MAXFRAMENR; |
myAVIStreamInfo.dwLength = (h->stop_num - h->start_num); |
1497 |
myAVIStreamInfo.dwQuality = 10000; |
myAVIStreamInfo.dwQuality = 10000; |
1498 |
SetRect(&myAVIStreamInfo.rcFrame, 0, 0, XDIM, YDIM); |
SetRect(&myAVIStreamInfo.rcFrame, 0, 0, XDIM, YDIM); |
1499 |
|
|
1500 |
if ((avierr=AVIFileOpen(&myAVIFile, ARG_AVIOUTPUTFILE, OF_CREATE|OF_WRITE, NULL))) { |
if ((avierr=AVIFileOpen(&myAVIFile, outavifilename, OF_CREATE|OF_WRITE, NULL))) { |
1501 |
fprintf(stderr, "AVIFileOpen failed opening output file %s, error code %d\n", ARG_AVIOUTPUTFILE, avierr); |
fprintf(stderr, "AVIFileOpen failed opening output file %s, error code %d\n", outavifilename, avierr); |
1502 |
goto release_all; |
goto release_all; |
1503 |
} |
} |
1504 |
|
|
1522 |
} |
} |
1523 |
#endif |
#endif |
1524 |
#ifdef XVID_MKV_OUTPUT |
#ifdef XVID_MKV_OUTPUT |
1525 |
if (ARG_MKVOUTPUTFILE != NULL) { |
if (outmkvfilename != NULL) { |
1526 |
{ |
{ |
1527 |
/* Open the .mkv output then close it */ |
/* Open the .mkv output then close it */ |
1528 |
/* Just to make sure we can write to it */ |
/* Just to make sure we can write to it */ |
1529 |
FILE *scrub; |
FILE *scrub; |
1530 |
if ((scrub = fopen(ARG_MKVOUTPUTFILE, "w+b")) == NULL) { |
if ((scrub = fopen(outmkvfilename, "w+b")) == NULL) { |
1531 |
fprintf(stderr, "Error opening output file %s\n", ARG_MKVOUTPUTFILE); |
fprintf(stderr, "Error opening output file %s\n", outmkvfilename); |
1532 |
goto release_all; |
goto release_all; |
1533 |
} |
} |
1534 |
else |
else |
1535 |
fclose(scrub); |
fclose(scrub); |
1536 |
} |
} |
1537 |
|
|
1538 |
MKVFileOpen(&myMKVFile, ARG_MKVOUTPUTFILE, OF_CREATE|OF_WRITE, NULL); |
MKVFileOpen(&myMKVFile, outmkvfilename, OF_CREATE|OF_WRITE, NULL); |
1539 |
if (ARG_PAR) { |
if (ARG_PAR) { |
1540 |
myMKVStreamInfo.display_height = YDIM*height_ratios[ARG_PAR]; |
myMKVStreamInfo.display_height = YDIM*height_ratios[ARG_PAR]; |
1541 |
myMKVStreamInfo.display_width = XDIM*width_ratios[ARG_PAR]; |
myMKVStreamInfo.display_width = XDIM*width_ratios[ARG_PAR]; |
1548 |
myMKVStreamInfo.width = XDIM; |
myMKVStreamInfo.width = XDIM; |
1549 |
myMKVStreamInfo.framerate = ARG_DWRATE; |
myMKVStreamInfo.framerate = ARG_DWRATE; |
1550 |
myMKVStreamInfo.framescale = ARG_DWSCALE; |
myMKVStreamInfo.framescale = ARG_DWSCALE; |
1551 |
myMKVStreamInfo.length = ARG_MAXFRAMENR; |
myMKVStreamInfo.length = (h->stop_num - h->start_num); |
1552 |
MKVFileCreateStream(myMKVFile, &myMKVStream, &myMKVStreamInfo); |
MKVFileCreateStream(myMKVFile, &myMKVStream, &myMKVStreamInfo); |
1553 |
} |
} |
1554 |
#endif |
#endif |
1714 |
} |
} |
1715 |
} |
} |
1716 |
else |
else |
1717 |
sprintf(timecode, "%f", ((double)ARG_DWSCALE/ARG_DWRATE)*1000*output_num); |
sprintf(timecode, "%f", ((double)ARG_DWSCALE/ARG_DWRATE)*1000*(output_num-start_num)); |
1718 |
|
|
1719 |
/* Save single files */ |
/* Save single files */ |
1720 |
if (ARG_SAVEINDIVIDUAL) { |
if (ARG_SAVEINDIVIDUAL) { |
1725 |
fclose(out); |
fclose(out); |
1726 |
} |
} |
1727 |
#ifdef XVID_AVI_OUTPUT |
#ifdef XVID_AVI_OUTPUT |
1728 |
if (ARG_AVIOUTPUTFILE && myAVIStream) { |
if (outavifilename && myAVIStream) { |
1729 |
int output_frame; |
int output_frame; |
1730 |
|
|
1731 |
if (time_file == NULL) |
if (time_file == NULL) |
1732 |
output_frame = output_num; |
output_frame = (output_num-start_num); |
1733 |
else { |
else { |
1734 |
output_frame = (int)(atof(timecode)/1000/((double)ARG_DWSCALE/ARG_DWRATE)+.5); |
output_frame = (int)(atof(timecode)/1000/((double)ARG_DWSCALE/ARG_DWRATE)+.5); |
1735 |
} |
} |
1748 |
fwrite(mp4_buffer, 1, m4v_size, out_file); |
fwrite(mp4_buffer, 1, m4v_size, out_file); |
1749 |
} |
} |
1750 |
#ifdef XVID_MKV_OUTPUT |
#ifdef XVID_MKV_OUTPUT |
1751 |
if (ARG_MKVOUTPUTFILE && myMKVStream) { |
if (outmkvfilename && myMKVStream) { |
1752 |
MKVStreamWrite(myMKVStream, atof(timecode), 1, (ARG_PACKED && fakenvop && (m4v_size <= 8)) ? NULL : mp4_buffer, m4v_size, key ? AVIIF_KEYFRAME : 0, NULL, NULL); |
MKVStreamWrite(myMKVStream, atof(timecode), 1, (ARG_PACKED && fakenvop && (m4v_size <= 8)) ? NULL : mp4_buffer, m4v_size, key ? AVIIF_KEYFRAME : 0, NULL, NULL); |
1753 |
} |
} |
1754 |
#endif |
#endif |
1809 |
#endif |
#endif |
1810 |
|
|
1811 |
free_all_memory: |
free_all_memory: |
1812 |
|
if (out_buffer) |
1813 |
free(out_buffer); |
free(out_buffer); |
1814 |
|
if (mp4_buffer) |
1815 |
free(mp4_buffer); |
free(mp4_buffer); |
1816 |
|
if ((in_buffer) && (get_frame == NULL)) |
1817 |
free(in_buffer); |
free(in_buffer); |
1818 |
} |
} |
1819 |
|
|