--- avifile-0.7-0.7.38/m4/xvid.m4.orig 2003-12-29 23:26:52.197966008 +0100 +++ avifile-0.7-0.7.38/m4/xvid.m4 2003-12-29 23:29:36.804941944 +0100 @@ -54,19 +54,18 @@ int main () { - XVID_INIT_PARAM xinit; + xvid_gbl_init_t xinit; + int i; system("touch conf.xvidtest"); + xinit.version = XVID_VERSION; xinit.cpu_flags = 0; - xvid_init(NULL, 0, &xinit, NULL); + i = xvid_global(NULL, 0, &xinit, NULL); - if (xinit.api_version == API_VERSION) { + if (i != XVID_ERR_VERSION) { return 0; } else { - printf("Header file and library are out of sync. Header file supports\n" - "version %d.%d API and shared library supports version %d.%d API.\n", - API_VERSION >> 16, API_VERSION & 0xFFFF, - xinit.api_version >> 16, xinit.api_version & 0xFFFF); + printf("Headers and library version mismatch.\n"); return 1; } } ], --- avifile-0.7-0.7.38/plugins/libxvid/fillplugins.h.orig 2003-03-23 01:57:47.000000000 +0100 +++ avifile-0.7-0.7.38/plugins/libxvid/fillplugins.h 2003-12-29 22:36:21.944634536 +0100 @@ -28,7 +28,7 @@ XVIDCSTR(interlacing); XVIDCSTR(quant_type); -#if API_VERSION >= ((2 << 16) | (1)) +#if XVID_API >= XVID_MAKE_API(2, 1) XVIDCSTR(inter4v); XVIDCSTR(diamond_search); XVIDCSTR(adaptive_quant); --- avifile-0.7-0.7.38/plugins/libxvid/xvid.cpp.orig 2003-05-20 16:39:20.000000000 +0200 +++ avifile-0.7-0.7.38/plugins/libxvid/xvid.cpp 2003-12-30 00:36:58.431521312 +0100 @@ -55,13 +55,15 @@ if (m_pHandle) return -1; - XVID_INIT_PARAM init; - XVID_DEC_PARAM param; + xvid_gbl_init_t init; + xvid_dec_create_t param; + init.version = XVID_VERSION; init.cpu_flags = 0; //init.cpu_flags = XVID_CPU_FORCE;// | XVID_CPU_MMX; - xvid_init(NULL, 0, &init, NULL); + xvid_global(NULL, 0, &init, NULL); + param.version = XVID_VERSION; param.width = m_Dest.biWidth; param.height = labs(m_Dest.biHeight); @@ -88,10 +90,11 @@ int is_keyframe, bool render = true, CImage** pOut = 0) { - XVID_DEC_FRAME param; + xvid_dec_frame_t param; if (!size || !m_pHandle) return 0; //AVM_WRITE(strDebug, "csp: 0x%x bitcount: %d height: %d\n", csp, m_Dest.biBitCount, m_Dest.biHeight); + param.version = XVID_VERSION; param.bitstream = (void*) src; param.length = size; @@ -107,74 +110,63 @@ case 16: if (csp == 3) { - param.colorspace = XVID_CSP_RGB565; + param.output.csp = XVID_CSP_RGB565; break; } // 16 bit with csp == 0 is 15bit /* fall through */ case 15: - param.colorspace = XVID_CSP_RGB555; + param.output.csp = XVID_CSP_RGB555; break; case 24: - param.colorspace = XVID_CSP_RGB24; + param.output.csp = XVID_CSP_BGR; break; case 32: - param.colorspace = XVID_CSP_RGB32; + param.output.csp = XVID_CSP_RGBA; break; default: return -1; } if (pImage->GetFmt()->biHeight > 0) - param.colorspace |= XVID_CSP_VFLIP; + param.output.csp |= XVID_CSP_VFLIP; // RGB also doesn't seems work; - param.colorspace = XVID_CSP_USER; + param.output.csp = XVID_CSP_USER; break; case fccYV12: - //param.colorspace = XVID_CSP_YV12; - param.colorspace = XVID_CSP_USER; + //param.output.csp = XVID_CSP_YV12; + param.output.csp = XVID_CSP_USER; break; case fccI420: - param.colorspace = XVID_CSP_I420; // untested + param.output.csp = XVID_CSP_I420; // untested break; case fccYUY2: - param.colorspace = XVID_CSP_YUY2; + param.output.csp = XVID_CSP_YUY2; break; case fccYVYU: - param.colorspace = XVID_CSP_YVYU; + param.output.csp = XVID_CSP_YVYU; break; case fccUYVY: - param.colorspace = XVID_CSP_UYVY; + param.output.csp = XVID_CSP_UYVY; break; default: return -1; } - //printf("XXXXXXXXXX %d %d %d\n", size, m_Dest.biWidth, param.colorspace); + //printf("XXXXXXXXXX %d %d %d\n", size, m_Dest.biWidth, param.output.csp); - param.stride = pImage->Width(); //+6; - param.image = pImage->Data(); + param.output.stride[0] = pImage->Width(); //+6; + param.output.plane[0] = pImage->Data(); pImage->SetQuality((float) m_iLastPPMode / MAX_QUALITY); } else - param.colorspace = XVID_CSP_NULL; + param.output.csp = XVID_CSP_NULL; if (xvid_decore(m_pHandle, XVID_DEC_DECODE, ¶m, NULL) != 0) return -1; - if (param.colorspace == XVID_CSP_USER) + if (param.output.csp == XVID_CSP_USER) { - // internal format of XVID data - using for YV12 - // for some reason I couldn't read YV12 with CSP setting - struct dp - { - const uint8_t *y; - const uint8_t *u; - const uint8_t *v; - int stride_y; - int stride_uv; - }; - const struct dp* d = (const struct dp*) param.image; - const uint8_t* p[3] = { d->y, d->v, d->u }; - int s[3] = { d->stride_y, d->stride_uv, d->stride_uv }; + void* p[3] = { param.output.plane[0], param.output.plane[1], param.output.plane[2] }; + int s[3] = { param.output.stride[0], param.output.stride[1], param.output.stride[2] }; BitmapInfo bi(m_Dest); bi.SetSpace(fccYV12); CImage ci(&bi, (const uint8_t**) p, s, false); @@ -242,7 +234,8 @@ void* m_pHandle; int m_iQuant; bool m_bRtMode; - int general; + int vol_flags; + int vop_flags; int motion; public: XVID_VideoEncoder(const CodecInfo& info, fourcc_t compressor, const BITMAPINFOHEADER& bh) @@ -259,40 +252,43 @@ virtual int EncodeFrame(const CImage* src, void* dest, int* is_keyframe, uint_t* size, int* lpckid=0) { int xerr; - XVID_ENC_FRAME param; - XVID_ENC_STATS result; + xvid_enc_frame_t param; + xvid_enc_stats_t result; + param.version = XVID_VERSION; + result.version = XVID_VERSION; param.bitstream = dest; switch (m_bh.biCompression) { case 0: - param.colorspace = XVID_CSP_RGB24; + param.input.csp = XVID_CSP_BGR; break; case fccYUY2: - param.colorspace = XVID_CSP_YUY2; + param.input.csp = XVID_CSP_YUY2; break; case fccYV12: - param.colorspace = XVID_CSP_YV12; + param.input.csp = XVID_CSP_YV12; break; case fccI420: - param.colorspace = XVID_CSP_I420; + param.input.csp = XVID_CSP_I420; break; } - param.image = (void*) src->Data(); + param.input.plane[0] = (void*) src->Data(); param.length = -1; // this is written by the routine param.quant = 0; - param.intra = (!m_uiFrames++) ? 1 : -1; + //param.intra = (!m_uiFrames++) ? 1 : -1; -#if API_VERSION >= (2 << 16) - param.general = general; +#if XVID_API >= XVID_MAKE_API(2, 0) + param.vol_flags = vol_flags; + param.vop_flags = vop_flags; param.motion = motion; #endif if (m_bRtMode) { param.quant=m_iQuant; // let encoder decide if frame is INTER/INTRA - param.intra=-1; + //param.intra=-1; xerr = xvid_encore(m_pHandle, XVID_ENC_ENCODE, ¶m, &result); } else @@ -300,11 +296,11 @@ xerr = xvid_encore(m_pHandle, XVID_ENC_ENCODE, ¶m, &result); } - //printf("%d %d %d\n", param.intra, param.colorspace, param.length); + //printf("%d %d %d\n", param.intra, param.input.csp, param.length); // xframe.quant = QUANTI; // is quant != 0, use a fixed quant (and ignore bitrate) if (is_keyframe) - *is_keyframe = param.intra ? 16 : 0; + *is_keyframe = (param.type == XVID_KEYFRAME) ? 16 : 0; if (size) *size = param.length; return 0; @@ -331,14 +327,16 @@ { int xerr; - XVID_INIT_PARAM xinit; - XVID_ENC_PARAM param; + xvid_gbl_init_t xinit; + xvid_enc_create_t param; m_uiFrames = 0; + xinit.version = XVID_VERSION; xinit.cpu_flags = 0; - xvid_init(NULL, 0, &xinit, NULL); + xvid_global(NULL, 0, &xinit, NULL); memset(¶m, 0, sizeof(param)); + param.version = XVID_VERSION; param.width = m_bh.biWidth; param.height = labs(m_bh.biHeight); @@ -348,17 +346,17 @@ PluginGetAttrInt(m_Info, xvidstr_rc_bitrate, &t); -#if API_VERSION >= ((2 << 16) | (1)) - param.rc_bitrate = t; // such API change are not funny at all +#if XVID_API >= XVID_MAKE_API(2, 1) + //param.rc_bitrate = t; // such API change are not funny at all #else param.bitrate = t; #endif -#if API_VERSION >= (2 << 16) +#if XVID_API >= XVID_MAKE_API(2, 0) PluginGetAttrInt(m_Info, xvidstr_rc_buffer, &t); -#if API_VERSION >= ((2 << 16) | (1)) - param.rc_buffer = t; +#if XVID_API >= XVID_MAKE_API(2, 1) + //param.rc_buffer = t; #else param.rc_buffersize = t; #endif @@ -366,48 +364,20 @@ switch (t) { default: - case 0: general = XVID_H263QUANT; break; - case 1: general = XVID_MPEGQUANT; break; + case 0: vol_flags = 0; break; + case 1: vol_flags = XVID_VOL_MPEGQUANT; break; } -#if API_VERSION >= ((2 << 16) | (1)) PluginGetAttrInt(m_Info, xvidstr_inter4v, &t); - if (t) general |= XVID_INTER4V; + if (t) vop_flags |= XVID_VOP_INTER4V; PluginGetAttrInt(m_Info, xvidstr_diamond_search, &t); - if (t) general |= PMV_HALFPELDIAMOND16 | PMV_HALFPELDIAMOND8; - - PluginGetAttrInt(m_Info, xvidstr_adaptive_quant, &t); - if (t) general |= XVID_ADAPTIVEQUANT; -#endif - PluginGetAttrInt(m_Info, xvidstr_halfpel, &t); - if (t) general |= XVID_HALFPEL; + if (t) vop_flags |= XVID_VOP_HALFPEL; -#ifdef XVID_INTERLACING +#ifdef XVID_VOL_INTERLACING PluginGetAttrInt(m_Info, xvidstr_interlacing, &t); - if (t) general |= XVID_INTERLACING; -#endif - PluginGetAttrInt(m_Info, xvidstr_lum_masking, &t); - if (t) general |= XVID_LUMIMASKING; - - // table from the xvid sample source code - static const int motion_presets[7] = - { - 0, - PMV_EARLYSTOP16, - PMV_EARLYSTOP16, - PMV_EARLYSTOP16 | PMV_HALFPELREFINE16, - PMV_EARLYSTOP16 | PMV_HALFPELREFINE16, - PMV_EARLYSTOP16 | PMV_HALFPELREFINE16 | PMV_EARLYSTOP8 - | PMV_HALFPELREFINE8, - PMV_EARLYSTOP16 | PMV_HALFPELREFINE16 | PMV_EXTSEARCH16 - | PMV_EARLYSTOP8 | PMV_HALFPELREFINE8 | PMV_EXTSEARCH8 -#ifdef XVID_INTERLACING - | PMV_USESQUARES16 | PMV_USESQUARES8 + if (t) vol_flags |= XVID_VOL_INTERLACING; #endif - }; - PluginGetAttrInt(m_Info, xvidstr_motion_search, &t); - motion = (t >= 0 && t < 7) ? motion_presets[t] : 0; #if 0 // Motion estimation options @@ -434,8 +404,8 @@ PluginGetAttrInt(m_Info, xvidstr_rc_reaction_ratio, ¶m.rc_reaction_ratio); PluginGetAttrInt(m_Info, xvidstr_motion_search, ¶m.motion_search); #endif - PluginGetAttrInt(m_Info, xvidstr_max_quantizer, ¶m.max_quantizer); - PluginGetAttrInt(m_Info, xvidstr_min_quantizer, ¶m.min_quantizer); + PluginGetAttrInt(m_Info, xvidstr_max_quantizer, ¶m.max_quant[0]); + PluginGetAttrInt(m_Info, xvidstr_min_quantizer, ¶m.min_quant[0]); PluginGetAttrInt(m_Info, xvidstr_max_key_interval, ¶m.max_key_interval); // fast deinterlace // use bidirectional coding