--- trunk/xvidcore/examples/xvid_encraw.c 2005/10/06 18:28:31 1645 +++ trunk/xvidcore/examples/xvid_encraw.c 2006/02/24 10:39:23 1683 @@ -21,7 +21,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * $Id: xvid_encraw.c,v 1.21 2005-10-06 18:28:31 Isibaar Exp $ + * $Id: xvid_encraw.c,v 1.24 2006-02-24 10:39:23 syskin Exp $ * ****************************************************************************/ @@ -128,7 +128,7 @@ static int NUM_ZONES = 0; /* Maximum number of frames to encode */ -#define ABS_MAXFRAMENR 9999 +#define ABS_MAXFRAMENR -1 /* no limit */ static int ARG_STATS = 0; static int ARG_DUMP = 0; @@ -164,6 +164,7 @@ static int ARG_VHQMODE = 0; static int ARG_BVHQ = 0; static int ARG_CLOSED_GOP = 0; +static int ARG_THREADS = 0; #ifndef READ_PNM #define IMAGE_SIZE(x,y) ((x)*(y)*3/2) @@ -397,6 +398,9 @@ ARG_GMC = 1; } else if (strcmp("-interlaced", argv[i]) == 0) { ARG_INTERLACING = 1; + } else if (strcmp("-threads", argv[i]) == 0) { + i++; + ARG_THREADS = atoi(argv[i]); } else if (strcmp("-closed_gop", argv[i]) == 0) { ARG_CLOSED_GOP = 1; } else if (strcmp("-help", argv[i])) { @@ -431,7 +435,7 @@ return (-1); } - if (ARG_MAXFRAMENR <= 0) { + if (ARG_MAXFRAMENR == 0) { fprintf(stderr, "Wrong number of frames\n"); return (-1); } @@ -445,6 +449,12 @@ ARG_INPUTTYPE==2) { AVISTREAMINFO avi_info; + FILE *avi_fp = fopen(ARG_INPUTFILE, "rb"); + if (avi_fp == NULL) { + fprintf(stderr, "Couldn't open file '%s'!\n", ARG_INPUTFILE); + return (-1); + } + fclose(avi_fp); AVIFileInit(); if (AVIStreamOpenFromFile(&avi_stream, ARG_INPUTFILE, streamtypeVIDEO, 0, OF_READ, NULL) != AVIERR_OK) { @@ -467,6 +477,12 @@ return (-1); } + + if (ARG_MAXFRAMENR<0) + ARG_MAXFRAMENR = avi_info.dwLength; + else + ARG_MAXFRAMENR = min(ARG_MAXFRAMENR, avi_info.dwLength); + XDIM = avi_info.rcFrame.right - avi_info.rcFrame.left; YDIM = avi_info.rcFrame.bottom - avi_info.rcFrame.top; ARG_FRAMERATE = (float) avi_info.dwRate / (float) avi_info.dwScale; @@ -548,7 +564,7 @@ char *type; int sse[3]; - if (input_num >= ARG_MAXFRAMENR) { + if (input_num >= ARG_MAXFRAMENR && ARG_MAXFRAMENR > 0) { result = 1; } @@ -754,7 +770,7 @@ clock_t clk; clk = clock(); - return (clk * 1000 / CLOCKS_PER_SEC); + return (clk * 1000.0 / CLOCKS_PER_SEC); #endif } @@ -1105,8 +1121,7 @@ } #endif - /* No fancy thread tests */ - xvid_enc_create.num_threads = 0; + xvid_enc_create.num_threads = ARG_THREADS; /* Frame rate - Do some quick float fps = fincr/fbase hack */ if ((ARG_FRAMERATE - (int) ARG_FRAMERATE) < SMALL_EPS) {