--- divx4.c 2002/03/08 02:44:29 1.1 +++ divx4.c 2002/04/21 02:30:24 1.7 @@ -39,8 +39,11 @@ * *************************************************************************/ - +#ifndef FREEBSD #include +#else +#include +#endif #include // memset #include "xvid.h" @@ -251,7 +254,8 @@ case DEC_OPT_FRAME: { - int csp_tmp; + int csp_tmp = 0; + DEC_FRAME * dframe = (DEC_FRAME *)param1; DINST * dcur = dinst_find(key); if (dcur == NULL) @@ -309,6 +313,16 @@ #define FRAMERATE_INCR 1001 +int divx4_motion_presets[7] = { + 0, PMV_QUICKSTOP16, PMV_EARLYSTOP16, PMV_EARLYSTOP16 | PMV_EARLYSTOP8, + PMV_EARLYSTOP16 | PMV_HALFPELREFINE16 | PMV_EARLYSTOP8 | PMV_HALFPELDIAMOND8, + PMV_EARLYSTOP16 | PMV_HALFPELREFINE16 | PMV_EARLYSTOP8 | PMV_HALFPELDIAMOND8, + PMV_EARLYSTOP16 | PMV_HALFPELREFINE16 | PMV_EXTSEARCH16 | + PMV_EARLYSTOP8 | PMV_HALFPELREFINE8 | PMV_HALFPELDIAMOND8 +}; + +int quality; + int encore(void * handle, int opt, void * param1, void * param2) { int xerr; @@ -336,11 +350,14 @@ xparam.fincr = FRAMERATE_INCR; xparam.fbase = (int)(FRAMERATE_INCR * eparam->framerate); } - xparam.bitrate = eparam->bitrate; - xparam.rc_buffersize = eparam->bitrate; + xparam.rc_bitrate = eparam->bitrate; + xparam.rc_reaction_delay_factor = 16; + xparam.rc_averaging_period = 100; + xparam.rc_buffer = 100; xparam.min_quantizer = eparam->min_quantizer; xparam.max_quantizer = eparam->max_quantizer; xparam.max_key_interval = eparam->max_key_interval; + quality = eparam->quality; xerr = encoder_create(&xparam); @@ -366,6 +383,13 @@ xframe.bitstream = eframe->bitstream; xframe.length = eframe->length; + xframe.general = XVID_HALFPEL | XVID_H263QUANT; + + if(quality > 3) + xframe.general |= XVID_INTER4V; + + xframe.motion = divx4_motion_presets[quality]; + xframe.image = eframe->image; switch (eframe->colorspace) {