diff mbox

[FFmpeg-devel] mpegvideo: remove support for libxvid's RC system

Message ID 20180501190043.2313-1-atomnuker@gmail.com
State Accepted
Commit a1c6fc773f941fd6a6ef3f12f102a7902ae69453
Headers show

Commit Message

Rostislav Pehlivanov May 1, 2018, 7 p.m. UTC
Its a reminder of a bygone era. Less flexible than the internal RC
system, probably worse and most definitely broken. Drop it. No one
ever used it either, except for mislead people.
---
 MAINTAINERS                |   1 -
 libavcodec/Makefile        |   2 +-
 libavcodec/libxvid_rc.c    | 164 -------------------------------------
 libavcodec/mpegvideo.h     |  14 +---
 libavcodec/mpegvideo_enc.c |  24 +-----
 5 files changed, 6 insertions(+), 199 deletions(-)
 delete mode 100644 libavcodec/libxvid_rc.c

Comments

Rostislav Pehlivanov May 1, 2018, 7:41 p.m. UTC | #1
On 1 May 2018 at 20:00, Rostislav Pehlivanov <atomnuker@gmail.com> wrote:

>
>  {"ibias", "intra quant bias",
>  FF_MPV_OFFSET(intra_quant_bias), AV_OPT_TYPE_INT, {.i64 =
> FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },   \
>  {"pbias", "inter quant bias",
>  FF_MPV_OFFSET(inter_quant_bias), AV_OPT_TYPE_INT, {.i64 =
> FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },   \
> -{"rc_strategy", "ratecontrol method",
>  FF_MPV_OFFSET(rc_strategy), AV_OPT_TYPE_INT, {.i64 =
> MPV_RC_STRATEGY_FFMPEG }, 0, NB_MPV_RC_STRATEGY-1, FF_MPV_OPT_FLAGS,
> "rc_strategy" },   \
> -    { "ffmpeg", "default native rate control", 0, AV_OPT_TYPE_CONST, {
> .i64 = MPV_RC_STRATEGY_FFMPEG }, 0, 0, FF_MPV_OPT_FLAGS, "rc_strategy" }, \
> -    { "xvid",   "libxvid (2 pass only)",       0, AV_OPT_TYPE_CONST, {
> .i64 = MPV_RC_STRATEGY_XVID },   0, 0, FF_MPV_OPT_FLAGS, "rc_strategy" }, \
> +{"rc_strategy", "ratecontrol method",
>  FF_MPV_OFFSET(rc_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 1,
> FF_MPV_OPT_FLAGS, "rc_strategy" },   \
> +    { "ffmpeg", "deprecated, does nothing", 0, AV_OPT_TYPE_CONST, { .i64
> = 0 }, 0, 0, FF_MPV_OPT_FLAGS, "rc_strategy" }, \
> +    { "xvid",   "deprecated, does nothing", 0, AV_OPT_TYPE_CONST, { .i64
> = 0 }, 0, 0, FF_MPV_OPT_FLAGS, "rc_strategy" }, \
>
>
Locally changed to use the new AV_OPT_FLAG_DEPRECATED flag:
+{"rc_strategy", deprecated, does nothing", FF_MPV_OFFSET(rc_strategy),
AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS |
AV_OPT_FLAG_DEPRECATED, "rc_strategy" },   \
+    { "ffmpeg", "deprecated, does nothing", 0, AV_OPT_TYPE_CONST, { .i64 =
0 }, 0, 0, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED, "rc_strategy" }, \
+    { "xvid",   "deprecated, does nothing", 0, AV_OPT_TYPE_CONST, { .i64 =
0 }, 0, 0, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED, "rc_strategy" }, \
Carl Eugen Hoyos May 1, 2018, 8:58 p.m. UTC | #2
2018-05-01 21:00 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
> Its a reminder of a bygone era. Less flexible than the internal RC
> system, probably worse and most definitely broken. Drop it. No one
> ever used it either, except for mislead people.

Sorry for my bad git knowledge:
Is the above part of the commit message?

Carl Eugen
Rostislav Pehlivanov May 2, 2018, 3:35 a.m. UTC | #3
On 1 May 2018 at 21:58, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:

> 2018-05-01 21:00 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
> > Its a reminder of a bygone era. Less flexible than the internal RC
> > system, probably worse and most definitely broken. Drop it. No one
> > ever used it either, except for mislead people.
>
> Sorry for my bad git knowledge:
> Is the above part of the commit message?
>
> Carl Eugen
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

Yep, its part of the commit message.
Moritz Barsnick May 2, 2018, 9:42 a.m. UTC | #4
On Wed, May 02, 2018 at 04:35:21 +0100, Rostislav Pehlivanov wrote:
> On 1 May 2018 at 21:58, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
> > 2018-05-01 21:00 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
> > > ever used it either, except for mislead people.
> > Is the above part of the commit message?
> Yep, its part of the commit message.

Well, not commenting on the message content or its style, "mislead"
would be past participle "misled".

*duck*
Moritz
Carl Eugen Hoyos May 2, 2018, 8:19 p.m. UTC | #5
2018-05-02 5:35 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
> On 1 May 2018 at 21:58, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
>
>> 2018-05-01 21:00 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
>> > Its a reminder of a bygone era. Less flexible than the internal RC
>> > system, probably worse and most definitely broken. Drop it. No one
>> > ever used it either, except for mislead people.
>>
>> Sorry for my bad git knowledge:
>> Is the above part of the commit message?
>>
>> Carl Eugen

> Yep, its part of the commit message.

Then the patch cannot be committed as-is.

Please wait for a comment from the maintainer, Carl Eugen
Rostislav Pehlivanov May 2, 2018, 9:23 p.m. UTC | #6
On 2 May 2018 at 21:19, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:

> 2018-05-02 5:35 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
> > On 1 May 2018 at 21:58, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
> >
> >> 2018-05-01 21:00 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
> >> > Its a reminder of a bygone era. Less flexible than the internal RC
> >> > system, probably worse and most definitely broken. Drop it. No one
> >> > ever used it either, except for mislead people.
> >>
> >> Sorry for my bad git knowledge:
> >> Is the above part of the commit message?
> >>
> >> Carl Eugen
>
> > Yep, its part of the commit message.
>
> Then the patch cannot be committed as-is.
>

Why?



> Please wait for a comment from the maintainer, Carl Eugen
>

So if the maintainer approves I can commit as is? Your previous sentence
makes no sense at all as you're not the maintainer nor did you even explain
what's wrong with it. Neither can I, as every statement in that commit
message is truthful.


> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
Carl Eugen Hoyos May 2, 2018, 9:36 p.m. UTC | #7
2018-05-02 23:23 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
> On 2 May 2018 at 21:19, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
>
>> 2018-05-02 5:35 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
>> > On 1 May 2018 at 21:58, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
>> >
>> >> 2018-05-01 21:00 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
>> >> > Its a reminder of a bygone era. Less flexible than the internal RC
>> >> > system, probably worse and most definitely broken. Drop it. No one
>> >> > ever used it either, except for mislead people.
>> >>
>> >> Sorry for my bad git knowledge:
>> >> Is the above part of the commit message?
>> >>
>> >> Carl Eugen
>>
>> > Yep, its part of the commit message.
>>
>> Then the patch cannot be committed as-is.
>>
>
> Why?
>
>
>
>> Please wait for a comment from the maintainer, Carl Eugen
>>
>
> So if the maintainer approves I can commit as is?

No, of course not, the commit message is offensive.
Just remove the "reasoning".

Carl Eugen
Michael Niedermayer May 2, 2018, 11:10 p.m. UTC | #8
On Wed, May 02, 2018 at 10:23:08PM +0100, Rostislav Pehlivanov wrote:
> On 2 May 2018 at 21:19, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
> 
> > 2018-05-02 5:35 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
> > > On 1 May 2018 at 21:58, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
> > >
> > >> 2018-05-01 21:00 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
> > >> > Its a reminder of a bygone era. Less flexible than the internal RC
> > >> > system, probably worse and most definitely broken. Drop it. No one
> > >> > ever used it either, except for mislead people.
> > >>
> > >> Sorry for my bad git knowledge:
> > >> Is the above part of the commit message?
> > >>
> > >> Carl Eugen
> >
> > > Yep, its part of the commit message.
> >
> > Then the patch cannot be committed as-is.
> >
> 
> Why?
> 
> 
> 
> > Please wait for a comment from the maintainer, Carl Eugen

The commit message is (unnecessarily) offensive.

About the removial itself, its a question if theres someone who 
used/ wants to use this and wants to continue to use it. 
(thats something i do not know)

I certainly can look into fixing it if theres someone who uses this. In fact
i was not aware of this being broken, but i think i havnt tested it for a long
time so it very well could be broken.

If OTOH noone uses / wants to use it then well there wouldnt be much point
in keeping it


Thanks

[...]
Rostislav Pehlivanov May 2, 2018, 11:18 p.m. UTC | #9
On 3 May 2018 at 00:10, Michael Niedermayer <michael@niedermayer.cc> wrote:

> On Wed, May 02, 2018 at 10:23:08PM +0100, Rostislav Pehlivanov wrote:
> > On 2 May 2018 at 21:19, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
> >
> > > 2018-05-02 5:35 GMT+02:00, Rostislav Pehlivanov <atomnuker@gmail.com>:
> > > > On 1 May 2018 at 21:58, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
> > > >
> > > >> 2018-05-01 21:00 GMT+02:00, Rostislav Pehlivanov <
> atomnuker@gmail.com>:
> > > >> > Its a reminder of a bygone era. Less flexible than the internal RC
> > > >> > system, probably worse and most definitely broken. Drop it. No one
> > > >> > ever used it either, except for mislead people.
> > > >>
> > > >> Sorry for my bad git knowledge:
> > > >> Is the above part of the commit message?
> > > >>
> > > >> Carl Eugen
> > >
> > > > Yep, its part of the commit message.
> > >
> > > Then the patch cannot be committed as-is.
> > >
> >
> > Why?
> >
> >
> >
> > > Please wait for a comment from the maintainer, Carl Eugen
>

The commit message is (unnecessarily) offensive.
>

There's nothing offensive in there. Users are mislead because this option
exists because they think it'll give them better quality. It doesn't.


About the removial itself, its a question if theres someone who
> used/ wants to use this and wants to continue to use it.
> (thats something i do not know)
>

No one wanted to use it in the first place.


I certainly can look into fixing it if theres someone who uses this. In fact
> i was not aware of this being broken, but i think i havnt tested it for a
> long
> time so it very well could be broken.
>
> If OTOH noone uses / wants to use it then well there wouldnt be much point
> in keeping it
>

Removed the commit message altogether. I plan to apply this tomorrow unless
there are objections.
diff mbox

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index b61856243c..ca3f4e5a2f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -121,7 +121,6 @@  Generic Parts:
     motion*                             Michael Niedermayer
   rate control:
     ratecontrol.c                       Michael Niedermayer
-    libxvid_rc.c                        Michael Niedermayer
   simple IDCT:
     simple_idct.c, simple_idct.h        Michael Niedermayer
   postprocessing:
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index d727b218dc..4b55875964 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -984,7 +984,7 @@  OBJS-$(CONFIG_LIBX262_ENCODER)            += libx264.o
 OBJS-$(CONFIG_LIBX264_ENCODER)            += libx264.o
 OBJS-$(CONFIG_LIBX265_ENCODER)            += libx265.o
 OBJS-$(CONFIG_LIBXAVS_ENCODER)            += libxavs.o
-OBJS-$(CONFIG_LIBXVID_ENCODER)            += libxvid.o libxvid_rc.o
+OBJS-$(CONFIG_LIBXVID_ENCODER)            += libxvid.o
 OBJS-$(CONFIG_LIBZVBI_TELETEXT_DECODER)   += libzvbi-teletextdec.o ass.o
 
 # parsers
diff --git a/libavcodec/libxvid_rc.c b/libavcodec/libxvid_rc.c
deleted file mode 100644
index 076c32c413..0000000000
--- a/libavcodec/libxvid_rc.c
+++ /dev/null
@@ -1,164 +0,0 @@ 
-/*
- * Xvid rate control wrapper for lavc video encoders
- *
- * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-
-#if HAVE_IO_H
-#include <io.h>
-#endif
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <xvid.h>
-
-#include "libavutil/attributes.h"
-#include "libavutil/internal.h"
-
-#include "avcodec.h"
-#include "libxvid.h"
-#include "mpegvideo.h"
-
-av_cold int ff_xvid_rate_control_init(MpegEncContext *s)
-{
-    char *tmp_name;
-    int fd, i;
-    xvid_plg_create_t xvid_plg_create = { 0 };
-    xvid_plugin_2pass2_t xvid_2pass2  = { 0 };
-
-    fd = avpriv_tempfile("xvidrc.", &tmp_name, 0, s->avctx);
-    if (fd < 0) {
-        av_log(s, AV_LOG_ERROR, "Can't create temporary pass2 file.\n");
-        return fd;
-    }
-
-    for (i = 0; i < s->rc_context.num_entries; i++) {
-        static const char frame_types[] = " ipbs";
-        char tmp[256];
-        RateControlEntry *rce;
-
-        rce = &s->rc_context.entry[i];
-
-        snprintf(tmp, sizeof(tmp), "%c %d %d %d %d %d %d\n",
-                 frame_types[rce->pict_type],
-                 (int) lrintf(rce->qscale / FF_QP2LAMBDA),
-                 rce->i_count, s->mb_num - rce->i_count - rce->skip_count,
-                 rce->skip_count,
-                 (rce->i_tex_bits + rce->p_tex_bits + rce->misc_bits + 7) / 8,
-                 (rce->header_bits + rce->mv_bits + 7) / 8);
-
-        if (write(fd, tmp, strlen(tmp)) < 0) {
-            int ret = AVERROR(errno);
-            av_log(s, AV_LOG_ERROR, "Error %s writing 2pass logfile\n", av_err2str(ret));
-            av_free(tmp_name);
-            close(fd);
-            return ret;
-        }
-    }
-
-    close(fd);
-
-    xvid_2pass2.version     = XVID_MAKE_VERSION(1, 1, 0);
-    xvid_2pass2.filename    = tmp_name;
-    xvid_2pass2.bitrate     = s->avctx->bit_rate;
-    xvid_2pass2.vbv_size    = s->avctx->rc_buffer_size;
-    xvid_2pass2.vbv_maxrate = s->avctx->rc_max_rate;
-    xvid_2pass2.vbv_initial = s->avctx->rc_initial_buffer_occupancy;
-
-    xvid_plg_create.version = XVID_MAKE_VERSION(1, 1, 0);
-    xvid_plg_create.fbase   = s->avctx->time_base.den;
-    xvid_plg_create.fincr   = s->avctx->time_base.num;
-    xvid_plg_create.param   = &xvid_2pass2;
-
-    if (xvid_plugin_2pass2(NULL, XVID_PLG_CREATE, &xvid_plg_create,
-                           &s->rc_context.non_lavc_opaque) < 0) {
-        av_log(s, AV_LOG_ERROR, "xvid_plugin_2pass2 failed\n");
-        return -1;
-    }
-    return 0;
-}
-
-float ff_xvid_rate_estimate_qscale(MpegEncContext *s, int dry_run)
-{
-    xvid_plg_data_t xvid_plg_data = { 0 };
-
-    xvid_plg_data.version       = XVID_MAKE_VERSION(1, 1, 0);
-    xvid_plg_data.width         = s->width;
-    xvid_plg_data.height        = s->height;
-    xvid_plg_data.mb_width      = s->mb_width;
-    xvid_plg_data.mb_height     = s->mb_height;
-    xvid_plg_data.fbase         = s->avctx->time_base.den;
-    xvid_plg_data.fincr         = s->avctx->time_base.num;
-    xvid_plg_data.min_quant[0]  = s->avctx->qmin;
-    xvid_plg_data.min_quant[1]  = s->avctx->qmin;
-    xvid_plg_data.min_quant[2]  = s->avctx->qmin;   // FIXME i/b factor & offset
-    xvid_plg_data.max_quant[0]  = s->avctx->qmax;
-    xvid_plg_data.max_quant[1]  = s->avctx->qmax;
-    xvid_plg_data.max_quant[2]  = s->avctx->qmax;   // FIXME i/b factor & offset
-    xvid_plg_data.bquant_offset = 0;      //  100 * s->avctx->b_quant_offset;
-    xvid_plg_data.bquant_ratio  = 100;    //      * s->avctx->b_quant_factor;
-
-    if (!s->rc_context.dry_run_qscale) {
-        if (s->picture_number) {
-            xvid_plg_data.length        =
-            xvid_plg_data.stats.length  = (s->frame_bits + 7) / 8;
-            xvid_plg_data.frame_num     = s->rc_context.last_picture_number;
-            xvid_plg_data.quant         = s->qscale;
-            xvid_plg_data.type          = s->last_pict_type;
-            if (xvid_plugin_2pass2(s->rc_context.non_lavc_opaque,
-                                   XVID_PLG_AFTER, &xvid_plg_data, NULL)) {
-                av_log(s, AV_LOG_ERROR,
-                       "xvid_plugin_2pass2(handle, XVID_PLG_AFTER, ...) FAILED\n");
-                return -1;
-            }
-        }
-        s->rc_context.last_picture_number =
-        xvid_plg_data.frame_num           = s->picture_number;
-        xvid_plg_data.quant               = 0;
-        if (xvid_plugin_2pass2(s->rc_context.non_lavc_opaque,
-                               XVID_PLG_BEFORE, &xvid_plg_data, NULL)) {
-            av_log(s, AV_LOG_ERROR,
-                   "xvid_plugin_2pass2(handle, XVID_PLG_BEFORE, ...) FAILED\n");
-            return -1;
-        }
-        s->rc_context.dry_run_qscale = xvid_plg_data.quant;
-    }
-    xvid_plg_data.quant = s->rc_context.dry_run_qscale;
-    if (!dry_run)
-        s->rc_context.dry_run_qscale = 0;
-
-    // FIXME this is not exactly identical to Xvid
-    if (s->pict_type == AV_PICTURE_TYPE_B)
-        return xvid_plg_data.quant * FF_QP2LAMBDA * s->avctx->b_quant_factor +
-            s->avctx->b_quant_offset;
-    else
-        return xvid_plg_data.quant * FF_QP2LAMBDA;
-}
-
-av_cold void ff_xvid_rate_control_uninit(MpegEncContext *s)
-{
-    xvid_plg_destroy_t xvid_plg_destroy;
-
-    xvid_plugin_2pass2(s->rc_context.non_lavc_opaque, XVID_PLG_DESTROY,
-                       &xvid_plg_destroy, NULL);
-}
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index 541909cbb1..8a5296e493 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -369,7 +369,7 @@  typedef struct MpegEncContext {
     uint8_t *mb_info_ptr;
     int mb_info_size;
     int ehc_mode;
-    int rc_strategy;
+    int rc_strategy;                ///< deprecated
 
     /* H.263+ specific */
     int umvplus;                    ///< == H.263+ && unrestricted_mv
@@ -587,12 +587,6 @@  typedef struct MpegEncContext {
 #define FF_MPV_FLAG_NAQ          0x0010
 #define FF_MPV_FLAG_MV0          0x0020
 
-enum rc_strategy {
-    MPV_RC_STRATEGY_FFMPEG,
-    MPV_RC_STRATEGY_XVID,
-    NB_MPV_RC_STRATEGY
-};
-
 #define FF_MPV_OPT_CMP_FUNC \
 { "sad",    "Sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \
 { "sse",    "Sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \
@@ -646,9 +640,9 @@  FF_MPV_OPT_CMP_FUNC, \
 {"lmax", "maximum Lagrange factor (VBR)",                           FF_MPV_OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS },            \
 {"ibias", "intra quant bias",                                       FF_MPV_OFFSET(intra_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },   \
 {"pbias", "inter quant bias",                                       FF_MPV_OFFSET(inter_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },   \
-{"rc_strategy", "ratecontrol method",                               FF_MPV_OFFSET(rc_strategy), AV_OPT_TYPE_INT, {.i64 = MPV_RC_STRATEGY_FFMPEG }, 0, NB_MPV_RC_STRATEGY-1, FF_MPV_OPT_FLAGS, "rc_strategy" },   \
-    { "ffmpeg", "default native rate control", 0, AV_OPT_TYPE_CONST, { .i64 = MPV_RC_STRATEGY_FFMPEG }, 0, 0, FF_MPV_OPT_FLAGS, "rc_strategy" }, \
-    { "xvid",   "libxvid (2 pass only)",       0, AV_OPT_TYPE_CONST, { .i64 = MPV_RC_STRATEGY_XVID },   0, 0, FF_MPV_OPT_FLAGS, "rc_strategy" }, \
+{"rc_strategy", "ratecontrol method",                               FF_MPV_OFFSET(rc_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS, "rc_strategy" },   \
+    { "ffmpeg", "deprecated, does nothing", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, FF_MPV_OPT_FLAGS, "rc_strategy" }, \
+    { "xvid",   "deprecated, does nothing", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, FF_MPV_OPT_FLAGS, "rc_strategy" }, \
 {"motion_est", "motion estimation algorithm",                       FF_MPV_OFFSET(motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, FF_MPV_OPT_FLAGS, "motion_est" },   \
 { "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \
 { "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index 979e138b88..9fdab31a25 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -1024,18 +1024,6 @@  FF_ENABLE_DEPRECATION_WARNINGS
     if (ff_rate_control_init(s) < 0)
         return -1;
 
-    if ((s->avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == MPV_RC_STRATEGY_XVID) {
-#if CONFIG_LIBXVID
-        ret = ff_xvid_rate_control_init(s);
-#else
-        ret = AVERROR(ENOSYS);
-        av_log(s->avctx, AV_LOG_ERROR,
-               "Xvid ratecontrol requires libavcodec compiled with Xvid support.\n");
-#endif
-        if (ret < 0)
-            return ret;
-    }
-
 #if FF_API_PRIVATE_OPT
     FF_DISABLE_DEPRECATION_WARNINGS
     if (avctx->brd_scale)
@@ -1082,10 +1070,6 @@  av_cold int ff_mpv_encode_end(AVCodecContext *avctx)
     int i;
 
     ff_rate_control_uninit(s);
-#if CONFIG_LIBXVID
-    if ((avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == MPV_RC_STRATEGY_XVID)
-        ff_xvid_rate_control_uninit(s);
-#endif
 
     ff_mpv_common_end(s);
     if (CONFIG_MJPEG_ENCODER &&
@@ -3620,13 +3604,7 @@  static int estimate_qp(MpegEncContext *s, int dry_run){
         s->current_picture.f->quality = s->next_lambda;
         if(!dry_run) s->next_lambda= 0;
     } else if (!s->fixed_qscale) {
-        int quality;
-#if CONFIG_LIBXVID
-        if ((s->avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == MPV_RC_STRATEGY_XVID)
-            quality = ff_xvid_rate_estimate_qscale(s, dry_run);
-        else
-#endif
-        quality = ff_rate_estimate_qscale(s, dry_run);
+        int quality = ff_rate_estimate_qscale(s, dry_run);
         s->current_picture_ptr->f->quality =
         s->current_picture.f->quality = quality;
         if (s->current_picture.f->quality < 0)