aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--DOCS/man/en/mplayer.193
-rw-r--r--DOCS/xml/en/codecs.xml71
-rw-r--r--DOCS/xml/en/install.xml22
-rw-r--r--cfg-common.h8
-rw-r--r--cfg-mencoder.h20
-rw-r--r--cfg-mplayer.h4
-rw-r--r--codec-cfg.c2
-rwxr-xr-xconfigure133
-rw-r--r--divx4_vbr.c406
-rw-r--r--divx4_vbr.h17
-rw-r--r--etc/codecs.conf39
-rw-r--r--help/help_mp-en.h6
-rw-r--r--libmpcodecs/Makefile9
-rw-r--r--libmpcodecs/vd.c8
-rw-r--r--libmpcodecs/vd_divx4.c327
-rw-r--r--libmpcodecs/vd_odivx.c296
-rw-r--r--libmpcodecs/ve.c4
-rw-r--r--libmpcodecs/ve_divx4.c488
-rw-r--r--libmpdemux/video.c4
-rw-r--r--libvo/video_out.c1
-rw-r--r--mencoder.c3
22 files changed, 9 insertions, 1954 deletions
diff --git a/ChangeLog b/ChangeLog
index ecda8b3fe0..aa7eb98f70 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,7 @@ MPlayer (1.0)
Decoders:
* liba52 updated to 0.7.4 (slightly faster)
* SSE optimizations for mp3lib
+ * removed support for obsolete and non-free divx4 libraries
Demuxers:
* support for audio stream switching in MPEG-TS/PS, Matroska and
@@ -20,6 +21,7 @@ MPlayer (1.0)
MEncoder:
* support of x264 encoding over lavc
+ * removed support for obsolete and non-free divx4 libraries
Others:
* SSA/ASS subtitle renderer
diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1
index a2bdf7dfb9..a6ae60ce9a 100644
--- a/DOCS/man/en/mplayer.1
+++ b/DOCS/man/en/mplayer.1
@@ -3870,14 +3870,6 @@ Do not play/\:encode video.
In many cases this will not work, use \-vc null \-vo null instead.
.
.TP
-.B \-oldpp <quality> (OpenDivX only) (OBSOLETE)
-Use the OpenDivX postprocessing code instead of the internal one.
-Superseded by \-pp, the internal postprocessing offers better
-quality and performance.
-The valid range of \-oldpp values varies by codec, it is mostly
-0\-6, where 0=disable, 6=slowest/\:best.
-.
-.TP
.B \-pp <quality> (also see \-vf pp)
Set the DLL postprocess level.
This option is no longer usable with \-vf pp.
@@ -3987,8 +3979,6 @@ See \-vc help for a full list of available codecs.
.RSs
.IPs "\-vc divx"
Force Win32/\:VfW DivX codec, no fallback.
-.IPs "\-vc divx4,"
-Try divx4linux codec first, then fall back on others.
.IPs "\-vc -divxds,-divx,"
Skip Win32 DivX codecs.
.IPs "\-vc ffmpeg12,mpeg12,"
@@ -6484,8 +6474,6 @@ Use \-ovc help to get a list of available video codecs.
.RSs
.IPs "\-ovc copy"
no encoding, just streamcopy
-.IPs "\-ovc divx4"
-Encode to DivX4/\:DivX5.
.IPs "\-ovc raw"
Encode to an arbitrary uncompressed format (use '\-vf format' to select).
.IPs "\-ovc lavc"
@@ -6528,89 +6516,10 @@ syntax:
.B \-<codec>opts <option1[=value],option2,...>
.
.PP
-Where <codec> may be: lavc, xvidenc, divx4, lame, toolame, twolame,
+Where <codec> may be: lavc, xvidenc, lame, toolame, twolame,
nuv, xvfw, faac, x264enc, mpeg, lavf.
.
.
-.SS divx4 (\-divx4opts)
-.
-DivX4 is obsolete and only supported for completeness.
-For details about DivX4 options, read the source, most options are not
-described here.
-.
-.TP
-.B help\ \ \
-get help
-.
-.TP
-.B br=<value>
-Specify bitrate.
-.RSs
-.IPs 4\-16000
-(in kbit)
-.IPs 16001\-24000000
-(in bit)
-.RE
-.
-.TP
-.B key=<value>
-maximum keyframe interval (in frames)
-.
-.TP
-.B deinterlace
-Enable deinterlacing (avoid it, DivX4 is buggy).
-.
-.TP
-.B q=<1\-5>
-quality (1\-fastest, 5\-best)
-.
-.TP
-.B min_quant=<1\-31>
-minimum quantizer
-.
-.TP
-.B max_quant=<1\-31>
-maximum quantizer
-.
-.TP
-.B rc_period=<value>
-rate control period
-.
-.TP
-.B rc_reaction_period=<value>
-rate control reaction period
-.
-.TP
-.B rc_reaction_ratio=<value>
-rate control reaction ratio
-.
-.TP
-.B crispness=<0\-100>
-Specify crispness/\:smoothness.
-.
-.TP
-.B pass=<1\-2>
-With this you can encode two pass DivX4 files.
-First encode with pass=1, then do another encode with the
-same parameters and pass=2.
-.
-.TP
-.B vbrpass=<0\-2>
-Override the pass argument and use the XviD VBR library instead of DivX4 VBR.
-Available options are:
-.PD 0
-.RSs
-.IPs 0
-one pass encoding (as in not putting pass on the command line)
-.IPs 1
-Analysis (first) pass of two pass encoding.
-The resulting AVI file can be directed to /dev/\:null.
-.IPs 2
-Final (second) pass of two pass encoding.
-.RE
-.PD 1
-.
-.
.SS lame (\-lameopts)
.
.TP
diff --git a/DOCS/xml/en/codecs.xml b/DOCS/xml/en/codecs.xml
index 84b1bd5d5a..2ac51e4689 100644
--- a/DOCS/xml/en/codecs.xml
+++ b/DOCS/xml/en/codecs.xml
@@ -76,77 +76,6 @@ and help us add support for it.
</para>
-<sect2 id="divx4-5">
-<title>DivX4/DivX5</title>
-
-<para>
-This section contains information about the DivX4 and DivX5 codecs of
-<ulink url="http://www.projectmayo.com">Project Mayo</ulink>.
-Their first available alpha version was OpenDivX 4.0 alpha 47 and 48.
-Support for this was included in <application>MPlayer</application> in the
-past, and built by default. We also used its postprocessing code to
-optionally enhance visual quality of MPEG-1/2 movies. Now we use our own,
-for all file types.
-</para>
-
-<para>
-The new generation of this codec is called DivX4 and can even decode
-movies made with the infamous DivX codec! In addition it is much faster
-than the native Win32 DivX DLLs but slower than
-<systemitem class="library">libavcodec</systemitem>.
-Hence its usage as a decoder is
-<emphasis role="bold">discouraged</emphasis>. However, it is useful for
-encoding. One disadvantage of this codec is that it is not available under an
-Open Source license.
-</para>
-
-<para>
-DivX4 works in two modes:
-<variablelist>
-<varlistentry><term><option>-vc odivx</option></term>
-<listitem><simpara>
- Uses the codec in OpenDivX fashion. In this case it produces YV12 images
- in its own buffer, and <application>MPlayer</application> does colorspace
- conversion via libvo. (<emphasis role="bold">Fast, recommended!</emphasis>)
- </simpara></listitem>
-</varlistentry>
-<varlistentry><term><option>-vc divx4</option></term>
-<listitem><simpara>
- Uses the colorspace conversion of the codec. In this mode you can use
- YUY2/UYVY, too. (<emphasis role="bold">SLOW</emphasis>)
- </simpara></listitem>
-</varlistentry>
-</variablelist>
-</para>
-
-<para>
-The <option>-vc odivx</option> method is usually faster, due to the fact
-that it transfers image data in YV12 (planar YUV 4:2:0) format, thus
-requiring much less bandwidth on the bus. For packed YUV modes (YUY2, UYVY)
-use the <option>-vc divx4</option> method. For RGB modes the speed is the
-same, differing at best according to your current color depth.
-If your video output driver supports direct rendering, then <option>-vc
-divx4</option> may be faster, or even the fastest solution.
-</para>
-
-<para>
-The DivX4/5 binary codec library can be downloaded from
-<ulink url="http://avifile.sf.net">avifile</ulink> or
-<ulink url="http://www.divx.com">divx.com</ulink>
-Unpack it, run <filename>./install.sh</filename> as root and do not forget to add
-<filename class="directory">/usr/local/lib</filename> to your
-<filename>/etc/ld.so.conf</filename> and running <command>ldconfig</command>.
-</para>
-
-<para>
-<application>MPlayer</application> autodetects DivX4/DivX5 if it is
-properly installed, just compile as usual. If it does not detect it, you
-did not install or configure it correctly.
-</para>
-
-</sect2>
-
-
<sect2 id="ffmpeg" xreflabel="FFmpeg/libavcodec">
<title>FFmpeg/libavcodec</title>
diff --git a/DOCS/xml/en/install.xml b/DOCS/xml/en/install.xml
index c1aa0f6d3e..3ea2f15e4d 100644
--- a/DOCS/xml/en/install.xml
+++ b/DOCS/xml/en/install.xml
@@ -196,28 +196,6 @@ You need a fairly recent system. On Linux, 2.4.x kernels are recommended.
<link linkend="sorenson">Sorenson video codec</link> section.
</para></listitem>
<listitem><para>
- <emphasis role="bold">DivX4/DivX5</emphasis>: information about this codec is
- available in the <link linkend="divx4-5">DivX4/DivX5</link> section. You possibly
- don't want this codec as
- <emphasis role="bold"><systemitem class="library">libavcodec</systemitem></emphasis>
- (see above) is much faster and has better quality than this, for both decoding
- and encoding. Features:
- <itemizedlist>
- <listitem><simpara>
- one pass or two pass encoding with
- <link linkend="mencoder"><application>MEncoder</application></link>
- </simpara></listitem>
- <listitem><simpara>
- can play old <emphasis role="bold">DivX3</emphasis> movies much faster than
- the Win32 DLL but slower than
- <emphasis role="bold"><systemitem class="library">libavcodec</systemitem></emphasis>!
- </simpara></listitem>
- <listitem><simpara>
- it's closed-source, and only a x86 version is available.
- </simpara></listitem>
- </itemizedlist>
- </para></listitem>
-<listitem><para>
<emphasis role="bold">XviD</emphasis>: Open source encoding alternative to
DivX4Linux. Features:
<itemizedlist>
diff --git a/cfg-common.h b/cfg-common.h
index c863f4cc47..f27698b782 100644
--- a/cfg-common.h
+++ b/cfg-common.h
@@ -202,17 +202,9 @@
{"vc", &video_codec_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
// postprocessing:
- {"divxq", "-divxq has been renamed to -pp (postprocessing), use -pp.\n",
- CONF_TYPE_PRINT, 0, 0, 0, NULL},
#ifdef USE_LIBAVCODEC
{"pp", &divx_quality, CONF_TYPE_INT, 0, 0, 0, NULL},
#endif
-#ifdef HAVE_ODIVX_POSTPROCESS
- {"oldpp", &use_old_pp, CONF_TYPE_FLAG, 0, 0, 1, NULL},
-#else
- {"oldpp", "MPlayer was compiled without the OpenDivX library.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
-#endif
- {"npp", "-npp has been removed, use -vf pp and read the fine manual.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#if defined(USE_LIBPOSTPROC) || defined(USE_LIBPOSTPROC_SO)
{"pphelp", &pp_help, CONF_TYPE_PRINT_INDIRECT, CONF_NOCFG, 0, 0, NULL},
#endif
diff --git a/cfg-mencoder.h b/cfg-mencoder.h
index db0abb6340..64b821edc5 100644
--- a/cfg-mencoder.h
+++ b/cfg-mencoder.h
@@ -8,19 +8,12 @@
#ifdef USE_FAKE_MONO
extern int fakemono; // defined in dec_audio.c
#endif
-#ifdef HAVE_ODIVX_POSTPROCESS
-extern int use_old_pp;
-#endif
extern int sws_flags;
extern int readPPOpt(void *, char *arg);
extern void revertPPOpt(void *conf, char* opt);
extern char *pp_help;
-#ifdef HAVE_DIVX4ENCORE
-extern m_option_t divx4opts_conf[];
-#endif
-
#ifdef HAVE_MP3LAME
extern m_option_t lameopts_conf[];
#endif
@@ -62,7 +55,6 @@ extern m_option_t lavfopts_conf[];
m_option_t ovc_conf[]={
{"copy", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_COPY, NULL},
{"frameno", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_FRAMENO, NULL},
- {"divx4", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_DIVX4, NULL},
{"lavc", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_LIBAVCODEC, NULL},
// {"null", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_NULL, NULL},
{"raw", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_RAW, NULL},
@@ -77,13 +69,6 @@ m_option_t ovc_conf[]={
" frameno - special audio-only file for 3-pass encoding, see DOCS.\n"
" raw - uncompressed video. Use fourcc option to set format explicitly.\n"
" nuv - nuppel video\n"
-#ifdef HAVE_DIVX4ENCORE
-#ifdef ENCORE_XVID
- " divx4 - XviD (divx4linux compatibility mode)\n"
-#else
- " divx4 - divx4linux/divx5linux library (depends on configuration)\n"
-#endif
-#endif
#ifdef USE_LIBAVCODEC
" lavc - libavcodec codecs - best quality!\n"
#endif
@@ -239,7 +224,7 @@ m_option_t mencoder_opts[]={
// override avi aspect autodetection
{"force-avi-aspect", &avi_aspect_override, CONF_TYPE_FLOAT, CONF_RANGE|CONF_GLOBAL, 0.2, 3.0, NULL},
- {"pass", "-pass is obsolete, use -lavcopts vpass=n, -xvidencopts pass=n, -divx4opts pass=n\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
+ {"pass", "-pass is obsolete, use -lavcopts vpass=n, -xvidencopts pass=n\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"passlogfile", &passtmpfile, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
{"vobsubout", &vobsub_out, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
@@ -258,9 +243,6 @@ m_option_t mencoder_opts[]={
// info header strings
{"info", info_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
-#ifdef HAVE_DIVX4ENCORE
- {"divx4opts", divx4opts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
-#endif
#ifdef HAVE_MP3LAME
{"lameopts", lameopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#endif
diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index 26316af6c6..55ce1d13bc 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -89,10 +89,6 @@ extern int enqueue;
extern int guiWinID;
#endif
-#ifdef HAVE_ODIVX_POSTPROCESS
-extern int use_old_pp;
-#endif
-
#ifdef HAVE_XINERAMA
extern int xinerama_screen;
#endif
diff --git a/codec-cfg.c b/codec-cfg.c
index 21c3b89862..cdc0f70f52 100644
--- a/codec-cfg.c
+++ b/codec-cfg.c
@@ -284,11 +284,9 @@ static short get_driver(char *s,int audioflag)
"null",
"libmpeg2",
"vfw",
- "odivx",
"dshow",
"ffmpeg",
"vfwex",
- "divx4",
"raw",
"msrle",
"xanim",
diff --git a/configure b/configure
index cfe27db57c..1d0e28289a 100755
--- a/configure
+++ b/configure
@@ -260,8 +260,6 @@ Codecs:
--disable-real disable RealPlayer DLL support [autodetect]
--disable-xvid disable XviD codec [autodetect]
--disable-x264 disable H.264 encoder [autodetect]
- --disable-divx4linux disable DivX4linux/Divx5linux codec [autodetect]
- --enable-opendivx enable _old_ OpenDivx codec [disable]
--disable-libavutil disable libavutil [autodetect]
--disable-libavcodec disable libavcodec [autodetect]
--disable-libavformat disable libavformat [autodetect]
@@ -1661,8 +1659,6 @@ _vidix_external=auto
_joystick=no
_xvid=auto
_x264=auto
-_divx4linux=auto
-_opendivx=no
_lirc=auto
_lircc=auto
_gui=no
@@ -1908,10 +1904,6 @@ for ac_option do
--disable-xvid) _xvid=no ;;
--enable-x264) _x264=yes ;;
--disable-x264) _x264=no ;;
- --enable-divx4linux) _divx4linux=yes ;;
- --disable-divx4linux) _divx4linux=no ;;
- --enable-opendivx) _opendivx=yes ;;
- --disable-opendivx) _opendivx=no ;;
--enable-libavutil) _libavutil=yes ;;
--disable-libavutil) _libavutil=no ;;
--enable-libavutil_so) _libavutil_so=yes ;;
@@ -6559,81 +6551,8 @@ else
fi
echores "$_x264"
-echocheck "DivX4linux/DivX5linux/OpenDivX decore"
-# DivX5: DEC_OPT_MEMORY_REQS - DivX4: DEC_OPT_FRAME_311
-cat > $TMPC << EOF
-#include <decore.h>
-int main(void) { (void) decore(0, 0, 0, 0); return DEC_OPT_FRAME_311; }
-EOF
-if test "$_divx4linux" != no && cc_check $_ld_lm -ldivxdecore ; then
- _divx=yes
- _opendivx=no
- _ld_decore='-ldivxdecore'
- _def_decore='#define NEW_DECORE 1'
- _def_divx='#define USE_DIVX'
- _def_divx5='#undef DECORE_DIVX5'
- _def_odivx_postprocess='#undef HAVE_ODIVX_POSTPROCESS'
- _codecmodules="divx4linux $_codecmodules"
- _res_comment="DivX4linux - with libdivxdecore.so"
-else
-# if test "$_divx4linux" != no ; then
-# DivX5 check
-# OdivxPP disabled because of:
-# ld: Warning: type of symbol `dering' changed from 1 to 2 in opendivx/postprocess.o
-cat > $TMPC << EOF
-#include <decore.h>
-int main(void) { (void) decore(0, 0, 0, 0); return DEC_OPT_INIT; }
-EOF
-if test "$_divx4linux" != no && cc_check $_ld_lm -ldivxdecore ; then
- _divx=yes
- _opendivx=no
-# _ld_decore='-ldivxdecore opendivx/postprocess.o'
- _ld_decore='-ldivxdecore'
- _def_decore='#define NEW_DECORE 1'
- _def_divx='#define USE_DIVX'
- _def_divx5='#define DECORE_DIVX5 1'
-# _def_odivx_postprocess='#define HAVE_ODIVX_POSTPROCESS 1'
- _def_odivx_postprocess='#undef HAVE_ODIVX_POSTPROCESS'
- _codecmodules="divx5linux $_codecmodules"
- _nocodecmodules="divx4linux $_nocodecmodules"
- _res_comment="DivX5linux - with libdivxdecore.so"
-elif test "$_opendivx" != no ; then
- _divx=yes
- _opendivx=yes
- _ld_decore='opendivx/libdecore.a'
- _def_decore='#undef NEW_DECORE'
- _def_divx='#define USE_DIVX'
- _def_divx5='#undef DECORE_DIVX5'
- _def_odivx_postprocess='#define HAVE_ODIVX_POSTPROCESS 1'
- _codecmodules="opendivx $_codecmodules"
- _nocodecmodules="divx5linux $_nocodecmodules"
- _res_comment="OpenDivX"
-elif test "$_xvidcompat" = yes ; then
- _divx=yes
- _opendivx=no
- _ld_decore=''
- _def_decore='#define NEW_DECORE 1'
- _def_divx='#define USE_DIVX 1'
- _def_divx5='#undef DECORE_DIVX5'
- _def_decore_xvid='#define DECORE_XVID 1'
- _def_odivx_postprocess='#undef HAVE_ODIVX_POSTPROCESS'
- _nocodecmodules="opendivx divx5linux divx4linux $_nocodecmodules"
- _res_comment="XviD compat."
-else
- _divx=no
- _opendivx=no
- _ld_decore=''
- _def_decore='#undef NEW_DECORE'
- _def_divx='#undef USE_DIVX'
- _def_divx5='#undef DECORE_DIVX5'
- _def_odivx_postprocess='#undef HAVE_ODIVX_POSTPROCESS'
- _nocodecmodules="opendivx $_nocodecmodules"
-fi # DivX5 check
-fi
-echores "$_divx"
-
-
-# mencoder requires (optional) those libs: libmp3lame and divx4linux encore
+
+# mencoder requires (optional) those libs: libmp3lame
if test "$_mencoder" != no ; then
echocheck "libmp3lame (for mencoder)"
@@ -6665,29 +6584,6 @@ EOF
fi
echores "$_mp3lame"
-
- echocheck "DivX4linux encore (for mencoder)"
- cat > $TMPC << EOF
-#include <encore2.h>
-int main(void) { (void) encore(0, 0, 0, 0); return 0; }
-EOF
- if test "$_divx4linux" != no && cc_check -ldivxencore $_ld_lm ; then
- _divx_encore=yes
- _def_encore='#define HAVE_DIVX4ENCORE 1'
- _ld_encore='-ldivxencore'
- _res_comment="DivX4linux - with libdivxencore.so"
- elif test "$_xvidcompat" = yes ; then
- _divx_encore=yes
- _def_encore='#define HAVE_DIVX4ENCORE 1'
- _ld_encore=''
- _def_encore_xvid='#define ENCORE_XVID 1'
- _res_comment="XviD compatibility"
- else
- _divx_encore=no
- _def_encore='#undef HAVE_DIVX4ENCORE'
- fi
- echores "$_divx_encore"
-
fi
echocheck "mencoder"
@@ -7435,10 +7331,6 @@ CONFIG_PP = yes
CONFIG_MP3LAME = $_mp3lame
LIBMENU = $_menu
-DIVX = $_divx
-OPENDIVX = $_opendivx
-DIVX4ENCORE = $_divx_encore
-
MP3LIB = $_mp3lib
LIBA52 = $_liba52
LIBMPEG2 = $_libmpeg2
@@ -7558,9 +7450,9 @@ X264_INC = $_inc_x264
X264_LIB = $_ld_x264
CONFIG_DTS = $_libdts
DTS_LIB = $_ld_libdts
-DECORE_LIB = $_ld_decore $_ld_mp3lame
+DECORE_LIB = $_ld_mp3lame
MENCODER = $_mencoder
-ENCORE_LIB = $_ld_encore $_ld_mp3lame
+ENCORE_LIB = $_ld_mp3lame
DIRECTFB_INC = $_inc_directfb
DIRECTFB_LIB = $_ld_directfb
CDDA = $_cdda
@@ -7743,16 +7635,6 @@ $_def_have_dvd
-cache <kilobytes> */
#define USE_STREAM_CACHE 1
-/* Define to include support for XviD/Divx4Linux/OpenDivx */
-$_def_divx
-
-/* Define to use the new XviD/DivX4Linux library instead of open source OpenDivX */
-/* You have to change DECORE_LIBS in config.mak, too! */
-$_def_decore
-
-/* Define if you are using DivX5Linux Decore library */
-$_def_divx5
-
/* Define if you are using XviD library */
$_def_xvid3
$_def_xvid4
@@ -7768,10 +7650,6 @@ $_def_libdv
/* If build mencoder */
$_mencoder_flag
-/* Indicates if XviD/Divx4linux encore is available
- Note: for mencoder */
-$_def_encore
-
/* Indicates if libmp3lame is available
Note: for mencoder */
$_def_mp3lame
@@ -7941,9 +7819,6 @@ $_def_dvdnav_version
$_def_libpostproc
$_def_libpostproc_so
-/* Define to include support for OpenDivx postprocessing */
-$_def_odivx_postprocess
-
/* Win32 DLL support */
$_def_win32
#define WIN32_PATH "$_win32libdir"
diff --git a/divx4_vbr.c b/divx4_vbr.c
deleted file mode 100644
index 8a4aa4fda8..0000000000
--- a/divx4_vbr.c
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * divx4_vbr.c
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of the Linux
- * distribution for more details.
- *
- * 2-pass code OpenDivX port:
- * Copyright (C) 2001 Christoph Lampert <gruel@gmx.de>
- *
- * Large parts of this code were taken from VbrControl() from the OpenDivX
- * project, (C) divxnetworks, written by Eugene Kuznetsov <ekuznetsov@divxnetworks.com>
- * with the permission of Darrius "Junto" Thompson, Director DivX
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <math.h>
-#include <inttypes.h>
-
-#include "divx4_vbr.h"
-
-#include "mp_msg.h"
-#include "help_mp.h"
-
-//#include "transcode.h"
-
-#define FALSE 0
-#define TRUE 1
-
-/* Absolute maximum and minimum quantizers used in VBR modes */
-static const int min_quantizer=1;
-static const int max_quantizer=31;
-
-/* Limits on frame-level deviation of quantizer ( higher values
- correspond to frames with more changes and vice versa ) */
-static const float min_quant_delta=-10.f;
-static const float max_quant_delta=5.f;
-/* Limits on stream-level deviation of quantizer ( used to make
- overall bitrate of stream close to requested value ) */
-static const float min_rc_quant_delta=.6f;
-static const float max_rc_quant_delta=1.5f;
-
-/* Crispness parameter controls threshold for decision whether
- to skip the frame or to code it. */
-//static const float max_crispness=100.f;
-/* Maximum allowed number of skipped frames in a line. */
-//static const int max_drops_line=0; // CHL We don't drop frames at the moment!
-
-
-typedef struct entry_s
- /* max 28 bytes/frame or 5 Mb for 2-hour movie */
- {
- int quant;
- int text_bits;
- int motion_bits;
- int total_bits;
- float mult;
- short is_key_frame;
- short drop;
- } entry;
-
-static int m_iCount;
-static int m_iQuant;
-/*static int m_iCrispness;*/
-static short m_bDrop;
-static float m_fQuant;
-
-static int64_t m_lEncodedBits;
-static int64_t m_lExpectedBits;
-
-static FILE *m_pFile;
-
-static entry vFrame;
-static entry *m_vFrames;
-static long lFrameStart;
-
-static int iNumFrames;
-static int dummy;
-
-
-void VbrControl_init_1pass_vbr(int quality, int crispness)
-{
- m_fQuant=min_quantizer+((max_quantizer-min_quantizer)/6.)*(6-quality);
- m_iCount=0;
- m_bDrop=FALSE;
- VbrControl_update_1pass_vbr();
-}
-
-int VbrControl_init_2pass_vbr_analysis(const char *filename, int quality)
-{
- m_pFile=fopen(filename, "wb");
- if(m_pFile==0)
- return -1;
- m_iCount=0;
- m_bDrop=FALSE;
- fprintf(m_pFile, "##version 1\n");
- fprintf(m_pFile, "quality %d\n", quality);
- return 0;
-}
-
-int VbrControl_init_2pass_vbr_encoding(const char *filename, int bitrate, double framerate, int crispness, int quality)
-{
- int i;
-
- int64_t text_bits=0;
- int64_t total_bits=0;
- int64_t complexity=0;
- int64_t new_complexity=0;
- int64_t motion_bits=0;
- int64_t denominator=0;
- float qual_multiplier=1.;
- char head[20];
-
- int64_t desired_bits;
- int64_t non_text_bits;
-
- float average_complexity;
-
- m_pFile=fopen(filename, "rb");
- if(m_pFile==0)
- return -1;
- m_bDrop=FALSE;
- m_iCount=0;
-
- fread(head, 10, 1, m_pFile);
- if(!strncmp("##version ", head, 10))
- {
- int version;
- int iOldQual;
- float old_qual, new_qual;
- fscanf(m_pFile, "%d\n", &version);
- fscanf(m_pFile, "quality %d\n", &iOldQual);
- switch(iOldQual)
- {
- case 5:
- old_qual=1.f;
- break;
- case 4:
- old_qual=1.1f;
- break;
- case 3:
- old_qual=1.25f;
- break;
- case 2:
- old_qual=1.4f;
- break;
- case 1:
- old_qual=2.f;
- break;
- }
- switch(quality)
- {
- case 5:
- new_qual=1.f;
- break;
- case 4:
- new_qual=1.1f;
- break;
- case 3:
- new_qual=1.25f;
- break;
- case 2:
- new_qual=1.4f;
- break;
- case 1:
- new_qual=2.f;
- break;
- }
- qual_multiplier=new_qual/old_qual;
- }
- else
- fseek(m_pFile, 0, SEEK_SET);
-
- lFrameStart=ftell(m_pFile); // save current position
-
-/* removed C++ dependencies, now read file twice :-( */
-
-
- while(!feof(m_pFile))
- { fscanf(m_pFile, "Frame %d: intra %hd, quant %d, texture %d, motion %d, total %d\n",
- &iNumFrames, &(vFrame.is_key_frame), &(vFrame.quant), &(vFrame.text_bits), &(vFrame.motion_bits), &(vFrame.total_bits));
-
- vFrame.total_bits+=vFrame.text_bits*(qual_multiplier-1);
- vFrame.text_bits*=qual_multiplier;
- text_bits +=(int64_t)vFrame.text_bits;
- motion_bits += (int64_t)vFrame.motion_bits;
- total_bits +=(int64_t)vFrame.total_bits;
- complexity +=(int64_t)vFrame.text_bits*vFrame.quant;
-
-// printf("Frames %d, texture %d, motion %d, quant %d total %d ",
-// iNumFrames, vFrame.text_bits, vFrame.motion_bits, vFrame.quant, vFrame.total_bits);
-// printf("texture %d, total %d, complexity %lld \n",vFrame.text_bits,vFrame.total_bits, complexity);
- }
- iNumFrames++;
- average_complexity=complexity/iNumFrames;
-
-// if (verbose & TC_DEBUG) {
-// fprintf(stderr, "(%s) frames %d, texture %lld, motion %lld, total %lld, complexity %lld\n", __FILE__, iNumFrames, text_bits, motion_bits, total_bits, complexity);
-// }
-
- m_vFrames = malloc(iNumFrames*sizeof(entry));
- if (!m_vFrames)
- { mp_msg(MSGT_FIXME, MSGL_FIXME,MSGTR_OutOfMemory);
- return -2; //TC_EXPORT_ERROR;
- }
-
- fseek(m_pFile, lFrameStart, SEEK_SET); // start again
-
- for (i=0;i<iNumFrames;i++)
- { fscanf(m_pFile, "Frame %d: intra %hd, quant %d, texture %d, motion %d, total %d\n",
- &dummy, &(m_vFrames[i].is_key_frame), &(m_vFrames[i].quant),
- &(m_vFrames[i].text_bits), &(m_vFrames[i].motion_bits),
- &(m_vFrames[i].total_bits));
-
- m_vFrames[i].total_bits += m_vFrames[i].text_bits*(qual_multiplier-1);
- m_vFrames[i].text_bits *= qual_multiplier;
- }
-
- if (m_pFile)
- { fclose(m_pFile);
- m_pFile=NULL;
- }
-
- desired_bits=(int64_t)bitrate*(int64_t)iNumFrames/framerate;
- non_text_bits=total_bits-text_bits;
-
- if(desired_bits<=non_text_bits)
- {
-/* char s[200];*/
- mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_OverridingTooLowBitrate,
- (float)(non_text_bits*framerate/(int64_t)iNumFrames));
-
- desired_bits=non_text_bits*3/2;
-/*
- m_fQuant=max_quantizer;
- for(int i=0; i<iNumFrames; i++)
- {
- m_vFrames[i].drop=0;
- m_vFrames[i].mult=1;
- }
- VbrControl_set_quant(m_fQuant);
- return 0;
-*/
- }
-
- desired_bits -= non_text_bits;
- /**
- BRIEF EXPLANATION OF WHAT'S GOING ON HERE.
- We assume that
- text_bits=complexity / quantizer
- total_bits-text_bits = const(complexity)
- where 'complexity' is a characteristic of the frame
- and does not depend much on quantizer dynamics.
- Using this equation, we calculate 'average' quantizer
- to be used for encoding ( 1st order effect ).
- Having constant quantizer for the entire stream is not
- very convenient - reconstruction errors are
- more noticeable in low-motion scenes. To compensate
- this effect, we multiply quantizer for each frame by
- (complexity/average_complexity)^k,
- ( k - parameter of adjustment ). k=0 means 'no compensation'
- and k=1 is 'constant bitrate mode'. We choose something in
- between, like 0.5 ( 2nd order effect ).
- **/
-
- average_complexity=complexity/iNumFrames;
-
- for(i=0; i<iNumFrames; i++)
- {
- float mult;
- if(m_vFrames[i].is_key_frame)
- {
- if((i+1<iNumFrames) && (m_vFrames[i+1].is_key_frame))
- mult=1.25;
- else
- mult=.75;
- }
- else
- {
- mult=m_vFrames[i].text_bits*m_vFrames[i].quant;
- mult=(float)sqrt(mult/average_complexity);
-
-// if(i && m_vFrames[i-1].is_key_frame)
-// mult *= 0.75;
- if(mult<0.5)
- mult=0.5;
- if(mult>1.5)
- mult=1.5;
- }
-
- m_vFrames[i].mult=mult;
- m_vFrames[i].drop=FALSE;
- new_complexity+=m_vFrames[i].text_bits*m_vFrames[i].quant;
-
- denominator+=desired_bits*m_vFrames[i].mult/iNumFrames;
- }
-
- m_fQuant=((double)new_complexity)/(double)denominator;
-
- if(m_fQuant<min_quantizer) m_fQuant=min_quantizer;
- if(m_fQuant>max_quantizer) m_fQuant=max_quantizer;
- m_pFile=fopen("analyse.log", "wb");
- if(m_pFile)
- {
- fprintf(m_pFile, "Total frames: %d Avg quantizer: %f\n",
- iNumFrames, m_fQuant);
- fprintf(m_pFile, "Expecting %12lld bits\n", desired_bits+non_text_bits);
- fflush(m_pFile);
- }
- VbrControl_set_quant(m_fQuant*m_vFrames[0].mult);
- m_lEncodedBits=m_lExpectedBits=0;
- return 0;
-}
-
-int VbrControl_get_intra(void)
-{
- return m_vFrames[m_iCount].is_key_frame;
-}
-
-short VbrControl_get_drop(void)
-{
- return m_bDrop;
-}
-
-int VbrControl_get_quant(void)
-{
- return m_iQuant;
-}
-
-void VbrControl_set_quant(float quant)
-{
- m_iQuant=quant;
- if((rand() % 10)<((quant-m_iQuant) * 10))
- m_iQuant++;
- if(m_iQuant<min_quantizer) m_iQuant=min_quantizer;
- if(m_iQuant>max_quantizer) m_iQuant=max_quantizer;
-}
-
-void VbrControl_update_1pass_vbr(void)
-{
- VbrControl_set_quant(m_fQuant);
- m_iCount++;
-}
-
-void VbrControl_update_2pass_vbr_analysis(int is_key_frame, int motion_bits, int texture_bits, int total_bits, int quant)
-{
- if(!m_pFile)
- return;
- fprintf(m_pFile, "Frame %d: intra %d, quant %d, texture %d, motion %d, total %d\n",
- m_iCount, is_key_frame, quant, texture_bits, motion_bits, total_bits);
- m_iCount++;
-}
-
-void VbrControl_update_2pass_vbr_encoding(int motion_bits, int texture_bits, int total_bits)
-{
- double q;
- double dq;
-
- if(m_iCount>=iNumFrames)
- return;
-
- m_lExpectedBits+=(m_vFrames[m_iCount].total_bits-m_vFrames[m_iCount].text_bits)
- + m_vFrames[m_iCount].text_bits*m_vFrames[m_iCount].quant/m_fQuant;
- m_lEncodedBits+=(int64_t)total_bits;
-
- if(m_pFile)
- fprintf(m_pFile, "Frame %d: PRESENT, complexity %d, quant multiplier %f, texture %d, total %d ",
- m_iCount, m_vFrames[m_iCount].text_bits*m_vFrames[m_iCount].quant,
- m_vFrames[m_iCount].mult, texture_bits, total_bits);
-
- m_iCount++;
-
- q = m_fQuant * m_vFrames[m_iCount].mult;
- if(q<m_fQuant+min_quant_delta) q=m_fQuant+min_quant_delta;
- if(q>m_fQuant+max_quant_delta) q=m_fQuant+max_quant_delta;
-
- dq = (double)m_lEncodedBits/(double)m_lExpectedBits;
- dq*=dq;
- if(dq<min_rc_quant_delta)
- dq=min_rc_quant_delta;
- if(dq>max_rc_quant_delta)
- dq=max_rc_quant_delta;
- if(m_iCount<20) // no framerate corrections in first frames
- dq=1;
- if(m_pFile)
- fprintf(m_pFile, "Progress: expected %12lld, achieved %12lld, dq %f",
- m_lExpectedBits, m_lEncodedBits, dq);
- q *= dq;
- VbrControl_set_quant(q);
- if(m_pFile)
- fprintf(m_pFile, ", new quant %d\n", m_iQuant);
-}
-
-void VbrControl_close(void)
-{
- if(m_pFile)
- {
- fclose(m_pFile);
- m_pFile=NULL;
- }
- free(m_vFrames);
-}
diff --git a/divx4_vbr.h b/divx4_vbr.h
deleted file mode 100644
index ee26b23a89..0000000000
--- a/divx4_vbr.h
+++ /dev/null
@@ -1,17 +0,0 @@
-
-// methods from class VbrControl
-
- void VbrControl_init_1pass_vbr(int quality, int crispness);
- int VbrControl_init_2pass_vbr_encoding(const char* filename, int bitrate, double framerate, int crispness, int quality);
- int VbrControl_init_2pass_vbr_analysis(const char* filename, int quality);
-
- void VbrControl_update_1pass_vbr(void);
- void VbrControl_update_2pass_vbr_encoding(int motion_bits, int texture_bits, int total_bits);
- void VbrControl_update_2pass_vbr_analysis(int is_key_frame, int motion_bits, int texture_bits, int total_bits, int quant);
-
- int VbrControl_get_quant(void);
- void VbrControl_set_quant(float q);
- int VbrControl_get_intra(void);
- short VbrControl_get_drop(void);
- void VbrControl_close(void);
-
diff --git a/etc/codecs.conf b/etc/codecs.conf
index 5fc9765ddf..fdf82e2957 100644
--- a/etc/codecs.conf
+++ b/etc/codecs.conf
@@ -612,45 +612,6 @@ videocodec xvid
out BGR32,BGR24,BGR16,BGR15
dll "libxvidcore.a"
-; divx4 does direct render, and is native on Linux
-
-videocodec odivx
- info "OpenDivX API (ODIVX,DIVX4,DIVX5,XVID)"
- comment "with postprocessing"
- status working
- fourcc mp4v
- fourcc DIVX,divx
- fourcc DIV1,div1 divx
-; fourcc MP4S,mp4s ; ISO MPEG-4 Video V1
- fourcc MP43,mp43,DIV3,div3,DIV4,div4 DIV3 ; for DivX4Linux only!
- fourcc AP41 DIV3 ; AngelPotion stuff
- fourcc xvid,XVID,XviD
- fourcc DX50,BLZ0 DX50
- format 0x4
- driver odivx
- dll "libdivxdecore.so"
- out YV12,I420,IYUV
-
-videocodec divx4
- info "DivX4Linux API (DIVX4,DIVX5,XVID)"
- comment "with postprocessing"
- status working
- fourcc mp4v
- fourcc DIVX,divx
- fourcc DIV1,div1 divx
-; fourcc MP4S,mp4s ; ISO MPEG-4 Video V1
- fourcc MP43,mp43,DIV3,div3,DIV4,div4 DIV3 ; for DivX4Linux only!
- fourcc AP41 DIV3 ; AngelPotion stuff
- fourcc xvid,XVID,XviD
- fourcc DX50,BLZ0 DX50
- format 0x4
- driver divx4
- dll "libdivxdecore.so"
-; out I420 ; planar direct rendering
- out YUY2
- out UYVY
- out BGR32,BGR24,BGR16,BGR15
-
; is divx4vfw stable enough, working everywhere and faster than divxds?
videocodec divx4vfw
diff --git a/help/help_mp-en.h b/help/help_mp-en.h
index 5aba692138..e87237d8dd 100644
--- a/help/help_mp-en.h
+++ b/help/help_mp-en.h
@@ -486,12 +486,6 @@ static char help_text[]=
#define MSGTR_CodecDefinitionIncorrect "Codec is not defined correctly."
#define MSGTR_OutdatedCodecsConf "This codecs.conf is too old and incompatible with this MPlayer release!"
-// divx4_vbr.c:
-#define MSGTR_OutOfMemory "out of memory"
-#define MSGTR_OverridingTooLowBitrate "Specified bitrate is too low for this clip.\n"\
-"Minimum possible bitrate for the clip is %.0f kbps. Overriding\n"\
-"user-specified value.\n"
-
// fifo.c
#define MSGTR_CannotMakePipe "Cannot make PIPE!\n"
diff --git a/libmpcodecs/Makefile b/libmpcodecs/Makefile
index 4ba58764a3..a34ddca630 100644
--- a/libmpcodecs/Makefile
+++ b/libmpcodecs/Makefile
@@ -104,12 +104,6 @@ endif
ifeq ($(LIBTHEORA),yes)
VIDEO_SRCS+=vd_theora.c
endif
-ifeq ($(DIVX),yes)
-VIDEO_SRCS+=vd_odivx.c
- ifneq ($(OPENDIVX),yes)
- VIDEO_SRCS+=vd_divx4.c
- endif
-endif
ifeq ($(XVID4),yes)
VIDEO_SRCS+=vd_xvid4.c
else
@@ -244,9 +238,6 @@ else
ENCODER_SRCS+=ve_xvid.c
endif
endif
-ifeq ($(DIVX4ENCORE),yes)
-ENCODER_SRCS+=ve_divx4.c
-endif
ifeq ($(X264),yes)
ENCODER_SRCS+=ve_x264.c
endif
diff --git a/libmpcodecs/vd.c b/libmpcodecs/vd.c
index 8c11c4e015..c6c2f5437b 100644
--- a/libmpcodecs/vd.c
+++ b/libmpcodecs/vd.c
@@ -34,8 +34,6 @@ extern vd_functions_t mpcodecs_vd_dshow;
extern vd_functions_t mpcodecs_vd_dmo;
extern vd_functions_t mpcodecs_vd_vfw;
extern vd_functions_t mpcodecs_vd_vfwex;
-extern vd_functions_t mpcodecs_vd_odivx;
-extern vd_functions_t mpcodecs_vd_divx4;
extern vd_functions_t mpcodecs_vd_raw;
extern vd_functions_t mpcodecs_vd_hmblck;
extern vd_functions_t mpcodecs_vd_xanim;
@@ -67,12 +65,6 @@ vd_functions_t* mpcodecs_vd_drivers[] = {
&mpcodecs_vd_vfw,
&mpcodecs_vd_vfwex,
#endif
-#ifdef USE_DIVX
- &mpcodecs_vd_odivx,
-#ifdef NEW_DECORE
- &mpcodecs_vd_divx4,
-#endif
-#endif
&mpcodecs_vd_lzo,
&mpcodecs_vd_raw,
&mpcodecs_vd_hmblck,
diff --git a/libmpcodecs/vd_divx4.c b/libmpcodecs/vd_divx4.c
deleted file mode 100644
index a06a7d955e..0000000000
--- a/libmpcodecs/vd_divx4.c
+++ /dev/null
@@ -1,327 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "config.h"
-#include "mp_msg.h"
-#include "help_mp.h"
-
-#include "vd_internal.h"
-
-static vd_info_t info = {
-#ifdef DECORE_DIVX5
- "DivX5Linux lib",
-#else
-#ifdef DECORE_XVID
- "XviD lib (divx4 compat.)",
-#else
- "DivX4Linux lib",
-#endif /* #ifdef DECORE_XVID */
-#endif /* #ifdef DECORE_DIVX5 */
- "divx4",
- "A'rpi",
-#ifdef DECORE_XVID
- "http://www.xvid.com",
-#else
- "http://www.divx.com",
-#endif /* #ifdef DECORE_XVID */
- "native binary codec"
-};
-
-LIBVD_EXTERN(divx4)
-
-#ifdef DECORE_XVID
-#include <divx4.h>
-#else
-#include <decore.h>
-#endif /* #ifdef DECORE_XVID */
-
-#define USE_DIVX_BUILTIN_PP
-
-#ifndef DECORE_VERSION
-#define DECORE_VERSION 0
-#endif
-
-#if DECORE_VERSION >= 20021112
-static void* dec_handle = NULL;
-#endif
-
-// to set/get/query special features/parameters
-static int control(sh_video_t *sh,int cmd,void* arg,...){
- switch(cmd){
-#ifdef USE_DIVX_BUILTIN_PP
- case VDCTRL_QUERY_MAX_PP_LEVEL:
-#if DECORE_VERSION >= 20021112
- return 6; // divx4linux >= 5.0.5 -> 0..60
-#else
- return 10; // divx4linux < 5.0.5 -> 0..100
-#endif /* #if DECORE_VERSION >= 20021112 */
- case VDCTRL_SET_PP_LEVEL: {
- int quality=*((int*)arg);
-#if DECORE_VERSION >= 20021112
- int32_t iInstruction, iPostproc;
- if(quality<0 || quality>6) quality=6;
- iInstruction = DEC_ADJ_POSTPROCESSING | DEC_ADJ_SET;
- iPostproc = quality*10;
- decore(dec_handle, DEC_OPT_ADJUST, &iInstruction, &iPostproc);
-#else
- DEC_SET dec_set;
- if(quality<0 || quality>10) quality=10;
- dec_set.postproc_level=quality*10;
- decore(0x123,DEC_OPT_SETPP,&dec_set,NULL);
-#endif /* #if DECORE_VERSION >= 20021112 */
- return CONTROL_OK;
- }
-#endif /* #ifdef USE_DIVX_BUILTIN_PP */
-#if DECORE_VERSION >= 20011010
- case VDCTRL_SET_EQUALIZER: {
- va_list ap;
- int value;
- int option;
- va_start(ap, arg);
- value=va_arg(ap, int);
- va_end(ap);
-
- if(!strcasecmp(arg,"Brightness"))
-#if DECORE_VERSION >= 20021112
- option=DEC_ADJ_BRIGHTNESS | DEC_ADJ_SET;
-#else
- option=DEC_GAMMA_BRIGHTNESS;
-#endif /* #if DECORE_VERSION >= 20021112 */
- else if(!strcasecmp(arg, "Contrast"))
-#if DECORE_VERSION >= 20021112
- option=DEC_ADJ_CONTRAST | DEC_ADJ_SET;
-#else
- option=DEC_GAMMA_CONTRAST;
-#endif /* #if DECORE_VERSION >= 20021112 */
- else if(!strcasecmp(arg,"Saturation"))
-#if DECORE_VERSION >= 20021112
- option=DEC_ADJ_SATURATION | DEC_ADJ_SET;
-#else
- option=DEC_GAMMA_SATURATION;
-#endif /* #if DECORE_VERSION >= 20021112 */
- else return CONTROL_FALSE;
-
- value = (value * 128) / 100;
-#if DECORE_VERSION >= 20021112
- decore(dec_handle, DEC_OPT_ADJUST, &option, &value);
-#else
- decore(0x123, DEC_OPT_GAMMA, (void *)option, (void *) value);
-#endif /* #if DECORE_VERSION >= 20021112 */
- return CONTROL_OK;
- }
-#endif /* #if DECORE_VERSION >= 20011010 */
-
- }
-
- return CONTROL_UNKNOWN;
-}
-
-// init driver
-static int init(sh_video_t *sh){
-#if DECORE_VERSION >= 20021112
- DEC_INIT dec_init;
- int iSize=sizeof(DivXBitmapInfoHeader);
- DivXBitmapInfoHeader* pbi=malloc(iSize);
- int32_t iInstruction;
-
- if(!mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,IMGFMT_YUY2)) return 0;
-
- memset(&dec_init, 0, sizeof(dec_init));
- memset(pbi, 0, iSize);
-
- switch(sh->format) {
- case mmioFOURCC('D','I','V','3'):
- dec_init.codec_version = 311;
- break;
- case mmioFOURCC('D','I','V','X'):
- dec_init.codec_version = 412;
- break;
- case mmioFOURCC('D','X','5','0'):
- default: // Fallback to DivX 5 behaviour
- dec_init.codec_version = 500;
- }
-
- // no smoothing of the CPU load
- dec_init.smooth_playback = 0;
-
- pbi->biSize=iSize;
-
- switch(sh->codec->outfmt[sh->outfmtidx]){
- case IMGFMT_YV12: {
- pbi->biCompression=mmioFOURCC('Y','V','1','2');
- break;
- }
- case IMGFMT_YUY2: {
- pbi->biCompression=mmioFOURCC('Y','U','Y','2');
- break;
- }
- case IMGFMT_UYVY: {
- pbi->biCompression=mmioFOURCC('U','Y','V','Y');
- break;
- }
- case IMGFMT_I420: {
- pbi->biCompression=mmioFOURCC('I','4','2','0');
- break;
- }
- case IMGFMT_BGR15: {
- pbi->biCompression=0;
- pbi->biBitCount=16;
- break;
- }
- case IMGFMT_BGR16: {
- pbi->biCompression=3;
- pbi->biBitCount=16;
- break;
- }
- case IMGFMT_BGR24: {
- pbi->biCompression=0;
- pbi->biBitCount=24;
- break;
- }
- case IMGFMT_BGR32: {
- pbi->biCompression=0;
- pbi->biBitCount=32;
- break;
- }
- default:
- mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Unsupported out_fmt: 0x%X\n",sh->codec->outfmt[sh->outfmtidx]);
- return 0;
- }
-
- pbi->biWidth = sh->disp_w;
- pbi->biHeight = sh->disp_h;
-
- decore(&dec_handle, DEC_OPT_INIT, &dec_init, NULL);
- decore(dec_handle, DEC_OPT_SETOUT, pbi, NULL);
-
-#ifdef USE_DIVX_BUILTIN_PP
- iInstruction = DEC_ADJ_POSTPROCESSING | DEC_ADJ_SET;
- decore(dec_handle, DEC_OPT_ADJUST, &iInstruction, &divx_quality);
-#endif
-
- free(pbi);
-#else /* DECORE_VERSION >= 20021112 */
- DEC_PARAM dec_param;
- DEC_SET dec_set;
- int bits=16;
-
-#ifndef NEW_DECORE
- if(sh->format==mmioFOURCC('D','I','V','3')){
- mp_msg(MSGT_DECVIDEO,MSGL_INFO,"DivX 3.x not supported by opendivx decore - it requires divx4linux\n");
- return 0; // not supported
- }
-#endif
-#ifndef DECORE_DIVX5
- if(sh->format==mmioFOURCC('D','X','5','0')){
- mp_msg(MSGT_DECVIDEO,MSGL_INFO,"DivX 5.00 not supported by divx4linux decore - it requires divx5linux\n");
- return 0; // not supported
- }
-#endif
-
- if(!mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,IMGFMT_YUY2)) return 0;
-
- memset(&dec_param,0,sizeof(dec_param));
-
- switch(sh->codec->outfmt[sh->outfmtidx]){
- case IMGFMT_YV12: dec_param.output_format=DEC_YV12;bits=12;break;
- case IMGFMT_YUY2: dec_param.output_format=DEC_YUY2;break;
- case IMGFMT_UYVY: dec_param.output_format=DEC_UYVY;break;
- case IMGFMT_I420: dec_param.output_format=DEC_420;bits=12;break;
- case IMGFMT_BGR15: dec_param.output_format=DEC_RGB555_INV;break;
- case IMGFMT_BGR16: dec_param.output_format=DEC_RGB565_INV;break;
- case IMGFMT_BGR24: dec_param.output_format=DEC_RGB24_INV;bits=24;break;
- case IMGFMT_BGR32: dec_param.output_format=DEC_RGB32_INV;bits=32;break;
- default:
- mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Unsupported out_fmt: 0x%X\n",sh->codec->outfmt[sh->outfmtidx]);
- return 0;
- }
-#ifdef DECORE_DIVX5
- switch(sh->format) {
- case mmioFOURCC('D','I','V','3'):
- dec_param.codec_version = 311;
- break;
- case mmioFOURCC('D','I','V','X'):
- dec_param.codec_version = 400;
- break;
- case mmioFOURCC('D','X','5','0'):
- default: // Fallback to DivX 5 behaviour
- dec_param.codec_version = 500;
- }
- dec_param.build_number = 0;
-#endif
- dec_param.x_dim = sh->disp_w;
- dec_param.y_dim = sh->disp_h;
- decore(0x123, DEC_OPT_INIT, &dec_param, NULL);
-
-#ifdef USE_DIVX_BUILTIN_PP
- dec_set.postproc_level = divx_quality;
- decore(0x123, DEC_OPT_SETPP, &dec_set, NULL);
-#endif
-#endif /* DECORE_VERSION >= 20021112 */
-
- mp_msg(MSGT_DECVIDEO,MSGL_V,"INFO: DivX4Linux video codec init OK!\n");
-
- return 1;
-}
-
-// uninit driver
-static void uninit(sh_video_t *sh){
-#if DECORE_VERSION >= 20021112
- decore(dec_handle, DEC_OPT_RELEASE, NULL, NULL);
- dec_handle = NULL;
-#else
- decore(0x123,DEC_OPT_RELEASE,NULL,NULL);
-#endif
-}
-
-//mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h);
-
-// decode a frame
-static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
- mp_image_t* mpi;
- DEC_FRAME dec_frame;
-#ifndef USE_DIVX_BUILTIN_PP
- DEC_FRAME_INFO frameinfo;
-#endif
-
- if(len<=0) return NULL; // skipped frame
-
- dec_frame.length = len;
- dec_frame.bitstream = data;
- dec_frame.render_flag = (flags&VDFLAGS_DROPFRAME)?0:1;
-
- mpi=mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, MP_IMGFLAG_PRESERVE | MP_IMGFLAG_ACCEPT_WIDTH,
- sh->disp_w, sh->disp_h);
- if(!mpi) return NULL;
-
- dec_frame.bmp=mpi->planes[0];
- dec_frame.stride=mpi->width;
-
- decore(
-#if DECORE_VERSION >= 20021112
- dec_handle,
-#else
- 0x123,
-#endif
-#ifndef DEC_OPT_FRAME_311
- DEC_OPT_FRAME,
-#else
- (sh->format==mmioFOURCC('D','I','V','3'))?DEC_OPT_FRAME_311:DEC_OPT_FRAME,
-#endif
- &dec_frame,
-#ifndef USE_DIVX_BUILTIN_PP
- &frameinfo
-#else
- NULL
-#endif
- );
-
-#ifndef USE_DIVX_BUILTIN_PP
- mpi->qscale = frameinfo.quant_store;
- mpi->qstride = frameinfo.quant_stride;
-#endif
-
- return mpi;
-}
diff --git a/libmpcodecs/vd_odivx.c b/libmpcodecs/vd_odivx.c
deleted file mode 100644
index 5f9962ed50..0000000000
--- a/libmpcodecs/vd_odivx.c
+++ /dev/null
@@ -1,296 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "config.h"
-#include "mp_msg.h"
-#include "help_mp.h"
-
-#include "vd_internal.h"
-
-static vd_info_t info = {
-#ifdef NEW_DECORE
-#ifdef DECORE_DIVX5
- "DivX5Linux lib (odivx compat.)",
-#else
-#ifdef DECORE_XVID
- "XviD lib (odivx compat.)",
-#else
- "DivX4Linux lib (odivx compat.)",
-#endif
-#endif
-#else
- "Opendivx 0.48 codec",
-#endif
- "odivx",
- "A'rpi",
-#ifdef NEW_DECORE
-#ifdef DECORE_XVID
- "http://www.xvid.com",
-#else
- "http://www.divx.com",
-#endif
-#else
- "http://www.projectmayo.org",
-#endif
-#ifdef NEW_DECORE
- "native binary codec"
-#else
- "native codec"
-#endif
-};
-
-LIBVD_EXTERN(odivx)
-
-#ifndef NEW_DECORE
-#include "opendivx/decore.h"
-#include "libpostproc/postprocess.h"
-#elif DECORE_XVID
-#include <divx4.h>
-#else
-#include <decore.h>
-#endif
-
-#ifndef DECORE_VERSION
-#define DECORE_VERSION 0
-#endif
-
-#if DECORE_VERSION >= 20021112
-static void* dec_handle = NULL;
-#endif
-
-//**************************************************************************//
-// The OpenDivX stuff:
-//**************************************************************************//
-
-#ifndef NEW_DECORE
-
-static unsigned char *opendivx_src[3];
-static int opendivx_stride[3];
-
-// callback, the opendivx decoder calls this for each frame:
-void convert_linux(unsigned char *puc_y, int stride_y,
- unsigned char *puc_u, unsigned char *puc_v, int stride_uv,
- unsigned char *bmp, int width_y, int height_y){
-
-// printf("convert_yuv called %dx%d stride: %d,%d\n",width_y,height_y,stride_y,stride_uv);
-
- opendivx_src[0]=puc_y;
- opendivx_src[1]=puc_u;
- opendivx_src[2]=puc_v;
-
- opendivx_stride[0]=stride_y;
- opendivx_stride[1]=stride_uv;
- opendivx_stride[2]=stride_uv;
-}
-#endif
-
-
-// to set/get/query special features/parameters
-static int control(sh_video_t *sh,int cmd,void* arg,...){
- switch(cmd){
- case VDCTRL_QUERY_MAX_PP_LEVEL:
-#ifdef NEW_DECORE
-#if DECORE_VERSION >= 20021112
- return 6; // divx4linux >= 5.0.5 -> 0..60
-#else
- return 10; // divx4linux < 5.0.5 -> 0..100
-#endif
-#else
- return PP_QUALITY_MAX; // for opendivx
-#endif
- case VDCTRL_SET_PP_LEVEL: {
- int quality=*((int*)arg);
-#if DECORE_VERSION >= 20021112
- int32_t iInstruction, iPostproc;
- if(quality<0 || quality>6) quality=6;
- iInstruction = DEC_ADJ_POSTPROCESSING | DEC_ADJ_SET;
- iPostproc = quality*10;
- decore(dec_handle, DEC_OPT_ADJUST, &iInstruction, &iPostproc);
-#else
- DEC_SET dec_set;
-#ifdef NEW_DECORE
- if(quality<0 || quality>10) quality=10;
- dec_set.postproc_level=quality*10;
-#else
- if(quality<0 || quality>PP_QUALITY_MAX) quality=PP_QUALITY_MAX;
- dec_set.postproc_level=getPpModeForQuality(quality);
-#endif
- decore(0x123,DEC_OPT_SETPP,&dec_set,NULL);
-#endif
- return CONTROL_OK;
- }
-
- }
-
- return CONTROL_UNKNOWN;
-}
-
-// init driver
-static int init(sh_video_t *sh){
-#if DECORE_VERSION >= 20021112
- DEC_INIT dec_init;
- int iSize=sizeof(DivXBitmapInfoHeader);
- DivXBitmapInfoHeader* pbi=malloc(iSize);
- int32_t iInstruction;
-
- memset(&dec_init, 0, sizeof(dec_init));
- memset(pbi, 0, iSize);
-
- switch(sh->format) {
- case mmioFOURCC('D','I','V','3'):
- dec_init.codec_version = 311;
- break;
- case mmioFOURCC('D','I','V','X'):
- dec_init.codec_version = 412;
- break;
- case mmioFOURCC('D','X','5','0'):
- default: // Fallback to DivX 5 behaviour
- dec_init.codec_version = 500;
- }
-
- // no smoothing of the CPU load
- dec_init.smooth_playback = 0;
-
- pbi->biSize=iSize;
-
- pbi->biCompression=mmioFOURCC('U','S','E','R');
-
- pbi->biWidth = sh->disp_w;
- pbi->biHeight = sh->disp_h;
-
- decore(&dec_handle, DEC_OPT_INIT, &dec_init, NULL);
- decore(dec_handle, DEC_OPT_SETOUT, pbi, NULL);
-
- iInstruction = DEC_ADJ_POSTPROCESSING | DEC_ADJ_SET;
- decore(dec_handle, DEC_OPT_ADJUST, &iInstruction, &divx_quality);
-
- free(pbi);
-#else // DECORE_VERSION < 20021112
- DEC_PARAM dec_param;
- DEC_SET dec_set;
-
-#ifndef NEW_DECORE
- if(sh->format==mmioFOURCC('D','I','V','3')){
- mp_msg(MSGT_DECVIDEO,MSGL_INFO,"DivX 3.x not supported by opendivx decore - it requires divx4linux\n");
- return 0; // not supported
- }
-#endif
-#ifndef DECORE_DIVX5
- if(sh->format==mmioFOURCC('D','X','5','0')){
- mp_msg(MSGT_DECVIDEO,MSGL_INFO,"DivX 5.00 not supported by divx4linux decore - it requires divx5linux\n");
- return 0; // not supported
- }
-#endif
-
- memset(&dec_param,0,sizeof(dec_param));
-#ifdef NEW_DECORE
- dec_param.output_format=DEC_USER;
-#else
- dec_param.color_depth = 32;
-#endif
-#ifdef DECORE_DIVX5
- switch(sh->format) {
- case mmioFOURCC('D','I','V','3'):
- dec_param.codec_version = 311;
- break;
- case mmioFOURCC('D','I','V','X'):
- dec_param.codec_version = 400;
- break;
- case mmioFOURCC('D','X','5','0'):
- default: // Fallback to DivX 5 behaviour
- dec_param.codec_version = 500;
- }
- dec_param.build_number = 0;
-#endif
- dec_param.x_dim = sh->disp_w;
- dec_param.y_dim = sh->disp_h;
- decore(0x123, DEC_OPT_INIT, &dec_param, NULL);
-
- dec_set.postproc_level = divx_quality;
- decore(0x123, DEC_OPT_SETPP, &dec_set, NULL);
-#endif // DECORE_VERSION
-
- mp_msg(MSGT_DECVIDEO,MSGL_V,"INFO: OpenDivX video codec init OK!\n");
-
- return mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,IMGFMT_YV12);
-}
-
-// uninit driver
-static void uninit(sh_video_t *sh){
-#if DECORE_VERSION >= 20021112
- decore(dec_handle, DEC_OPT_RELEASE, NULL, NULL);
- dec_handle = NULL;
-#else
- decore(0x123,DEC_OPT_RELEASE,NULL,NULL);
-#endif
-}
-
-//mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h);
-
-// decode a frame
-static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
- mp_image_t* mpi;
- DEC_FRAME dec_frame;
-#ifdef NEW_DECORE
-#if DECORE_VERSION >= 20021112
- DEC_FRAME_INFO dec_pic;
-#else
- DEC_PICTURE dec_pic;
-#endif
-#endif
-
- if(len<=0) return NULL; // skipped frame
-
- dec_frame.length = len;
- dec_frame.bitstream = data;
- dec_frame.render_flag = (flags&3)?0:1;
-
-#ifdef NEW_DECORE
-#if DECORE_VERSION >= 20021112
- dec_frame.stride=sh->disp_w;
- decore(dec_handle, DEC_OPT_FRAME, &dec_frame, &dec_pic);
-#else
- dec_frame.bmp=&dec_pic;
- dec_pic.y=dec_pic.u=dec_pic.v=NULL;
-#ifndef DEC_OPT_FRAME_311
- decore(0x123, DEC_OPT_FRAME, &dec_frame, NULL);
-#else
- decore(0x123, (sh->format==mmioFOURCC('D','I','V','3'))?DEC_OPT_FRAME_311:DEC_OPT_FRAME, &dec_frame, NULL);
-#endif
-#endif
-#else
- // opendivx:
- opendivx_src[0]=NULL;
- decore(0x123, 0, &dec_frame, NULL);
-#endif
-
- if(flags&3) return NULL; // framedrop
-
-#ifdef NEW_DECORE
- if(!dec_pic.y) return NULL; // bad frame
-#else
- if(!opendivx_src[0]) return NULL; // bad frame
-#endif
-
- mpi=mpcodecs_get_image(sh, MP_IMGTYPE_EXPORT, MP_IMGFLAG_PRESERVE,
- sh->disp_w, sh->disp_h);
- if(!mpi) return NULL;
-
-#ifdef NEW_DECORE
- mpi->planes[0]=dec_pic.y;
- mpi->planes[1]=dec_pic.u;
- mpi->planes[2]=dec_pic.v;
- mpi->stride[0]=dec_pic.stride_y;
- mpi->stride[1]=mpi->stride[2]=dec_pic.stride_uv;
-#else
- mpi->planes[0]=opendivx_src[0];
- mpi->planes[1]=opendivx_src[1];
- mpi->planes[2]=opendivx_src[2];
- mpi->stride[0]=opendivx_stride[0];
- mpi->stride[1]=opendivx_stride[1];
- mpi->stride[2]=opendivx_stride[2];
-#endif
-
- return mpi;
-}
diff --git a/libmpcodecs/ve.c b/libmpcodecs/ve.c
index 5856c8e651..d9a6b7bf90 100644
--- a/libmpcodecs/ve.c
+++ b/libmpcodecs/ve.c
@@ -9,7 +9,6 @@
#include "mp_image.h"
#include "vf.h"
-extern vf_info_t ve_info_divx4;
extern vf_info_t ve_info_lavc;
extern vf_info_t ve_info_vfw;
extern vf_info_t ve_info_raw;
@@ -20,9 +19,6 @@ extern vf_info_t ve_info_nuv;
extern vf_info_t ve_info_x264;
static vf_info_t* encoder_list[]={
-#ifdef HAVE_DIVX4ENCORE
- &ve_info_divx4,
-#endif
#ifdef USE_LIBAVCODEC
&ve_info_lavc,
#endif
diff --git a/libmpcodecs/ve_divx4.c b/libmpcodecs/ve_divx4.c
deleted file mode 100644
index 50feba6ff2..0000000000
--- a/libmpcodecs/ve_divx4.c
+++ /dev/null
@@ -1,488 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "config.h"
-#include "mp_msg.h"
-
-#include "codec-cfg.h"
-#include "stream.h"
-#include "demuxer.h"
-#include "stheader.h"
-
-#include "muxer.h"
-
-#include "img_format.h"
-#include "mp_image.h"
-#include "vf.h"
-
-/* About XviD VBR Library, Edouard Gomez (GomGom) said:
- <GomGom> header bytes == frame header bytes :-)
- <GomGom> total bytes = frame bytes == texture + header
- <GomGom> quant = quant returned by xvidcore
- <GomGom> it's possible that xvid lowers or increases the passed quant because of lumimasking
- <GomGom> kblks = blocks coded as intra blocks
- <GomGom> mblks = blocks coded as predicted blocks
- <GomGom> ublks = skipped blocks
- <GomGom> at the moemnt le vbr lib uses total bytes, and quant
- <GomGom> so it's easy to use it with divx5 (wo bframes)
- <klOUg> bframes breaks what assumptions?
- <GomGom> quant estimation for next frame
- <GomGom> because of the bframe quant multiplier given to divx5
- <GomGom> that the vbr lib does not "know"
-*/
-
-//===========================================================================//
-
-static int pass;
-extern char* passtmpfile;
-
-#ifdef ENCORE_XVID
-#include <divx4.h>
-#else
-#include <encore2.h>
-#endif
-
-#ifndef ENCORE_MAJOR_VERSION
-#define ENCORE_MAJOR_VERSION 4000
-#endif
-
-#if ENCORE_MAJOR_VERSION < 5200
-#include "divx4_vbr.h"
-#define HAVE_XVID_VBR
-#ifdef HAVE_XVID_VBR
-#include "xvid_vbr.h"
-#endif
-#endif
-
-#if ENCORE_MAJOR_VERSION >= 5200
-SETTINGS divx4_param;
-#else
-ENC_PARAM divx4_param;
-#endif
-int divx4_crispness;
-#ifdef HAVE_XVID_VBR
-static int vbrpass = -1;
-static int vbrdebug = 0;
-#endif
-
-#include "m_option.h"
-
-m_option_t divx4opts_conf[]={
- {"pass", &pass, CONF_TYPE_INT, CONF_RANGE,0,2, NULL},
- {"br", &divx4_param.bitrate, CONF_TYPE_INT, CONF_RANGE, 4, 24000000, NULL},
-#if ENCORE_MAJOR_VERSION < 5200
- {"rc_period", &divx4_param.rc_period, CONF_TYPE_INT, 0,0,0, NULL},
- {"rc_reaction_period", &divx4_param.rc_reaction_period, CONF_TYPE_INT, 0,0,0, NULL},
- {"rc_reaction_ratio", &divx4_param.rc_reaction_ratio, CONF_TYPE_INT, 0,0,0, NULL},
- {"min_quant", &divx4_param.min_quantizer, CONF_TYPE_INT, CONF_RANGE,0,32, NULL},
- {"max_quant", &divx4_param.max_quantizer, CONF_TYPE_INT, CONF_RANGE,0,32, NULL},
-#endif
- {"key", &divx4_param.max_key_interval, CONF_TYPE_INT, CONF_MIN,0,0, NULL},
- {"deinterlace", &divx4_param.deinterlace, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"q", &divx4_param.quality, CONF_TYPE_INT, CONF_RANGE, 1, 5, NULL},
- {"crispness", &divx4_crispness, CONF_TYPE_INT, CONF_RANGE,0,100, NULL},
-#if ENCORE_MAJOR_VERSION >= 5010
-#if ENCORE_MAJOR_VERSION >= 5200
-/* rate control modes:
- 0 (VBV 1-pass)
- 1 (1-pass constant quality)
- 2 (VBV multipass 1st-pass)
- 3 (VBV multipass nth-pass)
- 4 (original 1-pass)
- 5 (original 1st pass)
- 6 (original 2nd pass)
- 7 (1-pass constant frame size)
-*/
- {"vbr", &divx4_param.vbr_mode, CONF_TYPE_INT, CONF_RANGE,0,7, NULL},
- {"bidirect", &divx4_param.use_bidirect, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"key_frame_threshold", &divx4_param.key_frame_threshold, CONF_TYPE_INT, CONF_RANGE,1,100, NULL},
-/* default values from the DivX Help Guide:
- bitrate size occupancy
- 128000 262144 196608 (Handheld)
- 768000 1048576 786432 (Portable)
- 4000000 3145728 2359296 (Home Theatre)
- 8000000 6291456 4718592 (High Definition)
-Do not mess with these values unless you are absolutely sure of what you are doing!
-*/
- {"vbv_bitrate", &divx4_param.vbv_bitrate, CONF_TYPE_INT, 0,0,0, NULL},
- {"vbv_size", &divx4_param.vbv_size, CONF_TYPE_INT, 0,0,0, NULL},
- {"vbv_occupancy", &divx4_param.vbv_occupancy, CONF_TYPE_INT, 0,0,0, NULL},
- {"complexity", &divx4_param.complexity_modulation, CONF_TYPE_FLOAT, CONF_RANGE,0.0,1.0, NULL},
- {"readlog", &divx4_param.log_file_read, CONF_TYPE_STRING, 0,0,1, NULL},
- {"writelog", &divx4_param.log_file_write, CONF_TYPE_STRING, 0,0,1, NULL},
- {"mv_file", &divx4_param.mv_file, CONF_TYPE_STRING, 0,0,1, NULL},
- {"data_partitioning", &divx4_param.data_partitioning, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"qpel", &divx4_param.quarter_pel, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"gmc", &divx4_param.use_gmc, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"pv", &divx4_param.psychovisual, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"pv_strength_frame", &divx4_param.pv_strength_frame, CONF_TYPE_FLOAT, CONF_RANGE,0.0,1.0, NULL},
- {"pv_strength_MB", &divx4_param.pv_strength_MB, CONF_TYPE_FLOAT, CONF_RANGE,0.0,1.0, NULL},
- {"interlace_mode", &divx4_param.interlace_mode, CONF_TYPE_INT, CONF_RANGE,0,3, NULL},
- {"crop", &divx4_param.enable_crop, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"resize", &divx4_param.enable_resize, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"width", &divx4_param.resize_width, CONF_TYPE_INT, 0,0,0, NULL},
- {"height", &divx4_param.resize_height, CONF_TYPE_INT, 0,0,0, NULL},
- {"left", &divx4_param.crop_left, CONF_TYPE_INT, 0,0,0, NULL},
- {"right", &divx4_param.crop_right, CONF_TYPE_INT, 0,0,0, NULL},
- {"top", &divx4_param.crop_top, CONF_TYPE_INT, 0,0,0, NULL},
- {"bottom", &divx4_param.crop_bottom, CONF_TYPE_INT, 0,0,0, NULL},
- {"resize_mode", &divx4_param.resize_mode, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"temporal", &divx4_param.temporal_enable, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"spatial", &divx4_param.spatial_passes, CONF_TYPE_INT, CONF_RANGE,0,3, NULL},
- {"temporal_level", &divx4_param.temporal_level, CONF_TYPE_FLOAT, CONF_RANGE,0.0,1.0, NULL},
- {"spatial_level", &divx4_param.spatial_level, CONF_TYPE_FLOAT, CONF_RANGE,0.0,1.0, NULL},
-#else
- {"bidirect", &divx4_param.extensions.use_bidirect, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"obmc", &divx4_param.extensions.obmc, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"data_partitioning", &divx4_param.extensions.data_partitioning, CONF_TYPE_FLAG, 0,0,1, NULL},
-// {"mpeg2", &divx4_param.extensions.mpeg2_quant, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"qpel", &divx4_param.extensions.quarter_pel, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"intra_frame_threshold", &divx4_param.extensions.intra_frame_threshold, CONF_TYPE_INT, CONF_RANGE,1,100, NULL},
- {"psychovisual", &divx4_param.extensions.psychovisual, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"pv", &divx4_param.extensions.psychovisual, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"pv_strength_frame", &divx4_param.extensions.pv_strength_frame, CONF_TYPE_FLOAT, CONF_RANGE,0.0,1.0, NULL},
- {"pv_strength_MB", &divx4_param.extensions.pv_strength_MB, CONF_TYPE_FLOAT, CONF_RANGE,0.0,1.0, NULL},
- {"testing_param", &divx4_param.extensions.testing_param, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"gmc", &divx4_param.extensions.use_gmc, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"interlace_mode", &divx4_param.extensions.interlace_mode, CONF_TYPE_INT, CONF_RANGE,0,2, NULL},
- {"crop", &divx4_param.extensions.enable_crop, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"resize", &divx4_param.extensions.enable_resize, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"width", &divx4_param.extensions.resize_width, CONF_TYPE_INT, 0,0,0, NULL},
- {"height", &divx4_param.extensions.resize_height, CONF_TYPE_INT, 0,0,0, NULL},
- {"left", &divx4_param.extensions.crop_left, CONF_TYPE_INT, 0,0,0, NULL},
- {"right", &divx4_param.extensions.crop_right, CONF_TYPE_INT, 0,0,0, NULL},
- {"top", &divx4_param.extensions.crop_top, CONF_TYPE_INT, 0,0,0, NULL},
- {"bottom", &divx4_param.extensions.crop_bottom, CONF_TYPE_INT, 0,0,0, NULL},
- {"resize_mode", &divx4_param.extensions.resize_mode, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"temporal", &divx4_param.extensions.temporal_enable, CONF_TYPE_FLAG, 0,0,1, NULL},
- {"spatial", &divx4_param.extensions.spatial_passes, CONF_TYPE_INT, CONF_RANGE,0,3, NULL},
- {"temporal_level", &divx4_param.extensions.temporal_level, CONF_TYPE_FLOAT, CONF_RANGE,0.0,1.0, NULL},
- {"spatial_level", &divx4_param.extensions.spatial_level, CONF_TYPE_FLOAT, CONF_RANGE,0.0,1.0, NULL},
- {"mv_file", &divx4_param.extensions.mv_file, CONF_TYPE_STRING, 0,0,1, NULL},
-#endif
-#endif
-#ifdef HAVE_XVID_VBR
- {"vbrpass", &vbrpass, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL},
- {"vbrdebug", &vbrdebug, CONF_TYPE_INT, CONF_RANGE, 0, 1, NULL},
-#endif
- {"help", "TODO: divx4opts help!\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
- {NULL, NULL, 0, 0, 0, 0, NULL}
-};
-
-struct vf_priv_s {
- muxer_stream_t* mux;
- ENC_RESULT enc_result;
- ENC_FRAME enc_frame;
- void* enc_handle;
-#ifdef HAVE_XVID_VBR
- vbr_control_t vbr_state;
-#endif
-};
-
-#define mux_v (vf->priv->mux)
-
-static int config(struct vf_instance_s* vf,
- int width, int height, int d_width, int d_height,
- unsigned int flags, unsigned int outfmt){
-
-#if ENCORE_MAJOR_VERSION >= 5200
- DivXBitmapInfoHeader format;
- char profile = (char) encore(0, ENC_OPT_PROFILE, 0, 0);
-
- mp_msg(MSGT_MENCODER, MSGL_INFO, "encoder binary profile: %c\n", profile);
-
- if((pass <= 1 && (divx4_param.vbr_mode == RCMODE_VBV_MULTIPASS_NTH ||
- divx4_param.vbr_mode == RCMODE_502_2PASS_2ND)) ||
- (pass == 2 && (divx4_param.vbr_mode == RCMODE_VBV_1PASS ||
- divx4_param.vbr_mode == RCMODE_1PASS_CONSTANT_Q ||
- divx4_param.vbr_mode == RCMODE_VBV_MULTIPASS_1ST ||
- divx4_param.vbr_mode == RCMODE_502_1PASS ||
- divx4_param.vbr_mode == RCMODE_502_2PASS_1ST ||
- divx4_param.vbr_mode == RCMODE_IMAGE_COMPRESS))) {
- mp_msg(MSGT_MENCODER, MSGL_ERR, "pass (%i) and rate control mode (%i) doesn't match, please consult encore2.h\n",
- pass, divx4_param.vbr_mode);
- abort();
- }
-#endif
-
- mux_v->bih->biWidth=width;
- mux_v->bih->biHeight=height;
- mux_v->bih->biSizeImage=width*height*3;
- mux_v->aspect = (float)d_width/d_height;
-
- if(!divx4_param.bitrate) divx4_param.bitrate=800000;
- else if(divx4_param.bitrate<=16000) divx4_param.bitrate*=1000;
- if(!divx4_param.quality) divx4_param.quality=5; // the quality of compression ( 1 - fastest, 5 - best )
-
-#if ENCORE_MAJOR_VERSION >= 5200
- format.biSize=sizeof(DivXBitmapInfoHeader);
- format.biWidth=width;
- format.biHeight=height;
- format.biSizeImage=mux_v->bih->biSizeImage;
- if(divx4_param.vbv_bitrate > 0) {
- divx4_param.vbv_bitrate = ((divx4_param.vbv_bitrate - 1) / 400 + 1) * 400;
- divx4_param.vbv_size = ((divx4_param.vbv_size - 1) / 16384 + 1) * 16384;
- divx4_param.vbv_occupancy = ((divx4_param.vbv_occupancy - 1) / 64 + 1) * 64;
- }
-#else
- divx4_param.x_dim=width;
- divx4_param.y_dim=height;
- divx4_param.framerate=(float)mux_v->h.dwRate/mux_v->h.dwScale;
- // set some usefull defaults:
- if(!divx4_param.min_quantizer) divx4_param.min_quantizer=2;
- if(!divx4_param.max_quantizer) divx4_param.max_quantizer=31;
- if(!divx4_param.rc_period) divx4_param.rc_period=2000;
- if(!divx4_param.rc_reaction_period) divx4_param.rc_reaction_period=10;
- if(!divx4_param.rc_reaction_ratio) divx4_param.rc_reaction_ratio=20;
-#endif
-
-#ifdef HAVE_XVID_VBR
- if (vbrpass >= 0) {
- vbrSetDefaults(&vf->priv->vbr_state);
- vf->priv->vbr_state.desired_bitrate = divx4_param.bitrate;
- switch (vbrpass) {
- case 0:
- vf->priv->vbr_state.mode = VBR_MODE_1PASS;
- break;
- case 1:
- vf->priv->vbr_state.mode = VBR_MODE_2PASS_1;
- break;
- case 2:
- vf->priv->vbr_state.mode = VBR_MODE_2PASS_2;
- break;
- default:
- abort();
- }
- vf->priv->vbr_state.debug = vbrdebug;
- if (vbrInit(&vf->priv->vbr_state) == -1)
- abort();
- /* XXX - kludge to workaround some DivX encoder limitations */
- if (vf->priv->vbr_state.mode != VBR_MODE_2PASS_2)
- divx4_param.min_quantizer = divx4_param.max_quantizer = vbrGetQuant(&vf->priv->vbr_state);
- }
-#endif
-
-#if ENCORE_MAJOR_VERSION >= 5200
- switch(outfmt){
- case IMGFMT_YV12: {
- format.biCompression=mmioFOURCC('Y','V','1','2');
- break;
- }
- case IMGFMT_IYUV: {
- format.biCompression=mmioFOURCC('I','Y','U','V');
- break;
- }
- case IMGFMT_I420: {
- format.biCompression=mmioFOURCC('I','4','2','0');
- break;
- }
- case IMGFMT_YUY2: {
- format.biCompression=mmioFOURCC('Y','U','Y','2');
- break;
- }
- case IMGFMT_V422: {
- format.biCompression=mmioFOURCC('V','4','2','2');
- break;
- }
- case IMGFMT_UYVY: {
- format.biCompression=mmioFOURCC('U','Y','V','Y');
- break;
- }
- case IMGFMT_YVYU: {
- format.biCompression=mmioFOURCC('Y','V','Y','U');
- break;
- }
- case IMGFMT_BGR24: {
- format.biCompression=0;
- format.biBitCount=24;
- break;
- }
- case IMGFMT_BGR32: {
- format.biCompression=0;
- format.biBitCount=32;
- break;
- }
- default:
- mp_msg(MSGT_MENCODER,MSGL_ERR,"divx4: unsupported picture format (%s)!\n",
- vo_format_name(outfmt));
- return 0;
- }
-
- encore(&vf->priv->enc_handle, ENC_OPT_INIT, &format, &divx4_param);
-#else
- divx4_param.handle=NULL;
- encore(NULL,ENC_OPT_INIT,&divx4_param,NULL);
- vf->priv->enc_handle=divx4_param.handle;
- switch(outfmt){
- case IMGFMT_YV12: vf->priv->enc_frame.colorspace=ENC_CSP_YV12; break;
- case IMGFMT_IYUV:
- case IMGFMT_I420: vf->priv->enc_frame.colorspace=ENC_CSP_I420; break;
- case IMGFMT_YUY2: vf->priv->enc_frame.colorspace=ENC_CSP_YUY2; break;
- case IMGFMT_UYVY: vf->priv->enc_frame.colorspace=ENC_CSP_UYVY; break;
- case IMGFMT_RGB24:
- case IMGFMT_BGR24:
- vf->priv->enc_frame.colorspace=ENC_CSP_RGB24; break;
- default:
- mp_msg(MSGT_MENCODER,MSGL_ERR,"divx4: unsupported picture format (%s)!\n",
- vo_format_name(outfmt));
- return 0;
- }
-
- switch(pass){
- case 1:
- if (VbrControl_init_2pass_vbr_analysis(passtmpfile, divx4_param.quality) == -1){
- mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: filename=%s\n", passtmpfile);
- pass=0;
- }
- break;
- case 2:
- if (VbrControl_init_2pass_vbr_encoding(passtmpfile,
- divx4_param.bitrate,
- divx4_param.framerate,
- divx4_crispness,
- divx4_param.quality) == -1){
- mp_msg(MSGT_MENCODER,MSGL_ERR,"2pass failed: filename=%s\n", passtmpfile);
- pass=0;
- }
- break;
- }
-#endif
-
- return 1;
-}
-
-#ifdef HAVE_XVID_VBR
-static void uninit(struct vf_instance_s* vf){
- if (vbrpass >= 0 && vbrFinish(&vf->priv->vbr_state) == -1)
- abort();
-}
-#else
-static void uninit(struct vf_instance_s* vf){
- encore(vf->priv->enc_handle, ENC_OPT_RELEASE, 0, 0);
- vf->priv->enc_handle = NULL;
-}
-#endif
-
-static int control(struct vf_instance_s* vf, int request, void* data){
-
- return CONTROL_UNKNOWN;
-}
-
-static int query_format(struct vf_instance_s* vf, unsigned int fmt){
- switch(fmt){
- case IMGFMT_YV12:
- case IMGFMT_IYUV:
- case IMGFMT_I420:
- return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW; // no conversion
- case IMGFMT_YUY2:
- case IMGFMT_UYVY:
- return VFCAP_CSP_SUPPORTED; // conversion
- case IMGFMT_RGB24:
- case IMGFMT_BGR24:
- return VFCAP_CSP_SUPPORTED | VFCAP_FLIPPED; // conversion+flipped
- }
- return 0;
-}
-
-static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
- ENC_RESULT enc_result;
- vf->priv->enc_frame.image=mpi->planes[0];
- vf->priv->enc_frame.bitstream=mux_v->buffer;
- vf->priv->enc_frame.length=mux_v->buffer_size;
-#if ENCORE_MAJOR_VERSION >= 5200
- vf->priv->enc_frame.produce_empty_frame = 0;
- encore(vf->priv->enc_handle, ENC_OPT_ENCODE, &vf->priv->enc_frame, &enc_result);
- if(enc_result.cType == 'I')
- muxer_write_chunk(mux_v,vf->priv->enc_frame.length,0x10, MP_NOPTS_VALUE, MP_NOPTS_VALUE);
- else
- muxer_write_chunk(mux_v,vf->priv->enc_frame.length,0, MP_NOPTS_VALUE, MP_NOPTS_VALUE);
-#else
- vf->priv->enc_frame.mvs=NULL;
-#ifdef HAVE_XVID_VBR
- if (vbrpass >= 0) {
- int quant = vbrGetQuant(&vf->priv->vbr_state);
- int intra = vbrGetIntra(&vf->priv->vbr_state);
- vf->priv->enc_frame.quant = quant ? quant : 1;
- vf->priv->enc_frame.intra = intra;
- /* XXX - kludge to workaround some DivX encoder limitations:
- only pass 2 needs to call encore with VBR, and then it does
- not report quantizer and intra*/
- if (vf->priv->vbr_state.mode != VBR_MODE_2PASS_2)
- encore(vf->priv->enc_handle, ENC_OPT_ENCODE, &vf->priv->enc_frame, &enc_result);
- else {
- encore(vf->priv->enc_handle, ENC_OPT_ENCODE_VBR, &vf->priv->enc_frame, &enc_result);
- enc_result.quantizer = quant;
- if (intra >= 0)
- enc_result.is_key_frame = intra;
- }
- if (vbrUpdate(&vf->priv->vbr_state, enc_result.quantizer, enc_result.is_key_frame,
- (enc_result.total_bits - enc_result.texture_bits) / 8, enc_result.total_bits / 8,
- 0, 0, 0) == -1)
- abort();
- }
- else
-#endif
- if(pass==2){ // handle 2-pass:
- vf->priv->enc_frame.quant = VbrControl_get_quant();
- vf->priv->enc_frame.intra = VbrControl_get_intra();
- encore(vf->priv->enc_handle,ENC_OPT_ENCODE_VBR,&vf->priv->enc_frame,&enc_result);
- VbrControl_update_2pass_vbr_encoding(enc_result.motion_bits,
- enc_result.texture_bits,
- enc_result.total_bits);
- } else {
- vf->priv->enc_frame.quant=0;
- vf->priv->enc_frame.intra=0;
- encore(vf->priv->enc_handle,ENC_OPT_ENCODE,&vf->priv->enc_frame,&enc_result);
- if(pass==1){
- VbrControl_update_2pass_vbr_analysis(enc_result.is_key_frame,
- enc_result.motion_bits,
- enc_result.texture_bits,
- enc_result.total_bits,
- enc_result.quantizer);
- }
- }
- muxer_write_chunk(mux_v,vf->priv->enc_frame.length,enc_result.is_key_frame?0x10:0, MP_NOPTS_VALUE, MP_NOPTS_VALUE);
-#endif
- return 1;
-}
-
-//===========================================================================//
-
-static int vf_open(vf_instance_t *vf, char* args){
- vf->config=config;
- vf->default_caps=VFCAP_CONSTANT;
- vf->control=control;
- vf->query_format=query_format;
- vf->put_image=put_image;
-//#ifdef HAVE_XVID_VBR
- vf->uninit = uninit;
-//#endif
- vf->priv=malloc(sizeof(struct vf_priv_s));
- memset(vf->priv,0,sizeof(struct vf_priv_s));
- vf->priv->mux=(muxer_stream_t*)args;
-
- mux_v->bih=calloc(1, sizeof(BITMAPINFOHEADER));
- mux_v->bih->biSize=sizeof(BITMAPINFOHEADER);
- mux_v->bih->biWidth=0;
- mux_v->bih->biHeight=0;
- mux_v->bih->biPlanes=1;
- mux_v->bih->biBitCount=24;
-#if ENCORE_MAJOR_VERSION >= 5010
- mux_v->bih->biCompression=mmioFOURCC('D','X','5','0');
-#else
- mux_v->bih->biCompression=mmioFOURCC('d','i','v','x');
-#endif
-
- return 1;
-}
-
-vf_info_t ve_info_divx4 = {
- "divx4 encoder",
- "divx4",
- "A'rpi",
- "for internal use by mencoder",
- vf_open
-};
-
-//===========================================================================//
diff --git a/libmpdemux/video.c b/libmpdemux/video.c
index 40e7689e6d..2bff7fa75c 100644
--- a/libmpdemux/video.c
+++ b/libmpdemux/video.c
@@ -579,14 +579,12 @@ int video_read_frame(sh_video_t* sh_video,float* frame_time_ptr,unsigned char**
case DEMUXER_TYPE_MOV:
case DEMUXER_TYPE_FILM:
case DEMUXER_TYPE_VIVO:
- case DEMUXER_TYPE_OGG:
case DEMUXER_TYPE_ASF: {
float next_pts = ds_get_next_pts(d_video);
float d= next_pts > 0 ? next_pts - d_video->pts : d_video->pts-pts1;
if(d>=0){
if(d>0){
- /* 10000 is used for OGM only */
- if((int)sh_video->fps==1000||(int)sh_video->fps==10000)
+ if((int)sh_video->fps==1000)
mp_msg(MSGT_CPLAYER,MSGL_V,"\navg. framerate: %d fps \n",(int)(1.0f/d));
sh_video->frametime=d; // 1ms
sh_video->fps=1.0f/d;
diff --git a/libvo/video_out.c b/libvo/video_out.c
index f66b8e95ce..b10614a7b6 100644
--- a/libvo/video_out.c
+++ b/libvo/video_out.c
@@ -79,7 +79,6 @@ extern vo_functions_t video_out_3dfx;
extern vo_functions_t video_out_tdfxfb;
extern vo_functions_t video_out_s3fb;
extern vo_functions_t video_out_null;
-//extern vo_functions_t video_out_odivx;
extern vo_functions_t video_out_zr;
extern vo_functions_t video_out_zr2;
extern vo_functions_t video_out_bl;
diff --git a/mencoder.c b/mencoder.c
index 3392acc433..e7d9637586 100644
--- a/mencoder.c
+++ b/mencoder.c
@@ -1,7 +1,6 @@
#define VCODEC_COPY 0
#define VCODEC_FRAMENO 1
// real codecs:
-#define VCODEC_DIVX4 2
#define VCODEC_LIBAVCODEC 4
#define VCODEC_VFW 7
#define VCODEC_LIBDV 8
@@ -831,8 +830,6 @@ default: {
static vf_instance_t * ve = NULL;
if (!ve) {
switch(mux_v->codec){
- case VCODEC_DIVX4:
- sh_video->vfilter=vf_open_encoder(NULL,"divx4",(char *)mux_v); break;
case VCODEC_LIBAVCODEC:
sh_video->vfilter=vf_open_encoder(NULL,"lavc",(char *)mux_v); break;
case VCODEC_RAW: