Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
a1c6fc77
Commit
a1c6fc77
authored
May 01, 2018
by
Rostislav Pehlivanov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mpegvideo: remove support for libxvid's RC system
Signed-off-by:
Rostislav Pehlivanov
<
atomnuker@gmail.com
>
parent
0f4ca420
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
6 additions
and
199 deletions
+6
-199
MAINTAINERS
MAINTAINERS
+0
-1
Makefile
libavcodec/Makefile
+1
-1
libxvid_rc.c
libavcodec/libxvid_rc.c
+0
-164
mpegvideo.h
libavcodec/mpegvideo.h
+4
-10
mpegvideo_enc.c
libavcodec/mpegvideo_enc.c
+1
-23
No files found.
MAINTAINERS
View file @
a1c6fc77
...
...
@@ -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:
...
...
libavcodec/Makefile
View file @
a1c6fc77
...
...
@@ -985,7 +985,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
...
...
libavcodec/libxvid_rc.c
deleted
100644 → 0
View file @
0f4ca420
/*
* 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
);
}
libavcodec/mpegvideo.h
View file @
a1c6fc77
...
...
@@ -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", "de
fault 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", "de
precated, 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" }, \
...
...
libavcodec/mpegvideo_enc.c
View file @
a1c6fc77
...
...
@@ -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
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment