[svn] / trunk / xvidcore / examples / xvid_encraw.c Repository:
ViewVC logotype

Diff of /trunk/xvidcore/examples/xvid_encraw.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2127, Sat Jun 20 17:18:53 2015 UTC revision 2128, Wed Jul 8 17:32:48 2015 UTC
# Line 163  Line 163 
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;
# Line 998  Line 1000 
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                  }                  }
# Line 1031  Line 1036 
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;
# Line 1042  Line 1046 
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;
# Line 1064  Line 1070 
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++)
# Line 1078  Line 1086 
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];
# Line 1229  Line 1258 
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;
# Line 1445  Line 1476 
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
# Line 1462  Line 1493 
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    
# Line 1491  Line 1522 
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];
# Line 1517  Line 1548 
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
# Line 1683  Line 1714 
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) {
# Line 1694  Line 1725 
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                                  }                                  }
# Line 1717  Line 1748 
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
# Line 1778  Line 1809 
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    

Legend:
Removed from v.2127  
changed lines
  Added in v.2128

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4