[FFmpeg-cvslog] avcodec/mpegvideoenc: Add bit_rate to MPVMainEncContext
Andreas Rheinhardt
git at videolan.org
Wed Mar 26 06:09:54 EET 2025
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Sat Mar 15 07:25:15 2025 +0100| [9f469e244e860465ad7412d1d9f159640f61eb61] | committer: Andreas Rheinhardt
avcodec/mpegvideoenc: Add bit_rate to MPVMainEncContext
Use it instead of the MpegEncContext field which will
be removed soon.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9f469e244e860465ad7412d1d9f159640f61eb61
---
libavcodec/mpeg12enc.c | 2 +-
libavcodec/mpegvideo_enc.c | 2 +-
libavcodec/mpegvideoenc.h | 1 +
libavcodec/msmpeg4enc.c | 15 ++++++++++-----
libavcodec/ratecontrol.c | 16 ++++++++--------
libavcodec/snowenc.c | 2 +-
libavcodec/wmv2enc.c | 4 ++--
7 files changed, 24 insertions(+), 18 deletions(-)
diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c
index 43addcfda9..ae87f28d66 100644
--- a/libavcodec/mpeg12enc.c
+++ b/libavcodec/mpeg12enc.c
@@ -198,7 +198,7 @@ static void mpeg1_encode_sequence_header(MPEG12EncContext *mpeg12)
else
/* VBV calculation: Scaled so that a VCD has the proper
* VBV size of 40 kilobytes */
- vbv_buffer_size = av_rescale_rnd(s->bit_rate, 20, 1151929 / 2, AV_ROUND_ZERO) * 8 * 1024;
+ vbv_buffer_size = av_rescale_rnd(mpeg12->mpeg.bit_rate, 20, 1151929 / 2, AV_ROUND_ZERO) * 8 * 1024;
vbv_buffer_size = (vbv_buffer_size + 16383) / 16384;
put_sbits(&s->pb, 18, v);
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index cb1cf972d8..116c974098 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -449,7 +449,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
avctx->bits_per_raw_sample = av_clip(avctx->bits_per_raw_sample, 0, 8);
- s->bit_rate = avctx->bit_rate;
+ m->bit_rate = avctx->bit_rate;
s->width = avctx->width;
s->height = avctx->height;
if (avctx->gop_size > 600 &&
diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h
index 36c9145c96..f796b2a40a 100644
--- a/libavcodec/mpegvideoenc.h
+++ b/libavcodec/mpegvideoenc.h
@@ -87,6 +87,7 @@ typedef struct MPVMainEncContext {
int (*encode_picture_header)(struct MPVMainEncContext *m);
/* bit rate control */
+ int64_t bit_rate;
int64_t total_bits;
int frame_bits; ///< bits used for the current frame
int header_bits;
diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c
index 9e58a91a80..e5501e5e32 100644
--- a/libavcodec/msmpeg4enc.c
+++ b/libavcodec/msmpeg4enc.c
@@ -30,6 +30,8 @@
#include <stdint.h>
#include <string.h>
+#define NO_SLICE_THREADING_HERE
+
#include "libavutil/attributes.h"
#include "libavutil/avutil.h"
#include "libavutil/thread.h"
@@ -222,8 +224,10 @@ static int msmpeg4_encode_picture_header(MPVMainEncContext *const m)
s->use_skip_mb_code = 1; /* only if P-frame */
s->per_mb_rl_table = 0;
if (s->msmpeg4_version == MSMP4_WMV1)
- s->inter_intra_pred= (s->width*s->height < 320*240 && s->bit_rate<=II_BITRATE && s->pict_type==AV_PICTURE_TYPE_P);
- ff_dlog(s->avctx, "%d %"PRId64" %d %d %d\n", s->pict_type, s->bit_rate,
+ s->inter_intra_pred = s->width * s->height < 320*240 &&
+ m->bit_rate <= II_BITRATE &&
+ s->pict_type == AV_PICTURE_TYPE_P;
+ ff_dlog(s->avctx, "%d %"PRId64" %d %d %d\n", s->pict_type, m->bit_rate,
s->inter_intra_pred, s->width, s->height);
if (s->pict_type == AV_PICTURE_TYPE_I) {
@@ -232,7 +236,7 @@ static int msmpeg4_encode_picture_header(MPVMainEncContext *const m)
if (s->msmpeg4_version == MSMP4_WMV1) {
ff_msmpeg4_encode_ext_header(s);
- if(s->bit_rate>MBAC_BITRATE)
+ if (m->bit_rate > MBAC_BITRATE)
put_bits(&s->pb, 1, s->per_mb_rl_table);
}
@@ -247,7 +251,7 @@ static int msmpeg4_encode_picture_header(MPVMainEncContext *const m)
} else {
put_bits(&s->pb, 1, s->use_skip_mb_code);
- if (s->msmpeg4_version == MSMP4_WMV1 && s->bit_rate > MBAC_BITRATE)
+ if (s->msmpeg4_version == MSMP4_WMV1 && m->bit_rate > MBAC_BITRATE)
put_bits(&s->pb, 1, s->per_mb_rl_table);
if (s->msmpeg4_version > MSMP4_V2) {
@@ -268,6 +272,7 @@ static int msmpeg4_encode_picture_header(MPVMainEncContext *const m)
void ff_msmpeg4_encode_ext_header(MpegEncContext * s)
{
+ const MPVMainEncContext *const m = slice_to_mainenc(s);
unsigned fps;
if (s->avctx->framerate.num > 0 && s->avctx->framerate.den > 0)
@@ -284,7 +289,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
put_bits(&s->pb, 5, FFMIN(fps, 31)); //yes 29.97 -> 29
- put_bits(&s->pb, 11, FFMIN(s->bit_rate / 1024, 2047));
+ put_bits(&s->pb, 11, FFMIN(m->bit_rate / 1024, 2047));
if (s->msmpeg4_version >= MSMP4_V3)
put_bits(&s->pb, 1, s->flipflop_rounding);
diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c
index 20e3ccabf8..0d2bf8fb30 100644
--- a/libavcodec/ratecontrol.c
+++ b/libavcodec/ratecontrol.c
@@ -347,7 +347,7 @@ static int init_pass2(MPVMainEncContext *const m)
double complexity[5] = { 0 }; // approximate bits at quant=1
uint64_t const_bits[5] = { 0 }; // quantizer independent bits
uint64_t all_const_bits;
- uint64_t all_available_bits = av_rescale_q(s->bit_rate,
+ uint64_t all_available_bits = av_rescale_q(m->bit_rate,
(AVRational){rcc->num_entries,1},
fps);
double rate_factor = 0;
@@ -477,8 +477,8 @@ static int init_pass2(MPVMainEncContext *const m)
av_assert0(toobig <= 40);
av_log(s->avctx, AV_LOG_DEBUG,
"[lavc rc] requested bitrate: %"PRId64" bps expected bitrate: %"PRId64" bps\n",
- s->bit_rate,
- (int64_t)(expected_bits / ((double)all_available_bits / s->bit_rate)));
+ m->bit_rate,
+ (int64_t)(expected_bits / ((double)all_available_bits / m->bit_rate)));
av_log(s->avctx, AV_LOG_DEBUG,
"[lavc rc] estimated target average qp: %.3f\n",
(float)qscale_sum / rcc->num_entries);
@@ -696,7 +696,7 @@ av_cold int ff_rate_control_init(MPVMainEncContext *const m)
get_qscale(m, &rce, rcc->pass1_wanted_bits / rcc->pass1_rc_eq_output_sum, i);
// FIXME misbehaves a little for variable fps
- rcc->pass1_wanted_bits += s->bit_rate / get_fps(s->avctx);
+ rcc->pass1_wanted_bits += m->bit_rate / get_fps(s->avctx);
}
}
}
@@ -971,9 +971,9 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
dts_pic = s->last_pic.ptr;
if (!dts_pic || dts_pic->f->pts == AV_NOPTS_VALUE)
- wanted_bits_double = s->bit_rate * (double)picture_number / fps;
+ wanted_bits_double = m->bit_rate * (double)picture_number / fps;
else
- wanted_bits_double = s->bit_rate * (double)dts_pic->f->pts / fps;
+ wanted_bits_double = m->bit_rate * (double)dts_pic->f->pts / fps;
if (wanted_bits_double > INT64_MAX) {
av_log(s->avctx, AV_LOG_WARNING, "Bits exceed 64bit range\n");
wanted_bits = INT64_MAX;
@@ -1047,7 +1047,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
q = modify_qscale(m, rce, q, picture_number);
- rcc->pass1_wanted_bits += s->bit_rate / fps;
+ rcc->pass1_wanted_bits += m->bit_rate / fps;
av_assert0(q > 0.0);
}
@@ -1061,7 +1061,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
wanted_bits / 1000, m->total_bits / 1000,
br_compensation, short_term_q, m->frame_bits,
m->mb_var_sum, m->mc_mb_var_sum,
- s->bit_rate / 1000, (int)fps);
+ m->bit_rate / 1000, (int)fps);
}
if (q < qmin)
diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c
index e074e878d6..b4a329158f 100644
--- a/libavcodec/snowenc.c
+++ b/libavcodec/snowenc.c
@@ -227,7 +227,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
s->version=0;
mpv->avctx = avctx;
- mpv->bit_rate= avctx->bit_rate;
+ enc->m.bit_rate = avctx->bit_rate;
enc->m.lmin = avctx->mb_lmin;
enc->m.lmax = avctx->mb_lmax;
mpv->mb_num = (avctx->width * avctx->height + 255) / 256; // For ratecontrol
diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c
index 3ab3e75722..6eda38d05f 100644
--- a/libavcodec/wmv2enc.c
+++ b/libavcodec/wmv2enc.c
@@ -55,7 +55,7 @@ static int encode_ext_header(WMV2EncContext *w)
init_put_bits(&pb, s->avctx->extradata, WMV2_EXTRADATA_SIZE);
put_bits(&pb, 5, s->avctx->time_base.den / s->avctx->time_base.num); // yes 29.97 -> 29
- put_bits(&pb, 11, FFMIN(s->bit_rate / 1024, 2047));
+ put_bits(&pb, 11, FFMIN(w->msmpeg4.m.bit_rate / 1024, 2047));
put_bits(&pb, 1, w->mspel_bit = 1);
put_bits(&pb, 1, s->loop_filter);
@@ -135,7 +135,7 @@ static int wmv2_encode_picture_header(MPVMainEncContext *const m)
put_bits(&s->pb, 1, s->dc_table_index);
put_bits(&s->pb, 1, s->mv_table_index);
- s->inter_intra_pred = 0; // (s->width * s->height < 320 * 240 && s->bit_rate <= II_BITRATE);
+ s->inter_intra_pred = 0; // (s->width * s->height < 320 * 240 && m->bit_rate <= II_BITRATE);
}
s->esc3_level_length = 0;
s->esc3_run_length = 0;
More information about the ffmpeg-cvslog
mailing list