[svn] / branches / release-1_3-branch / xvidcore / examples / xvid_encraw.c Repository:
ViewVC logotype

Diff of /branches/release-1_3-branch/xvidcore/examples/xvid_encraw.c

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

trunk/xvidcore/examples/xvid_encraw.c revision 1886, Thu Apr 1 12:16:48 2010 UTC branches/release-1_3-branch/xvidcore/examples/xvid_encraw.c revision 2083, Tue Apr 8 20:20:17 2014 UTC
# Line 6  Line 6 
6   *  Copyright(C) 2002-2003 Christoph Lampert <gruel@web.de>   *  Copyright(C) 2002-2003 Christoph Lampert <gruel@web.de>
7   *               2002-2003 Edouard Gomez <ed.gomez@free.fr>   *               2002-2003 Edouard Gomez <ed.gomez@free.fr>
8   *               2003      Peter Ross <pross@xvid.org>   *               2003      Peter Ross <pross@xvid.org>
9   *               2003-2010 Michael Militzer <isibaar@xvid.org>   *               2003-2014 Michael Militzer <isibaar@xvid.org>
10   *   *
11   *  This program is free software; you can redistribute it and/or modify   *  This program is free software; you can redistribute it and/or modify
12   *  it under the terms of the GNU General Public License as published by   *  it under the terms of the GNU General Public License as published by
# Line 22  Line 22 
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.42 2010-04-01 12:16:48 Isibaar Exp $   * $Id$
26   *   *
27   ****************************************************************************/   ****************************************************************************/
28    
# Line 40  Line 40 
40   ************************************************************************/   ************************************************************************/
41    
42  #include <stdio.h>  #include <stdio.h>
 //#include <io.h>  
43  #include <stdlib.h>  #include <stdlib.h>
44  #include <string.h>  #include <string.h>
45  #include <math.h>  #include <math.h>
46    #include <ctype.h>
47  #ifndef WIN32  #ifndef WIN32
48  #include <sys/time.h>  #include <sys/time.h>
49  #else  #else
# Line 126  Line 126 
126    
127  #define MAX_ZONES   64  #define MAX_ZONES   64
128  #define MAX_ENC_INSTANCES 4  #define MAX_ENC_INSTANCES 4
129    #define MAX_XDIM 4096
130    #define MAX_YDIM 4096
131  #define DEFAULT_QUANT 400  #define DEFAULT_QUANT 400
132    #define DEFAULT_BITRATE 700000 /* bitrate expressed in bps, not kbps */
133    #define DEFAULT_INTERLACING 1  /* 1:BFF, 2:TFF */
134    #define DEFAULT_SSIM 2
135    #define DEFAULT_PROGRESS 10    /* show progress every 10 frames by default */
136    
137  typedef struct  typedef struct
138  {  {
# Line 187  Line 193 
193    
194  static  int ARG_NUM_APP_THREADS = 1;  static  int ARG_NUM_APP_THREADS = 1;
195  static  int ARG_CPU_FLAGS = 0;  static  int ARG_CPU_FLAGS = 0;
 static  int ARG_STATS = 0;  
196  static  int ARG_SSIM = -1;  static  int ARG_SSIM = -1;
197  static  char* ARG_SSIM_PATH = NULL;  static  char* ARG_SSIM_PATH = NULL;
198  static  int ARG_DUMP = 0;  static  int ARG_DUMP = 0;
# Line 199  Line 204 
204  static  char *ARG_PASS2 = 0;  static  char *ARG_PASS2 = 0;
205  //static int ARG_QUALITY = ME_ELEMENTS - 1;  //static int ARG_QUALITY = ME_ELEMENTS - 1;
206  static  int ARG_QUALITY = 6;  static  int ARG_QUALITY = 6;
207  static  float ARG_FRAMERATE = 25.00f;  static  float ARG_FRAMERATE = 0.f;
208  static  int ARG_DWRATE = 25;  static  int ARG_DWRATE = 25;
209  static  int ARG_DWSCALE = 1;  static  int ARG_DWSCALE = 1;
210  static  int ARG_MAXFRAMENR = ABS_MAXFRAMENR;  static  int ARG_MAXFRAMENR = ABS_MAXFRAMENR;
# Line 218  Line 223 
223  static  int ARG_BQRATIO = 150;  static  int ARG_BQRATIO = 150;
224  static  int ARG_BQOFFSET = 100;  static  int ARG_BQOFFSET = 100;
225  static  int ARG_MAXBFRAMES = 2;  static  int ARG_MAXBFRAMES = 2;
 static  int ARG_PACKED = 1;  
226  static  int ARG_DEBUG = 0;  static  int ARG_DEBUG = 0;
 static  int ARG_VOPDEBUG = 0;  
 static  int ARG_TRELLIS = 1;  
227  static  int ARG_QTYPE = 0;  static  int ARG_QTYPE = 0;
228  static  int ARG_QMATRIX = 0;  static  int ARG_QMATRIX = 0;
 static  int ARG_GMC = 0;  
229  static  int ARG_INTERLACING = 0;  static  int ARG_INTERLACING = 0;
 static  int ARG_QPEL = 0;  
 static  int ARG_TURBO = 0;  
230  static  int ARG_VHQMODE = 1;  static  int ARG_VHQMODE = 1;
231  static  int ARG_BVHQ = 0;  static  int ARG_QMETRIC = 0;
 static  int ARG_CLOSED_GOP = 1;  
 static  int ARG_CHROMAME = 1;  
232  static  int ARG_PAR = 1;  static  int ARG_PAR = 1;
233  static  int ARG_PARHEIGHT;  static  int ARG_PARHEIGHT;
234  static  int ARG_PARWIDTH;  static  int ARG_PARWIDTH;
# Line 255  Line 252 
252  static  int ARG_VBVMAXRATE = 0;  static  int ARG_VBVMAXRATE = 0;
253  static  int ARG_VBVPEAKRATE = 0;  static  int ARG_VBVPEAKRATE = 0;
254  static  int ARG_THREADS = 0;  static  int ARG_THREADS = 0;
255  static  int ARG_VFR = 0;  static  int ARG_SLICES = 1;
256  static  int ARG_PROGRESS = 0;  static  int ARG_PROGRESS = 0;
257  static  int ARG_COLORSPACE = XVID_CSP_YV12;  static  int ARG_COLORSPACE = XVID_CSP_YV12;
258          /* the path where to save output */          /* the path where to save output */
259  static char filepath[256] = "./";  static char filepath[256] = "./";
260    
261    /* on/off options */
262    static  int ARG_USE_ASSEMBLER = 1;
263    static  int ARG_TURBO         = 0;
264    static  int ARG_BVHQ          = 0;
265    static  int ARG_QPEL          = 0;
266    static  int ARG_GMC           = 0;
267    static  int ARG_PACKED        = 1;
268    static  int ARG_CLOSED_GOP    = 1;
269    static  int ARG_STATS         = 0;
270    static  int ARG_PSNRHVSM      = 0;
271    static  int ARG_VOPDEBUG      = 0;
272    static  int ARG_CHROMAME      = 1;
273    static  int ARG_TRELLIS       = 1;
274    
275  static  unsigned char qmatrix_intra[64];  static  unsigned char qmatrix_intra[64];
276  static  unsigned char qmatrix_inter[64];  static  unsigned char qmatrix_inter[64];
277    
# Line 342  Line 353 
353    
354          int input_num = 0;          int input_num = 0;
355          int totalsize = 0;          int totalsize = 0;
356          int use_assembler = 1;          int use_assembler = ARG_USE_ASSEMBLER;
357          int i;          int i;
358    
359          printf("xvid_encraw - raw mpeg4 bitstream encoder ");          printf("xvid_encraw - raw mpeg4 bitstream encoder ");
# Line 350  Line 361 
361    
362          /* Is there a dumb Xvid coder ? */          /* Is there a dumb Xvid coder ? */
363          if(ME_ELEMENTS != VOP_ELEMENTS) {          if(ME_ELEMENTS != VOP_ELEMENTS) {
364                  fprintf(stderr, "Presets' arrays should have the same number of elements -- Please fill a bug to xvid-devel@xvid.org\n");                  fprintf(stderr, "Presets' arrays should have the same number of elements -- Please file a bug to xvid-devel@xvid.org\n");
365                  return(-1);                  return(-1);
366          }          }
367    
# Line 388  Line 399 
399                                  ARG_BITRATE = atoi(argv[i+1]);                                  ARG_BITRATE = atoi(argv[i+1]);
400                          if (ARG_BITRATE) {                          if (ARG_BITRATE) {
401                                  i++;                                  i++;
402                                  if (ARG_BITRATE <= 10000)                                  if (ARG_BITRATE <= 20000)
403                                          /* if given parameter is <= 10000, assume it means kbps */                                          /* if given parameter is <= 20000, assume it means kbps */
404                                          ARG_BITRATE *= 1000;                                          ARG_BITRATE *= 1000;
405                          }                          }
406                          else                          else
407                                  ARG_BITRATE = 700000;                                  ARG_BITRATE = DEFAULT_BITRATE;
408                  } else if (strcmp("-size", argv[i]) == 0 && i < argc - 1) {                  } else if (strcmp("-size", argv[i]) == 0 && i < argc - 1) {
409                          i++;                          i++;
410                          ARG_TARGETSIZE = atoi(argv[i]);                          ARG_TARGETSIZE = atoi(argv[i]);
# Line 442  Line 453 
453                          ARG_PACKED = 2;                          ARG_PACKED = 2;
454                  } else if (strcmp("-nochromame", argv[i]) == 0) {                  } else if (strcmp("-nochromame", argv[i]) == 0) {
455                          ARG_CHROMAME = 0;                          ARG_CHROMAME = 0;
456                    } else if (strcmp("-chromame", argv[i]) == 0) {
457                            ARG_CHROMAME = 1;
458                  } else if (strcmp("-threads", argv[i]) == 0 && i < argc -1) {                  } else if (strcmp("-threads", argv[i]) == 0 && i < argc -1) {
459                          i++;                          i++;
460                          ARG_THREADS = atoi(argv[i]);                          ARG_THREADS = atoi(argv[i]);
461                    } else if (strcmp("-slices", argv[i]) == 0 && i < argc -1) {
462                            i++;
463                            ARG_SLICES = atoi(argv[i]);
464                  } else if (strcmp("-bquant_ratio", argv[i]) == 0 && i < argc - 1) {                  } else if (strcmp("-bquant_ratio", argv[i]) == 0 && i < argc - 1) {
465                          i++;                          i++;
466                          ARG_BQRATIO = atoi(argv[i]);                          ARG_BQRATIO = atoi(argv[i]);
# Line 479  Line 495 
495                                  memset(&ZONES[NUM_ZONES], 0, sizeof(zone_t));                                  memset(&ZONES[NUM_ZONES], 0, sizeof(zone_t));
496    
497                                  ZONES[NUM_ZONES].frame = startframe;                                  ZONES[NUM_ZONES].frame = startframe;
498                                  ZONES[NUM_ZONES].modifier = atof(options)*100;                                  ZONES[NUM_ZONES].modifier = (int)(atof(options)*100);
499                                  if (toupper(c)=='Q')                                  if (toupper(c)=='Q')
500                                          ZONES[NUM_ZONES].mode = XVID_ZONE_QUANT;                                          ZONES[NUM_ZONES].mode = XVID_ZONE_QUANT;
501                                  else if (toupper(c)=='W')                                  else if (toupper(c)=='W')
# Line 492  Line 508 
508                                  if ((frameoptions=strchr(options, ','))!=NULL) {                                  if ((frameoptions=strchr(options, ','))!=NULL) {
509                                          int readchar=0, count;                                          int readchar=0, count;
510                                          frameoptions++;                                          frameoptions++;
511                                          while (readchar<strlen(frameoptions)) {                                          while (readchar<(int)strlen(frameoptions)) {
512                                                  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) {
513                                                          readchar += count;                                                          readchar += count;
514                                                  }                                                  }
# Line 530  Line 546 
546                          else {                          else {
547                                  ZONES[NUM_ZONES].mode = XVID_ZONE_WEIGHT;                                  ZONES[NUM_ZONES].mode = XVID_ZONE_WEIGHT;
548                          }                          }
549                          ZONES[NUM_ZONES].modifier = atof(argv[i+2])*100;                          ZONES[NUM_ZONES].modifier = (int)(atof(argv[i+2])*100);
550                          i++;                          i++;
551              ZONES[NUM_ZONES].frame = atoi(argv[i]);              ZONES[NUM_ZONES].frame = atoi(argv[i]);
552                          i++;                          i++;
# Line 550  Line 566 
566                  } else if (strcmp("-vhqmode", argv[i]) == 0 && i < argc - 1) {                  } else if (strcmp("-vhqmode", argv[i]) == 0 && i < argc - 1) {
567                          i++;                          i++;
568                          ARG_VHQMODE = atoi(argv[i]);                          ARG_VHQMODE = atoi(argv[i]);
569                    } else if (strcmp("-metric", argv[i]) == 0 && i < argc - 1) {
570                            i++;
571                            ARG_QMETRIC = atoi(argv[i]);
572                  } else if (strcmp("-framerate", argv[i]) == 0 && i < argc - 1) {                  } else if (strcmp("-framerate", argv[i]) == 0 && i < argc - 1) {
573                          int exponent;                          int exponent;
574                          i++;                          i++;
575                          ARG_FRAMERATE = (float) atof(argv[i]);                          ARG_FRAMERATE = (float) atof(argv[i]);
576                          exponent = strcspn(argv[i], ".");                          exponent = (int) strcspn(argv[i], ".");
577                          if (exponent<strlen(argv[i]))                          if (exponent<(int)strlen(argv[i]))
578                                  exponent=pow(10.0, (int)(strlen(argv[i])-1-exponent));                                  exponent=(int)pow(10.0, (int)(strlen(argv[i])-1-exponent));
579                          else                          else
580                                  exponent=1;                                  exponent=1;
581                          ARG_DWRATE = atof(argv[i])*exponent;                          ARG_DWRATE = (int)(atof(argv[i])*exponent);
582                          ARG_DWSCALE = exponent;                          ARG_DWSCALE = exponent;
583                          exponent = gcd(ARG_DWRATE, ARG_DWSCALE);                          exponent = gcd(ARG_DWRATE, ARG_DWSCALE);
584                          ARG_DWRATE /= exponent;                          ARG_DWRATE /= exponent;
# Line 572  Line 591 
591                          ARG_INPUTFILE = argv[i];                          ARG_INPUTFILE = argv[i];
592                  } else if (strcmp("-stats", argv[i]) == 0) {                  } else if (strcmp("-stats", argv[i]) == 0) {
593                          ARG_STATS = 1;                          ARG_STATS = 1;
594                    } else if (strcmp("-nostats", argv[i]) == 0) {
595                            ARG_STATS = 0;
596                  } else if (strcmp("-ssim", argv[i]) == 0) {                  } else if (strcmp("-ssim", argv[i]) == 0) {
597                          ARG_SSIM = 2;                          ARG_SSIM = DEFAULT_SSIM;
598                          if ((i < argc - 1) && (*argv[i+1] != '-')) {                          if ((i < argc - 1) && (*argv[i+1] != '-')) {
599                                  i++;                                  i++;
600                                  ARG_SSIM = atoi(argv[i]);                                  ARG_SSIM = atoi(argv[i]);
601                          }                          }
602                    } else if (strcmp("-psnrhvsm", argv[i]) == 0) {
603                            ARG_PSNRHVSM = 1;
604                    } else if (strcmp("-nopsnrhvsm", argv[i]) == 0) {
605                            ARG_PSNRHVSM = 0;
606                  } else if (strcmp("-ssim_file", argv[i]) == 0 && i < argc -1) {                  } else if (strcmp("-ssim_file", argv[i]) == 0 && i < argc -1) {
607                          i++;                          i++;
608                          ARG_SSIM_PATH = argv[i];                          ARG_SSIM_PATH = argv[i];
# Line 668  Line 693 
693  #endif  #endif
694                  } else if (strcmp("-vop_debug", argv[i]) == 0) {                  } else if (strcmp("-vop_debug", argv[i]) == 0) {
695                          ARG_VOPDEBUG = 1;                          ARG_VOPDEBUG = 1;
696                    } else if (strcmp("-novop_debug", argv[i]) == 0) {
697                            ARG_VOPDEBUG = 0;
698                    } else if (strcmp("-trellis", argv[i]) == 0) {
699                            ARG_TRELLIS = 1;
700                  } else if (strcmp("-notrellis", argv[i]) == 0) {                  } else if (strcmp("-notrellis", argv[i]) == 0) {
701                          ARG_TRELLIS = 0;                          ARG_TRELLIS = 0;
702                  } else if (strcmp("-bvhq", argv[i]) == 0) {                  } else if (strcmp("-bvhq", argv[i]) == 0) {
703                          ARG_BVHQ = 1;                          ARG_BVHQ = 1;
704                    } else if (strcmp("-nobvhq", argv[i]) == 0) {
705                            ARG_BVHQ = 0;
706                  } else if (strcmp("-qpel", argv[i]) == 0) {                  } else if (strcmp("-qpel", argv[i]) == 0) {
707                          ARG_QPEL = 1;                          ARG_QPEL = 1;
708                    } else if (strcmp("-noqpel", argv[i]) == 0) {
709                            ARG_QPEL = 0;
710                  } else if (strcmp("-turbo", argv[i]) == 0) {                  } else if (strcmp("-turbo", argv[i]) == 0) {
711                          ARG_TURBO = 1;                          ARG_TURBO = 1;
712                    } else if (strcmp("-noturbo", argv[i]) == 0) {
713                            ARG_TURBO = 0;
714                  } else if (strcmp("-gmc", argv[i]) == 0) {                  } else if (strcmp("-gmc", argv[i]) == 0) {
715                          ARG_GMC = 1;                          ARG_GMC = 1;
716                    } else if (strcmp("-nogmc", argv[i]) == 0) {
717                            ARG_GMC = 0;
718                  } else if (strcmp("-interlaced", argv[i]) == 0) {                  } else if (strcmp("-interlaced", argv[i]) == 0) {
719                          if ((i < argc - 1) && (*argv[i+1] != '-')) {                          if ((i < argc - 1) && (*argv[i+1] != '-')) {
720                                  i++;                                  i++;
721                                  ARG_INTERLACING = atoi(argv[i]);                                  ARG_INTERLACING = atoi(argv[i]);
722                          } else {                          } else {
723                                  ARG_INTERLACING = 1;                                  ARG_INTERLACING = DEFAULT_INTERLACING;
724                          }                          }
725                  } else if (strcmp("-noclosed_gop", argv[i]) == 0) {                  } else if (strcmp("-noclosed_gop", argv[i]) == 0) {
726                          ARG_CLOSED_GOP = 0;                          ARG_CLOSED_GOP = 0;
# Line 697  Line 734 
734                          ARG_VBVMAXRATE = atoi(argv[i]);                          ARG_VBVMAXRATE = atoi(argv[i]);
735                  } else if (strcmp("-vbvpeak", argv[i]) == 0 && i < argc -1) {                  } else if (strcmp("-vbvpeak", argv[i]) == 0 && i < argc -1) {
736                          i++;                          i++;
737                          ARG_VBVPEAKRATE = atoi(argv[i])*3;                          ARG_VBVPEAKRATE = atoi(argv[i]);
738                  } else if (strcmp("-reaction", argv[i]) == 0 && i < argc -1) {                  } else if (strcmp("-reaction", argv[i]) == 0 && i < argc -1) {
739                          i++;                          i++;
740                          ARG_REACTION = atoi(argv[i]);                          ARG_REACTION = atoi(argv[i]);
# Line 741  Line 778 
778                          if (ARG_PROGRESS > 0)                          if (ARG_PROGRESS > 0)
779                                  i++;                                  i++;
780                          else                          else
781                                  ARG_PROGRESS = 10;                                  ARG_PROGRESS = DEFAULT_PROGRESS;
782                  } else if (strcmp("-help", argv[i])) {                  } else if (strcmp("-help", argv[i]) == 0) {
783                        if (i < argc - 1 && strcmp("zones", argv[i+1]) == 0) {
784                                    fprintf(stderr, "Zones options\n\
785    NB: You can define up to %d zones using the -zones option as described below.\n\
786    \n\
787     -zones start,mode,value[,options][/start,mode,value[,options]]...\n\
788    \n\
789     Parameters of a zone use the comma (,) as a delimiter. Multiple zones are\n\
790     separated by a slash (/). The end of each zone is defined by either the start\n\
791     of the following zone or the last frame of the input file.\n\
792    \n\
793     start     : start frame of the zone\n\
794     mode      : weight zone = w, quantizer zone = q\n\
795     value     : depending on mode either the zone's weight or quantizer\n\
796     options   : enable certain encoder features for the zone. Each feature is\n\
797                 represented by a single letter. An integer number stands for\n\
798                 b-frame sensitivity. To enable multiple features at the same time\n\
799                 combine the appropriate symbols without any delimiting characters.\n\
800                 K = begin with keyframe\n\
801                 O = enable chroma optimizer\n\
802                 G = greyscale encoding\n\
803                 C = cartoon mode\n\
804           integer = b-frame sensitivity\n\
805    \n\
806     Example:\n\
807      to create a first zone starting at frame 0 with weight 1.0, all options\n\
808      enabled and b-frame sensitivity -5, and a second zone starting at frame 1000\n\
809      with constant quant 4 and no options enabled you would use the -zones option\n\
810      like this:\n\
811    \n\
812      -zones 0,w,1.0,-5KOGC/1000,q,4\n\n", MAX_ZONES);
813                            } else
814                          usage();                          usage();
815                          return (0);                          return (0);
816                  } else {                  } else {
# Line 756  Line 824 
824   *                            Arguments checking   *                            Arguments checking
825   ****************************************************************************/   ****************************************************************************/
826    
827          if (XDIM <= 0 || XDIM >= 4096 || YDIM <= 0 || YDIM >= 4096) {          if (XDIM <= 0 || XDIM >= MAX_XDIM || YDIM <= 0 || YDIM >= MAX_YDIM) {
828                  fprintf(stderr,                  fprintf(stderr,
829                                  "Trying to retrieve width and height from input header\n");                                  "Trying to retrieve width and height from input header\n");
830                  if (!ARG_INPUTTYPE)                  if (!ARG_INPUTTYPE)
# Line 765  Line 833 
833    
834          if (ARG_QUALITY < 0 ) {          if (ARG_QUALITY < 0 ) {
835                  ARG_QUALITY = 0;                  ARG_QUALITY = 0;
836          } else if (ARG_QUALITY >= ME_ELEMENTS) {          } else if (ARG_QUALITY >= (int) ME_ELEMENTS) {
837                  ARG_QUALITY = ME_ELEMENTS - 1;                  ARG_QUALITY = ME_ELEMENTS - 1;
838          }          }
839    
# Line 858  Line 926 
926                if (avi_info.fccHandler != MAKEFOURCC('Y', 'V', '1', '2')) {                if (avi_info.fccHandler != MAKEFOURCC('Y', 'V', '1', '2')) {
927                            LONG size;                            LONG size;
928                            fprintf(stderr, "Non YV12 input colorspace %c%c%c%c! Attempting conversion...\n",                            fprintf(stderr, "Non YV12 input colorspace %c%c%c%c! Attempting conversion...\n",
929                                    avi_info.fccHandler%256, (avi_info.fccHandler>>8)%256, (avi_info.fccHandler>>16)%256,                                    (char)avi_info.fccHandler%256, (char)(avi_info.fccHandler>>8)%256, (char)(avi_info.fccHandler>>16)%256,
930                                    (avi_info.fccHandler>>24)%256);                                    (char)(avi_info.fccHandler>>24)%256);
931                            size = sizeof(myBitmapInfoHeader);                            size = sizeof(myBitmapInfoHeader);
932                            AVIStreamReadFormat(avi_in_stream, 0, &myBitmapInfoHeader, &size);                            AVIStreamReadFormat(avi_in_stream, 0, &myBitmapInfoHeader, &size);
933                            if (size==0)                            if (size==0)
934                                    fprintf(stderr, "AVIStreamReadFormat read 0 bytes.\n");                                    fprintf(stderr, "AVIStreamReadFormat read 0 bytes.\n");
935                            else {                            else {
936                                    fprintf(stderr, "AVIStreamReadFormat read %d bytes.\n", size);                                    fprintf(stderr, "AVIStreamReadFormat read %d bytes.\n", (int)size);
937                                    fprintf(stderr, "width = %d, height = %d, planes = %d\n", myBitmapInfoHeader.biWidth,                                    fprintf(stderr, "width = %d, height = %d, planes = %d\n", (int)myBitmapInfoHeader.biWidth,
938                                            myBitmapInfoHeader.biHeight, myBitmapInfoHeader.biPlanes);                                            (int)myBitmapInfoHeader.biHeight, myBitmapInfoHeader.biPlanes);
939                                    fprintf(stderr, "Compression = %c%c%c%c, %d\n",                                    fprintf(stderr, "Compression = %c%c%c%c, %d\n",
940                                            myBitmapInfoHeader.biCompression%256, (myBitmapInfoHeader.biCompression>>8)%256,                                            (char)myBitmapInfoHeader.biCompression%256, (char)(myBitmapInfoHeader.biCompression>>8)%256,
941                                            (myBitmapInfoHeader.biCompression>>16)%256, (myBitmapInfoHeader.biCompression>>24)%256,                                            (char)(myBitmapInfoHeader.biCompression>>16)%256, (char)(myBitmapInfoHeader.biCompression>>24)%256,
942                                            myBitmapInfoHeader.biCompression);                                            (int)myBitmapInfoHeader.biCompression);
943                                    fprintf(stderr, "Bits Per Pixel = %d\n", myBitmapInfoHeader.biBitCount);                                    fprintf(stderr, "Bits Per Pixel = %d\n", myBitmapInfoHeader.biBitCount);
944                                    myBitmapInfoHeader.biCompression = MAKEFOURCC('Y', 'V', '1', '2');                                    myBitmapInfoHeader.biCompression = MAKEFOURCC('Y', 'V', '1', '2');
945                                    myBitmapInfoHeader.biBitCount = 12;                                    myBitmapInfoHeader.biBitCount = 12;
# Line 889  Line 957 
957                                  temp = (unsigned char*)AVIStreamGetFrame(get_frame, 0);                                  temp = (unsigned char*)AVIStreamGetFrame(get_frame, 0);
958                                  if (temp != NULL) {                                  if (temp != NULL) {
959                                          int i;                                          int i;
960                                          for (i = 0; i < ((DWORD*)temp)[0]; i++) {                                          for (i = 0; i < (int)((DWORD*)temp)[0]; i++) {
961                                                  fprintf(stderr, "%2d ", temp[i]);                                                  fprintf(stderr, "%2d ", temp[i]);
962                                          }                                          }
963                                          fprintf(stderr, "\n");                                          fprintf(stderr, "\n");
# Line 905  Line 973 
973            if (ARG_MAXFRAMENR<0)            if (ARG_MAXFRAMENR<0)
974                          ARG_MAXFRAMENR = avi_info.dwLength-ARG_STARTFRAMENR;                          ARG_MAXFRAMENR = avi_info.dwLength-ARG_STARTFRAMENR;
975                    else                    else
976                          ARG_MAXFRAMENR = min(ARG_MAXFRAMENR, avi_info.dwLength-ARG_STARTFRAMENR);                          ARG_MAXFRAMENR = min(ARG_MAXFRAMENR, (int) (avi_info.dwLength-ARG_STARTFRAMENR));
977    
978                    XDIM = avi_info.rcFrame.right - avi_info.rcFrame.left;                    XDIM = avi_info.rcFrame.right - avi_info.rcFrame.left;
979                    YDIM = avi_info.rcFrame.bottom - avi_info.rcFrame.top;                    YDIM = avi_info.rcFrame.bottom - avi_info.rcFrame.top;
# Line 925  Line 993 
993  #endif  #endif
994                  {                  {
995                          FILE *in_file = fopen(ARG_INPUTFILE, "rb");                          FILE *in_file = fopen(ARG_INPUTFILE, "rb");
                         int pos = 0;  
996                          if (in_file == NULL) {                          if (in_file == NULL) {
997                                  fprintf(stderr, "Error opening input file %s\n", ARG_INPUTFILE);                                  fprintf(stderr, "Error opening input file %s\n", ARG_INPUTFILE);
998                                  return (-1);                                  return (-1);
# Line 940  Line 1007 
1007          }          }
1008    
1009          if (ARG_FRAMERATE <= 0) {          if (ARG_FRAMERATE <= 0) {
1010                  fprintf(stderr, "Wrong Framerate %f\n", ARG_FRAMERATE);                  ARG_FRAMERATE = 25.00f; /* default value */
                 return (-1);  
1011          }          }
1012    
1013          if (ARG_TARGETSIZE) {          if (ARG_TARGETSIZE) {
# Line 952  Line 1018 
1018                                  fprintf(stderr, "Parameter conflict: Do not specify both -bitrate and -size\n");                                  fprintf(stderr, "Parameter conflict: Do not specify both -bitrate and -size\n");
1019                                  goto release_all;                                  goto release_all;
1020                  } else                  } else
1021                          ARG_BITRATE = ((ARG_TARGETSIZE * 8) / (ARG_MAXFRAMENR / ARG_FRAMERATE)) * 1024;                          ARG_BITRATE = (int) (((ARG_TARGETSIZE * 8) / (ARG_MAXFRAMENR / ARG_FRAMERATE)) * 1024);
1022          }          }
1023    
1024                  /* Set constant quant to default if no bitrate given for single pass */                  /* Set constant quant to default if no bitrate given for single pass */
# Line 1053  Line 1119 
1119                          totalenctime = MAX(totalenctime, enc_data[k].totalenctime);                          totalenctime = MAX(totalenctime, enc_data[k].totalenctime);
1120    
1121                          for (i=0; i < 3; i++) totalPSNR[i] += enc_data[k].totalPSNR[i];                          for (i=0; i < 3; i++) totalPSNR[i] += enc_data[k].totalPSNR[i];
1122                          for (i=0; i < 8; i++) {                          for (i=0; i < 7; i++) {
1123                                  int l;                                  int l;
1124                                  framestats[i].count += enc_data[k].framestats[i].count;                                  framestats[i].count += enc_data[k].framestats[i].count;
1125                                  framestats[i].size += enc_data[k].framestats[i].size;                                  framestats[i].size += enc_data[k].framestats[i].size;
# Line 1177  Line 1243 
1243    
1244          int result;          int result;
1245          int output_num;          int output_num;
         int nvop_counter;  
1246          int m4v_size;          int m4v_size;
1247          int key;          int key;
1248          int stats_type;          int stats_type;
# Line 1200  Line 1265 
1265          PAVIFILE avi_in = NULL;          PAVIFILE avi_in = NULL;
1266          PAVISTREAM avi_in_stream = NULL;          PAVISTREAM avi_in_stream = NULL;
1267          PGETFRAME get_frame = NULL;          PGETFRAME get_frame = NULL;
         BITMAPINFOHEADER myBitmapInfoHeader;  
1268  #else  #else
1269  #define get_frame NULL  #define get_frame NULL
1270  #endif  #endif
# Line 1211  Line 1275 
1275          AVISTREAMINFO myAVIStreamInfo;          AVISTREAMINFO myAVIStreamInfo;
1276  #endif  #endif
1277  #if defined(XVID_AVI_INPUT) || defined(XVID_AVI_OUTPUT)  #if defined(XVID_AVI_INPUT) || defined(XVID_AVI_OUTPUT)
1278            BITMAPINFOHEADER myBitmapInfoHeader;
1279          if (ARG_NUM_APP_THREADS > 1)          if (ARG_NUM_APP_THREADS > 1)
1280                  CoInitializeEx(0, COINIT_MULTITHREADED);                  CoInitializeEx(0, COINIT_MULTITHREADED);
1281          AVIFileInit();          AVIFileInit();
# Line 1258  Line 1323 
1323                if (avi_info.fccHandler != MAKEFOURCC('Y', 'V', '1', '2')) {                if (avi_info.fccHandler != MAKEFOURCC('Y', 'V', '1', '2')) {
1324                            LONG size;                            LONG size;
1325                            fprintf(stderr, "Non YV12 input colorspace %c%c%c%c! Attempting conversion...\n",                            fprintf(stderr, "Non YV12 input colorspace %c%c%c%c! Attempting conversion...\n",
1326                                    avi_info.fccHandler%256, (avi_info.fccHandler>>8)%256, (avi_info.fccHandler>>16)%256,                                    (char)avi_info.fccHandler%256, (char)(avi_info.fccHandler>>8)%256, (char)(avi_info.fccHandler>>16)%256,
1327                                    (avi_info.fccHandler>>24)%256);                                    (char)(avi_info.fccHandler>>24)%256);
1328                            size = sizeof(myBitmapInfoHeader);                            size = sizeof(myBitmapInfoHeader);
1329                            AVIStreamReadFormat(avi_in_stream, 0, &myBitmapInfoHeader, &size);                            AVIStreamReadFormat(avi_in_stream, 0, &myBitmapInfoHeader, &size);
1330                            if (size==0)                            if (size==0)
1331                                    fprintf(stderr, "AVIStreamReadFormat read 0 bytes.\n");                                    fprintf(stderr, "AVIStreamReadFormat read 0 bytes.\n");
1332                            else {                            else {
1333                                    fprintf(stderr, "AVIStreamReadFormat read %d bytes.\n", size);                                    fprintf(stderr, "AVIStreamReadFormat read %d bytes.\n", (int)size);
1334                                    fprintf(stderr, "width = %d, height = %d, planes = %d\n", myBitmapInfoHeader.biWidth,                                    fprintf(stderr, "width = %d, height = %d, planes = %d\n", (int)myBitmapInfoHeader.biWidth,
1335                                            myBitmapInfoHeader.biHeight, myBitmapInfoHeader.biPlanes);                                            (int)myBitmapInfoHeader.biHeight, myBitmapInfoHeader.biPlanes);
1336                                    fprintf(stderr, "Compression = %c%c%c%c, %d\n",                                    fprintf(stderr, "Compression = %c%c%c%c, %d\n",
1337                                            myBitmapInfoHeader.biCompression%256, (myBitmapInfoHeader.biCompression>>8)%256,                                            (char)myBitmapInfoHeader.biCompression%256, (char)(myBitmapInfoHeader.biCompression>>8)%256,
1338                                            (myBitmapInfoHeader.biCompression>>16)%256, (myBitmapInfoHeader.biCompression>>24)%256,                                            (char)(myBitmapInfoHeader.biCompression>>16)%256, (char)(myBitmapInfoHeader.biCompression>>24)%256,
1339                                            myBitmapInfoHeader.biCompression);                                            (int)myBitmapInfoHeader.biCompression);
1340                                    fprintf(stderr, "Bits Per Pixel = %d\n", myBitmapInfoHeader.biBitCount);                                    fprintf(stderr, "Bits Per Pixel = %d\n", myBitmapInfoHeader.biBitCount);
1341                                    myBitmapInfoHeader.biCompression = MAKEFOURCC('Y', 'V', '1', '2');                                    myBitmapInfoHeader.biCompression = MAKEFOURCC('Y', 'V', '1', '2');
1342                                    myBitmapInfoHeader.biBitCount = 12;                                    myBitmapInfoHeader.biBitCount = 12;
# Line 1289  Line 1354 
1354                                  temp = (unsigned char*)AVIStreamGetFrame(get_frame, 0);                                  temp = (unsigned char*)AVIStreamGetFrame(get_frame, 0);
1355                                  if (temp != NULL) {                                  if (temp != NULL) {
1356                                          int i;                                          int i;
1357                                          for (i = 0; i < ((DWORD*)temp)[0]; i++) {                                          for (i = 0; i < (int)((DWORD*)temp)[0]; i++) {
1358                                                  fprintf(stderr, "%2d ", temp[i]);                                                  fprintf(stderr, "%2d ", temp[i]);
1359                                          }                                          }
1360                                          fprintf(stderr, "\n");                                          fprintf(stderr, "\n");
# Line 1399  Line 1464 
1464                          myAVIStreamInfo.dwRate = ARG_DWRATE;                          myAVIStreamInfo.dwRate = ARG_DWRATE;
1465                          myAVIStreamInfo.dwLength = ARG_MAXFRAMENR;                          myAVIStreamInfo.dwLength = ARG_MAXFRAMENR;
1466                          myAVIStreamInfo.dwQuality = 10000;                          myAVIStreamInfo.dwQuality = 10000;
1467                          SetRect(&myAVIStreamInfo.rcFrame, 0, 0, YDIM, XDIM);                          SetRect(&myAVIStreamInfo.rcFrame, 0, 0, XDIM, YDIM);
1468    
1469                          if (avierr=AVIFileOpen(&myAVIFile, ARG_AVIOUTPUTFILE, OF_CREATE|OF_WRITE, NULL)) {                          if ((avierr=AVIFileOpen(&myAVIFile, ARG_AVIOUTPUTFILE, OF_CREATE|OF_WRITE, NULL))) {
1470                                  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", ARG_AVIOUTPUTFILE, avierr);
1471                                  goto release_all;                                  goto release_all;
1472                          }                          }
1473    
1474                          if (avierr=AVIFileCreateStream(myAVIFile, &myAVIStream, &myAVIStreamInfo)) {                          if ((avierr=AVIFileCreateStream(myAVIFile, &myAVIStream, &myAVIStreamInfo))) {
1475                                  fprintf(stderr, "AVIFileCreateStream failed, error code %d\n", avierr);                                  fprintf(stderr, "AVIFileCreateStream failed, error code %d\n", avierr);
1476                                  goto release_all;                                  goto release_all;
1477                          }                          }
# Line 1419  Line 1484 
1484                          myBitmapInfoHeader.biCompression = MAKEFOURCC('X', 'V', 'I', 'D');                          myBitmapInfoHeader.biCompression = MAKEFOURCC('X', 'V', 'I', 'D');
1485                          myBitmapInfoHeader.biBitCount = 12;                          myBitmapInfoHeader.biBitCount = 12;
1486                          myBitmapInfoHeader.biSizeImage = 6*XDIM*YDIM;                          myBitmapInfoHeader.biSizeImage = 6*XDIM*YDIM;
1487                          if (avierr=AVIStreamSetFormat(myAVIStream, 0, &myBitmapInfoHeader, sizeof(BITMAPINFOHEADER))) {                          if ((avierr=AVIStreamSetFormat(myAVIStream, 0, &myBitmapInfoHeader, sizeof(BITMAPINFOHEADER)))) {
1488                                  fprintf(stderr, "AVIStreamSetFormat failed, error code %d\n", avierr);                                  fprintf(stderr, "AVIStreamSetFormat failed, error code %d\n", avierr);
1489                                  goto release_all;                                  goto release_all;
1490                          }                          }
# Line 1472  Line 1537 
1537          input_num = 0;                      /* input frame counter */          input_num = 0;                      /* input frame counter */
1538          output_num = start_num;             /* output frame counter */          output_num = start_num;             /* output frame counter */
1539    
         nvop_counter = 0;  
   
1540          do {          do {
1541    
1542                  char *type;                  char *type;
# Line 1516  Line 1579 
1579   *                       Encode and decode this frame   *                       Encode and decode this frame
1580   ****************************************************************************/   ****************************************************************************/
1581    
1582                  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) {
1583                          stats_type = XVID_TYPE_PVOP;                          stats_type = XVID_TYPE_PVOP;
1584                  }                  }
1585                  else                  else
# Line 1804  Line 1867 
1867          fprintf(stderr, "Input options:\n");          fprintf(stderr, "Input options:\n");
1868          fprintf(stderr, " -i      string : input filename (stdin)\n");          fprintf(stderr, " -i      string : input filename (stdin)\n");
1869  #ifdef XVID_AVI_INPUT  #ifdef XVID_AVI_INPUT
1870          fprintf(stderr, " -type   integer: input data type (yuv=0, pgm=1, avi/avs=2)\n");          fprintf(stderr, " -type   integer : input data type (yuv=0, pgm=1, avi/avs=2) (");
1871  #else  #else
1872          fprintf(stderr, " -type   integer: input data type (yuv=0, pgm=1)\n");          fprintf(stderr, " -type   integer : input data type (yuv=0, pgm=1) (");
1873  #endif  #endif
1874          fprintf(stderr, " -w      integer: frame width ([1.2048])\n");          fprintf(stderr, "%d)\n", ARG_INPUTTYPE);
1875          fprintf(stderr, " -h      integer: frame height ([1.2048])\n");          fprintf(stderr, " -w      integer : frame width ([1.%d])\n", MAX_XDIM);
1876          fprintf(stderr, " -csp    string : colorspace of raw input file i420, yv12 (default)\n");          fprintf(stderr, " -h      integer : frame height ([1.%d])\n", MAX_YDIM);
1877          fprintf(stderr, " -frames integer: number of frames to encode\n");          fprintf(stderr, " -csp    string  : colorspace of raw input file i420%s, yv12%s\n", (ARG_COLORSPACE == XVID_CSP_I420)?" (default)":"", (ARG_COLORSPACE == XVID_CSP_YV12)?" (default)":"");
1878          fprintf(stderr, "\n");          fprintf(stderr, " -frames integer : number of frames to encode (");
1879            if (ARG_MAXFRAMENR==-1)
1880                    fprintf(stderr, "all)");
1881            else
1882                    fprintf(stderr, "%d)", ARG_MAXFRAMENR);
1883            fprintf(stderr, "\n\n");
1884          fprintf(stderr, "Output options:\n");          fprintf(stderr, "Output options:\n");
1885          fprintf(stderr, " -dump      : save decoder output\n");          fprintf(stderr, " -dump      : save decoder output\n");
1886          fprintf(stderr, " -save      : save an Elementary Stream file per frame\n");          fprintf(stderr, " -save      : save an Elementary Stream file per frame\n");
# Line 1820  Line 1888 
1888  #ifdef XVID_AVI_OUTPUT  #ifdef XVID_AVI_OUTPUT
1889          fprintf(stderr, " -avi string: save an AVI file for the complete sequence\n");          fprintf(stderr, " -avi string: save an AVI file for the complete sequence\n");
1890  #endif  #endif
1891    #ifdef XVID_MKV_OUTPUT
1892          fprintf(stderr, " -mkv string: save a MKV file for the complete sequence\n");          fprintf(stderr, " -mkv string: save a MKV file for the complete sequence\n");
1893          fprintf(stderr, "\n");  #endif
         fprintf(stderr, "BFrames options:\n");  
         fprintf(stderr, " -max_bframes   integer: max bframes (2)\n");  
         fprintf(stderr, " -bquant_ratio  integer: bframe quantizer ratio (150)\n");  
         fprintf(stderr, " -bquant_offset integer: bframe quantizer offset (100)\n");  
1894          fprintf(stderr, "\n");          fprintf(stderr, "\n");
1895          fprintf(stderr, "Rate control options:\n");          fprintf(stderr, "Rate control options:\n");
1896          fprintf(stderr, " -framerate float               : target framerate (25.0)\n");          fprintf(stderr, " -framerate        float      : target framerate (auto)\n");
1897          fprintf(stderr, " -bitrate   [integer]           : target bitrate in kbps (700)\n");          fprintf(stderr, " -bitrate          [integer]  : target bitrate in kbps (%d)\n", DEFAULT_BITRATE/1000);
1898          fprintf(stderr, " -size      integer                     : target size in kilobytes\n");          fprintf(stderr, " -size      integer                     : target size in kilobytes\n");
1899      fprintf(stderr,     " -single                        : single pass mode (default)\n");          fprintf(stderr, " -single                      : single pass mode%s\n", (ARG_SINGLE)?" (default)":"");
1900          fprintf(stderr, " -cq        float               : single pass constant quantizer\n");          fprintf(stderr, " -cq        float               : single pass constant quantizer\n");
1901          fprintf(stderr, " -pass1     [filename]          : twopass mode (first pass)\n");          fprintf(stderr, " -pass1     [filename]          : twopass mode (first pass)\n");
1902          fprintf(stderr, " -full1pass                     : perform full first pass\n");          fprintf(stderr, " -full1pass                   : perform full quality first pass (disabled)\n");
1903          fprintf(stderr, " -pass2     [filename]          : twopass mode (2nd pass)\n");          fprintf(stderr, " -pass2     [filename]          : twopass mode (2nd pass)\n");
1904            fprintf(stderr, " -max_key_interval integer    : maximum keyframe interval (%d)\n", ARG_MAXKEYINTERVAL);
1905            fprintf(stderr, " -zones            [zones]    : use `-help zones' for usage guidelines\n");
1906          fprintf(stderr, " -zq starting_frame float       : bitrate zone; quant\n");          fprintf(stderr, " -zq starting_frame float       : bitrate zone; quant\n");
1907          fprintf(stderr, " -zw starting_frame float       : bitrate zone; weight\n");          fprintf(stderr, " -zw starting_frame float       : bitrate zone; weight\n");
     fprintf(stderr, " -max_key_interval integer      : maximum keyframe interval (300)\n");  
1908      fprintf(stderr, "\n");      fprintf(stderr, "\n");
1909          fprintf(stderr, "Single Pass options:\n");          fprintf(stderr, "Single Pass options:\n");
1910          fprintf(stderr, "-reaction   integer             : reaction delay factor (16)\n");          fprintf(stderr, " -reaction         integer    : reaction delay factor (%d)\n", ARG_REACTION);
1911          fprintf(stderr, "-averaging  integer             : averaging period (100)\n");          fprintf(stderr, " -averaging        integer    : averaging period (%d)\n", ARG_AVERAGING);
1912          fprintf(stderr, "-smoother   integer             : smoothing buffer (100)\n");          fprintf(stderr, " -smoother         integer    : smoothing buffer (%d)\n", ARG_SMOOTHER);
1913          fprintf(stderr, "\n");          fprintf(stderr, "\n");
1914          fprintf(stderr, "Second Pass options:\n");          fprintf(stderr, "Second Pass options:\n");
1915          fprintf(stderr, "-kboost     integer             : I frame boost (10)\n");          fprintf(stderr, " -kboost           integer    : I frame boost (%d)\n", ARG_KBOOST);
1916          fprintf(stderr, "-kthresh    integer             : I frame reduction threshold (1)\n");          fprintf(stderr, " -kthresh          integer    : I frame reduction threshold (%d)\n", ARG_KTHRESH);
1917          fprintf(stderr, "-kreduction integer             : I frame reduction amount (20)\n");          fprintf(stderr, " -kreduction       integer    : I frame reduction amount (%d)\n", ARG_KREDUCTION);
1918          fprintf(stderr, "-ostrength  integer             : overflow control strength (5)\n");          fprintf(stderr, " -ostrength        integer    : overflow control strength (%d)\n", ARG_OVERSTRENGTH);
1919          fprintf(stderr, "-oimprove   integer             : max overflow improvement (5)\n");          fprintf(stderr, " -oimprove         integer    : max overflow improvement (%d)\n", ARG_OVERIMPROVE);
1920          fprintf(stderr, "-odegrade   integer             : max overflow degradation (5)\n");          fprintf(stderr, " -odegrade         integer    : max overflow degradation (%d)\n", ARG_OVERDEGRADE);
1921          fprintf(stderr, "-chigh      integer             : high bitrate scenes degradation (0)\n");          fprintf(stderr, " -chigh            integer    : high bitrate scenes degradation (%d)\n", ARG_CHIGH);
1922          fprintf(stderr, "-clow       integer             : low bitrate scenes improvement (0)\n");          fprintf(stderr, " -clow             integer    : low bitrate scenes improvement (%d)\n", ARG_CLOW);
1923          fprintf(stderr, "-overhead   integer             : container frame overhead (0)\n");          fprintf(stderr, " -overhead         integer    : container frame overhead (%d)\n", ARG_OVERHEAD);
1924          fprintf(stderr, "-vbvsize    integer             : use vbv buffer size\n");          fprintf(stderr, "-vbvsize    integer             : use vbv buffer size\n");
1925          fprintf(stderr, "-vbvmax     integer             : vbv max bitrate\n");          fprintf(stderr, "-vbvmax     integer             : vbv max bitrate\n");
1926          fprintf(stderr, "-vbvpeak    integer             : vbv peak bitrate over 1 second\n");          fprintf(stderr, "-vbvpeak    integer             : vbv peak bitrate over 1 second\n");
1927          fprintf(stderr, "\n");          fprintf(stderr, "\n");
1928            fprintf(stderr, "BFrames options:\n");
1929            fprintf(stderr, " -max_bframes      integer    : max bframes (%d)\n", ARG_MAXBFRAMES);
1930            fprintf(stderr, " -bquant_ratio     integer    : bframe quantizer ratio (%d)\n", ARG_BQRATIO);
1931            fprintf(stderr, " -bquant_offset    integer    : bframe quantizer offset (%d)\n", ARG_BQOFFSET);
1932            fprintf(stderr, "\n");
1933          fprintf(stderr, "Other options\n");          fprintf(stderr, "Other options\n");
1934          fprintf(stderr, " -noasm                         : do not use assembly optmized code\n");          if (ARG_USE_ASSEMBLER)
1935          fprintf(stderr, " -turbo                         : use turbo presets for higher encoding speed\n");                  fprintf(stderr, " -noasm                       : do not use assembly optimized code (use)\n");
1936          fprintf(stderr, " -quality integer               : quality ([0..%d]) (6)\n", ME_ELEMENTS - 1);          else
1937          fprintf(stderr, " -vhqmode integer               : level of R-D optimizations ([0..4]) (1)\n");                  fprintf(stderr, " -asm                         : use assembly optimized code (don't use)\n");
1938          fprintf(stderr, " -bvhq                          : use R-D optimizations for B-frames\n");          if (ARG_TURBO)
1939          fprintf(stderr, " -qpel                          : use quarter pixel ME\n");                  fprintf(stderr, " -noturbo                     : do not use turbo presets for higher encoding speed (use)\n");
1940          fprintf(stderr, " -gmc                           : use global motion compensation\n");          else
1941          fprintf(stderr, " -qtype   integer               : quantization type (H263:0, MPEG4:1) (0)\n");                  fprintf(stderr, " -turbo                       : use turbo presets for higher encoding speed (don't use)\n");
1942            fprintf(stderr, " -quality          integer    : quality ([0..%d]) (%d)\n", ME_ELEMENTS - 1, ARG_QUALITY);
1943            fprintf(stderr, " -vhqmode          integer    : level of R-D optimizations ([0..4]) (%d)\n", ARG_VHQMODE);
1944            if (ARG_BVHQ)
1945                    fprintf(stderr, " -nobvhq                      : do not use R-D optimizations for B-frames (use)\n");
1946            else
1947                    fprintf(stderr, " -bvhq                        : use R-D optimizations for B-frames (don't use)\n");
1948            fprintf(stderr, " -metric           integer    : distortion metric for R-D opt (PSNR:0, PSNRHVSM:1) (%d)\n", ARG_QMETRIC);
1949            if (ARG_QPEL)
1950                    fprintf(stderr, " -noqpel                      : do not use quarter pixel ME (use)\n");
1951            else
1952                    fprintf(stderr, " -qpel                        : use quarter pixel ME (don't use)\n");
1953            if (ARG_GMC)
1954                    fprintf(stderr, " -nogmc                       : do not use global motion compensation (use)\n");
1955            else
1956                    fprintf(stderr, " -gmc                         : use global motion compensation (don't use)\n");
1957            fprintf(stderr, " -qtype            integer    : quantization type (H263:0, MPEG4:1) (%d)\n", ARG_QTYPE);
1958          fprintf(stderr, " -qmatrix filename              : use custom MPEG4 quantization matrix\n");          fprintf(stderr, " -qmatrix filename              : use custom MPEG4 quantization matrix\n");
1959          fprintf(stderr, " -interlaced [integer]          : interlaced encoding (BFF:1, TFF:2) (1)\n");          fprintf(stderr, " -interlaced       [integer]  : interlaced encoding (BFF:1, TFF:2) (%d)\n", DEFAULT_INTERLACING);
1960          fprintf(stderr, " -nopacked                      : Disable packed mode\n");          if (ARG_PACKED)
1961          fprintf(stderr, " -noclosed_gop                  : Disable closed GOP mode\n");                  fprintf(stderr, " -nopacked                    : disable packed B-frames mode (enabled)\n");
1962          fprintf(stderr, " -masking [integer]             : HVS masking mode (None:0, Lumi:1, Variance:2) (0)\n");          else
1963          fprintf(stderr, " -stats                         : print stats about encoded frames\n");                  fprintf(stderr, " -packed                      : enable packed B-frames mode (disabled)\n");
1964          fprintf(stderr, " -ssim [integer]                : prints ssim for every frame (accurate: 0 fast: 4) (2)\n");          if (ARG_CLOSED_GOP)
1965          fprintf(stderr, " -ssim_file filename            : outputs the ssim stats into a file\n");                  fprintf(stderr, " -noclosed_gop                : disable closed GOP mode (enabled)\n");
1966          fprintf(stderr, " -debug                         : activates xvidcore internal debugging output\n");          else
1967          fprintf(stderr, " -vop_debug                     : print some info directly into encoded frames\n");                  fprintf(stderr, " -closed_gop                  : enable closed GOP mode (disabled)\n");
1968          fprintf(stderr, " -nochromame                    : Disable chroma motion estimation\n");          fprintf(stderr, " -masking          [integer]  : HVS masking mode (None:0, Lumi:1, Variance:2) (%d)\n", ARG_LUMIMASKING);
1969          fprintf(stderr, " -notrellis                     : Disable trellis quantization\n");          if (ARG_STATS)
1970          fprintf(stderr, " -imin    integer               : Minimum I Quantizer (1..31) (2)\n");                  fprintf(stderr, " -nostats                     : do not print stats about encoded frames (print)\n");
1971          fprintf(stderr, " -imax    integer               : Maximum I quantizer (1..31) (31)\n");          else
1972          fprintf(stderr, " -bmin    integer               : Minimum B Quantizer (1..31) (2)\n");                  fprintf(stderr, " -stats                       : print stats about encoded frames (don't print)\n");
1973          fprintf(stderr, " -bmax    integer               : Maximum B quantizer (1..31) (31)\n");          fprintf(stderr, " -ssim             [integer]  : print ssim for every frame (accurate: 0 fast: 4) (%d)\n", DEFAULT_SSIM);
1974          fprintf(stderr, " -pmin    integer               : Minimum P Quantizer (1..31) (2)\n");          fprintf(stderr, " -ssim_file        filename   : output the ssim stats into a file\n");
1975          fprintf(stderr, " -pmax    integer               : Maximum P quantizer (1..31) (31)\n");          if (ARG_PSNRHVSM)
1976          fprintf(stderr, " -drop    integer               : Frame Drop Ratio (0..100) (0)\n");                  fprintf(stderr, " -nopsnrhvsm                  : do not print PSNRHVSM metric for every frame (print)\n");
1977          fprintf(stderr, " -start   integer               : Starting frame number\n");          else
1978          fprintf(stderr, " -threads integer               : Number of threads\n");                  fprintf(stderr, " -psnrhvsm                    : print PSNRHVSM metric for every frame (don't print)\n");
1979          fprintf(stderr, " -progress [integer]            : Show progress updates every n frames (10)\n");          fprintf(stderr, " -debug            integer    : activate xvidcore internal debugging output (don't activate)\n");
1980          fprintf(stderr, " -par     integer[:integer]     : Set Pixel Aspect Ratio.\n");          if (ARG_VOPDEBUG)
1981                    fprintf(stderr, " -novop_debug                 : do not print debug info directly into encoded frames (print)\n");
1982            else
1983                    fprintf(stderr, " -vop_debug                   : print some info directly into encoded frames (don't print)\n");
1984            if (ARG_CHROMAME)
1985                    fprintf(stderr, " -nochromame                  : disable chroma motion estimation (enabled)\n");
1986            else
1987                    fprintf(stderr, " -chromame                    : enable chroma motion estimation (disabled)\n");
1988            if (ARG_TRELLIS)
1989                    fprintf(stderr, " -notrellis                   : disable trellis quantization (enabled)\n");
1990            else
1991                    fprintf(stderr, " -trellis                     : enable trellis quantization (disabled)\n");
1992            fprintf(stderr, " -imin             integer    : minimum I Quantizer (1..31) (%d)\n", ARG_QUANTS[0]);
1993            fprintf(stderr, " -imax             integer    : maximum I quantizer (1..31) (%d)\n", ARG_QUANTS[1]);
1994            fprintf(stderr, " -bmin             integer    : minimum B Quantizer (1..31) (%d)\n", ARG_QUANTS[4]);
1995            fprintf(stderr, " -bmax             integer    : maximum B quantizer (1..31) (%d)\n", ARG_QUANTS[5]);
1996            fprintf(stderr, " -pmin             integer    : minimum P Quantizer (1..31) (%d)\n", ARG_QUANTS[2]);
1997            fprintf(stderr, " -pmax             integer    : maximum P quantizer (1..31) (%d)\n", ARG_QUANTS[3]);
1998            fprintf(stderr, " -drop             integer    : frame Drop Ratio (0..100) (%d)\n", ARG_FRAMEDROP);
1999            fprintf(stderr, " -start            integer    : starting frame number (%d)\n", ARG_STARTFRAMENR);
2000            fprintf(stderr, " -threads          integer    : number of threads (auto)\n");
2001            fprintf(stderr, " -slices           integer    : number of slices (%d)\n", ARG_SLICES);
2002            fprintf(stderr, " -progress         [integer]  : show progress updates every n frames (%d)\n", DEFAULT_PROGRESS);
2003            fprintf(stderr, " -par       integer[:integer] : set Pixel Aspect Ratio (%d)\n", ARG_PAR);
2004          fprintf(stderr, "                                  1 = 1:1\n");          fprintf(stderr, "                                  1 = 1:1\n");
2005          fprintf(stderr, "                                  2 = 12:11 (4:3 PAL)\n");          fprintf(stderr, "                                  2 = 12:11 (4:3 PAL)\n");
2006          fprintf(stderr, "                                  3 = 10:11 (4:3 NTSC)\n");          fprintf(stderr, "                                  3 = 10:11 (4:3 NTSC)\n");
2007          fprintf(stderr, "                                  4 = 16:11 (16:9 PAL)\n");          fprintf(stderr, "                                  4 = 16:11 (16:9 PAL)\n");
2008          fprintf(stderr, "                                  5 = 40:33 (16:9 NTSC)\n");          fprintf(stderr, "                                  5 = 40:33 (16:9 NTSC)\n");
2009          fprintf(stderr, "                              other = custom (width:height)\n");          fprintf(stderr, "                              other = custom (width:height)\n");
2010          fprintf(stderr, " -help                          : prints this help message\n");          fprintf(stderr, " -help                        : print this help message\n");
2011          fprintf(stderr, "\n");          fprintf(stderr, "\n");
2012          fprintf(stderr, "NB: You can define %d zones repeating the -z[qw] option as needed.\n", MAX_ZONES);          fprintf(stderr, "NB: You can define up to %d zones via both the -zones and the -z[qw] options as needed.\n", MAX_ZONES);
2013  }  }
2014    
2015  /*****************************************************************************  /*****************************************************************************
# Line 1917  Line 2027 
2027          int bytes, xsize, ysize, depth;          int bytes, xsize, ysize, depth;
2028          char dummy[2];          char dummy[2];
2029    
2030          bytes = fread(dummy, 1, 2, handle);          bytes = (int) fread(dummy, 1, 2, handle);
2031    
2032          if ((bytes < 2) || (dummy[0] != 'P') || (dummy[1] != '5'))          if ((bytes < 2) || (dummy[0] != 'P') || (dummy[1] != '5'))
2033                  return (1);                  return (1);
2034    
2035          fscanf(handle, "%d %d %d", &xsize, &ysize, &depth);          fscanf(handle, "%d %d %d", &xsize, &ysize, &depth);
2036            fread(&dummy, 1, 1, handle);
2037          if ((xsize > 4096) || (ysize > 4096*3/2) || (depth != 255)) {          if ((xsize > 4096) || (ysize > 4096*3/2) || (depth != 255)) {
2038                  fprintf(stderr, "%d %d %d\n", xsize, ysize, depth);                  fprintf(stderr, "%d %d %d\n", xsize, ysize, depth);
2039                  return (2);                  return (2);
# Line 1940  Line 2051 
2051                           unsigned char *image)                           unsigned char *image)
2052  {  {
2053          int i;          int i;
         char dummy;  
2054    
2055          unsigned char *y = image;          unsigned char *y = image;
2056          unsigned char *u = image + XDIM * YDIM;          unsigned char *u = image + XDIM * YDIM;
# Line 1961  Line 2071 
2071                  v += XDIM / 2;                  v += XDIM / 2;
2072          }          }
2073    
         /*  I don't know why, but this seems needed */  
         fread(&dummy, 1, 1, handle);  
   
2074          return (0);          return (0);
2075  }  }
2076  #else  #else
# Line 2025  Line 2132 
2132    
2133  /* sample plugin */  /* sample plugin */
2134    
2135    #if 0
2136  int  int
2137  rawenc_debug(void *handle,  rawenc_debug(void *handle,
2138                           int opt,                           int opt,
# Line 2064  Line 2172 
2172    
2173          return XVID_ERR_FAIL;          return XVID_ERR_FAIL;
2174  }  }
2175    #endif
2176    
2177  #define FRAMERATE_INCR 1001  #define FRAMERATE_INCR 1001
2178    
# Line 2174  Line 2282 
2282                  rc2pass2.vbv_size     =  ARG_VBVSIZE;                  rc2pass2.vbv_size     =  ARG_VBVSIZE;
2283                  rc2pass2.vbv_initial  =  (ARG_VBVSIZE*3)/4;                  rc2pass2.vbv_initial  =  (ARG_VBVSIZE*3)/4;
2284                  rc2pass2.vbv_maxrate  =  ARG_VBVMAXRATE;                  rc2pass2.vbv_maxrate  =  ARG_VBVMAXRATE;
2285                  rc2pass2.vbv_peakrate =  ARG_VBVPEAKRATE*3;                  rc2pass2.vbv_peakrate =  ARG_VBVPEAKRATE;
2286    
2287    
2288                  plugins[xvid_enc_create.num_plugins].func = xvid_plugin_2pass2;                  plugins[xvid_enc_create.num_plugins].func = xvid_plugin_2pass2;
# Line 2241  Line 2349 
2349                  xvid_enc_create.num_plugins++;                  xvid_enc_create.num_plugins++;
2350          }          }
2351    
2352            if (ARG_PSNRHVSM>0) {
2353            plugins[xvid_enc_create.num_plugins].func = xvid_plugin_psnrhvsm;
2354                    plugins[xvid_enc_create.num_plugins].param = NULL;
2355                    xvid_enc_create.num_plugins++;
2356            }
2357    
2358  #if 0  #if 0
2359          if (ARG_DEBUG) {          if (ARG_DEBUG) {
2360                  plugins[xvid_enc_create.num_plugins].func = rawenc_debug;                  plugins[xvid_enc_create.num_plugins].func = rawenc_debug;
# Line 2250  Line 2364 
2364  #endif  #endif
2365    
2366          xvid_enc_create.num_threads = ARG_THREADS;          xvid_enc_create.num_threads = ARG_THREADS;
2367            xvid_enc_create.num_slices  = ARG_SLICES;
2368    
2369          /* Frame rate  */          /* Frame rate  */
2370          xvid_enc_create.fincr = ARG_DWSCALE;          xvid_enc_create.fincr = ARG_DWSCALE;
# Line 2472  Line 2587 
2587          if (ARG_BVHQ)          if (ARG_BVHQ)
2588                  xvid_enc_frame.vop_flags |= XVID_VOP_RD_BVOP;                  xvid_enc_frame.vop_flags |= XVID_VOP_RD_BVOP;
2589    
2590            if (ARG_QMETRIC == 1)
2591                    xvid_enc_frame.vop_flags |= XVID_VOP_RD_PSNRHVSM;
2592    
2593          switch (ARG_VHQMODE) /* this is the same code as for vfw */          switch (ARG_VHQMODE) /* this is the same code as for vfw */
2594          {          {
2595          case 1: /* VHQ_MODE_DECISION */          case 1: /* VHQ_MODE_DECISION */
# Line 2567  Line 2685 
2685    
2686                  ZONES[NUM_ZONES].frame = 0;                  ZONES[NUM_ZONES].frame = 0;
2687                  ZONES[NUM_ZONES].mode = XVID_ZONE_QUANT;                  ZONES[NUM_ZONES].mode = XVID_ZONE_QUANT;
2688                  ZONES[NUM_ZONES].modifier = ARG_CQ;                  ZONES[NUM_ZONES].modifier = (int) ARG_CQ;
2689                  ZONES[NUM_ZONES].type = XVID_TYPE_AUTO;                  ZONES[NUM_ZONES].type = XVID_TYPE_AUTO;
2690                  ZONES[NUM_ZONES].greyscale = 0;                  ZONES[NUM_ZONES].greyscale = 0;
2691                  ZONES[NUM_ZONES].chroma_opt = 0;                  ZONES[NUM_ZONES].chroma_opt = 0;
# Line 2583  Line 2701 
2701          for(i = 0; i < NUM_ZONES; i++)          for(i = 0; i < NUM_ZONES; i++)
2702                  if (ZONES[i].mode == XVID_ZONE_WEIGHT) {                  if (ZONES[i].mode == XVID_ZONE_WEIGHT) {
2703                          ZONES[i].mode = XVID_ZONE_QUANT;                          ZONES[i].mode = XVID_ZONE_QUANT;
2704                          ZONES[i].modifier = (100*ARG_CQ) / ZONES[i].modifier;                          ZONES[i].modifier = (int) ((100*ARG_CQ) / ZONES[i].modifier);
2705                  }                  }
2706  }  }
2707    
# Line 2652  Line 2770 
2770          int i;          int i;
2771          char* userdata;          char* userdata;
2772    
2773          for (i=0; i <= (bufsize-sizeof(userdata_start_code)); i++) {          for (i=0; i <= (int)(bufsize-sizeof(userdata_start_code)); i++) {
2774                  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) {
2775                          if ((userdata = strstr(buf+i+4, "DivX"))!=NULL) {                          if ((userdata = strstr(buf+i+4, "DivX"))!=NULL) {
2776                                  userdata[strlen(userdata)-1] = '\0';                                  userdata[strlen(userdata)-1] = '\0';

Legend:
Removed from v.1886  
changed lines
  Added in v.2083

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