--- divx4.c 2002/11/16 23:38:16 1.20 +++ divx4.c 2003/06/09 13:50:12 1.21.2.2 @@ -1,58 +1,28 @@ -/************************************************************************** +/***************************************************************************** * * XVID MPEG-4 VIDEO CODEC - * - OpenDivx API wrapper - + * - DivX 4.x compatibility layer (Deprecated and not up2date code) - * - * Copyright(C) 2001-2002 Peter Ross + * Copyright(C) 2001-2003 Peter Ross + * 2002-2003 Edouard Gomez * - * This file is part of XviD, a free MPEG-4 video encoder/decoder - * - * XviD is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * This program is free software ; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation ; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of + * but WITHOUT ANY WARRANTY ; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software + * along with this program ; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Under section 8 of the GNU General Public License, the copyright - * holders of XVID explicitly forbid distribution in the following - * countries: - * - * - Japan - * - United States of America - * - * Linking XviD statically or dynamically with other modules is making a - * combined work based on XviD. Thus, the terms and conditions of the - * GNU General Public License cover the whole combination. - * - * As a special exception, the copyright holders of XviD give you - * permission to link XviD with independent modules that communicate with - * XviD solely through the VFW1.1 and DShow interfaces, regardless of the - * license terms of these independent modules, and to copy and distribute - * the resulting combined work under terms of your choice, provided that - * every copy of the combined work is accompanied by a complete copy of - * the source code of XviD (the version of XviD used to produce the - * combined work), being distributed under the terms of the GNU General - * Public License plus this exception. An independent module is a module - * which is not derived from or based on XviD. - * - * Note that people who make modified versions of XviD are not obligated - * to grant this special exception for their modified versions; it is - * their choice whether to do so. The GNU General Public License gives - * permission to release a modified version without this exception; this - * exception also makes it possible to release a modified version which - * carries forward this exception. - * - * $Id: divx4.c,v 1.20 2002/11/16 23:38:16 edgomez Exp $ + * $Id: divx4.c,v 1.21.2.2 2003/06/09 13:50:12 edgomez Exp $ * - *************************************************************************/ + ****************************************************************************/ #include #include @@ -65,7 +35,7 @@ #define EMULATED_DIVX_VERSION 20011001 -/************************************************************************** +/***************************************************************************** * Divx Instance Structure * * This chain list datatype allows XviD do instanciate multiples divx4 @@ -75,7 +45,7 @@ * because they are not protected by any kind of mutex to allow * only one modifier. We should add a mutex for each element in * the chainlist. - *************************************************************************/ + ****************************************************************************/ typedef struct DINST @@ -99,16 +69,16 @@ } EINST; -/************************************************************************** +/***************************************************************************** * Global data (needed to emulate correctly exported symbols from divx4) - *************************************************************************/ + ****************************************************************************/ /* This is not used in this module but is required by some divx4 encoders*/ int quiet_encore = 1; -/************************************************************************** +/***************************************************************************** * Local data - *************************************************************************/ + ****************************************************************************/ /* The Divx4 instance chainlist */ static DINST *dhead = NULL; @@ -118,20 +88,17 @@ static int const divx4_motion_presets[7] = { 0, - PMV_EARLYSTOP16, + 0, - PMV_EARLYSTOP16 | PMV_ADVANCEDDIAMOND16, + XVID_ME_ADVANCEDDIAMOND16, - PMV_EARLYSTOP16 | PMV_HALFPELREFINE16, + XVID_ME_HALFPELREFINE16, - PMV_EARLYSTOP16 | PMV_HALFPELREFINE16 | PMV_EARLYSTOP8 | - PMV_HALFPELREFINE8, + XVID_ME_HALFPELREFINE16 | XVID_ME_HALFPELREFINE8, - PMV_EARLYSTOP16 | PMV_HALFPELREFINE16 | PMV_EARLYSTOP8 | - PMV_HALFPELREFINE8, + XVID_ME_HALFPELREFINE16 | XVID_ME_HALFPELREFINE8, - PMV_EARLYSTOP16 | PMV_HALFPELREFINE16 | PMV_EXTSEARCH16 | PMV_EARLYSTOP8 | - PMV_HALFPELREFINE8 + XVID_ME_HALFPELREFINE16 | XVID_ME_EXTSEARCH16 | XVID_ME_HALFPELREFINE8 }; @@ -140,15 +107,15 @@ 0, XVID_H263QUANT, XVID_H263QUANT, - XVID_H263QUANT | XVID_HALFPEL, - XVID_H263QUANT | XVID_INTER4V | XVID_HALFPEL, - XVID_H263QUANT | XVID_INTER4V | XVID_HALFPEL, - XVID_H263QUANT | XVID_INTER4V | XVID_HALFPEL + XVID_H263QUANT | XVID_VOP_HALFPEL, + XVID_H263QUANT | XVID_VOP_INTER4V | XVID_VOP_HALFPEL, + XVID_H263QUANT | XVID_VOP_INTER4V | XVID_VOP_HALFPEL, + XVID_H263QUANT | XVID_VOP_INTER4V | XVID_VOP_HALFPEL }; -/************************************************************************** +/***************************************************************************** * Local Prototypes - *************************************************************************/ + ****************************************************************************/ /* Chain list helper functions */ static DINST *dinst_find(unsigned long key); @@ -163,12 +130,12 @@ static int xvid_to_opendivx_dec_csp(int csp); static int xvid_to_opendivx_enc_csp(int csp); -/************************************************************************** +/***************************************************************************** * decore part * * decore is the divx4 entry point used to decompress the mpeg4 bitstream * into a user defined image format. - *************************************************************************/ + ****************************************************************************/ int decore(unsigned long key, @@ -299,7 +266,7 @@ } /* Decode the bitstream */ - xerr = decoder_decode(dcur->handle, &dcur->xframe); + xerr = decoder_decode(dcur->handle, &dcur->xframe, NULL); /* Restore the real colorspace for this instance */ if (!dframe->render_flag) { @@ -334,12 +301,12 @@ } } -/************************************************************************** +/***************************************************************************** * Encore Part * * encore is the divx4 entry point used to compress a frame to a mpeg4 * bitstream. - *************************************************************************/ + ****************************************************************************/ #define FRAMERATE_INCR 1001 @@ -382,6 +349,11 @@ xparam.max_quantizer = eparam->max_quantizer; xparam.max_key_interval = eparam->max_key_interval; + xparam.global = 0; + xparam.max_bframes = -1; /* use "original" IP-frame encoder */ + xparam.bquant_ratio = 200; + xparam.frame_drop_ratio = 0; /* dont drop frames */ + /* Create the encoder session */ xerr = encoder_create(&xparam); @@ -489,9 +461,9 @@ } } -/************************************************************************** +/***************************************************************************** * Local Functions - *************************************************************************/ + ****************************************************************************/ /*************************************** * DINST chainlist helper functions *