You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
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@outlook.com>
This commit is contained in:
@ -198,7 +198,7 @@ static void mpeg1_encode_sequence_header(MPEG12EncContext *mpeg12)
|
|||||||
else
|
else
|
||||||
/* VBV calculation: Scaled so that a VCD has the proper
|
/* VBV calculation: Scaled so that a VCD has the proper
|
||||||
* VBV size of 40 kilobytes */
|
* 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;
|
vbv_buffer_size = (vbv_buffer_size + 16383) / 16384;
|
||||||
|
|
||||||
put_sbits(&s->pb, 18, v);
|
put_sbits(&s->pb, 18, v);
|
||||||
|
@ -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);
|
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->width = avctx->width;
|
||||||
s->height = avctx->height;
|
s->height = avctx->height;
|
||||||
if (avctx->gop_size > 600 &&
|
if (avctx->gop_size > 600 &&
|
||||||
|
@ -87,6 +87,7 @@ typedef struct MPVMainEncContext {
|
|||||||
int (*encode_picture_header)(struct MPVMainEncContext *m);
|
int (*encode_picture_header)(struct MPVMainEncContext *m);
|
||||||
|
|
||||||
/* bit rate control */
|
/* bit rate control */
|
||||||
|
int64_t bit_rate;
|
||||||
int64_t total_bits;
|
int64_t total_bits;
|
||||||
int frame_bits; ///< bits used for the current frame
|
int frame_bits; ///< bits used for the current frame
|
||||||
int header_bits;
|
int header_bits;
|
||||||
|
@ -30,6 +30,8 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#define NO_SLICE_THREADING_HERE
|
||||||
|
|
||||||
#include "libavutil/attributes.h"
|
#include "libavutil/attributes.h"
|
||||||
#include "libavutil/avutil.h"
|
#include "libavutil/avutil.h"
|
||||||
#include "libavutil/thread.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->use_skip_mb_code = 1; /* only if P-frame */
|
||||||
s->per_mb_rl_table = 0;
|
s->per_mb_rl_table = 0;
|
||||||
if (s->msmpeg4_version == MSMP4_WMV1)
|
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);
|
s->inter_intra_pred = s->width * s->height < 320*240 &&
|
||||||
ff_dlog(s->avctx, "%d %"PRId64" %d %d %d\n", s->pict_type, s->bit_rate,
|
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);
|
s->inter_intra_pred, s->width, s->height);
|
||||||
|
|
||||||
if (s->pict_type == AV_PICTURE_TYPE_I) {
|
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) {
|
if (s->msmpeg4_version == MSMP4_WMV1) {
|
||||||
ff_msmpeg4_encode_ext_header(s);
|
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);
|
put_bits(&s->pb, 1, s->per_mb_rl_table);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,7 +251,7 @@ static int msmpeg4_encode_picture_header(MPVMainEncContext *const m)
|
|||||||
} else {
|
} else {
|
||||||
put_bits(&s->pb, 1, s->use_skip_mb_code);
|
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);
|
put_bits(&s->pb, 1, s->per_mb_rl_table);
|
||||||
|
|
||||||
if (s->msmpeg4_version > MSMP4_V2) {
|
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)
|
void ff_msmpeg4_encode_ext_header(MpegEncContext * s)
|
||||||
{
|
{
|
||||||
|
const MPVMainEncContext *const m = slice_to_mainenc(s);
|
||||||
unsigned fps;
|
unsigned fps;
|
||||||
|
|
||||||
if (s->avctx->framerate.num > 0 && s->avctx->framerate.den > 0)
|
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, 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)
|
if (s->msmpeg4_version >= MSMP4_V3)
|
||||||
put_bits(&s->pb, 1, s->flipflop_rounding);
|
put_bits(&s->pb, 1, s->flipflop_rounding);
|
||||||
|
@ -347,7 +347,7 @@ static int init_pass2(MPVMainEncContext *const m)
|
|||||||
double complexity[5] = { 0 }; // approximate bits at quant=1
|
double complexity[5] = { 0 }; // approximate bits at quant=1
|
||||||
uint64_t const_bits[5] = { 0 }; // quantizer independent bits
|
uint64_t const_bits[5] = { 0 }; // quantizer independent bits
|
||||||
uint64_t all_const_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},
|
(AVRational){rcc->num_entries,1},
|
||||||
fps);
|
fps);
|
||||||
double rate_factor = 0;
|
double rate_factor = 0;
|
||||||
@ -477,8 +477,8 @@ static int init_pass2(MPVMainEncContext *const m)
|
|||||||
av_assert0(toobig <= 40);
|
av_assert0(toobig <= 40);
|
||||||
av_log(s->avctx, AV_LOG_DEBUG,
|
av_log(s->avctx, AV_LOG_DEBUG,
|
||||||
"[lavc rc] requested bitrate: %"PRId64" bps expected bitrate: %"PRId64" bps\n",
|
"[lavc rc] requested bitrate: %"PRId64" bps expected bitrate: %"PRId64" bps\n",
|
||||||
s->bit_rate,
|
m->bit_rate,
|
||||||
(int64_t)(expected_bits / ((double)all_available_bits / s->bit_rate)));
|
(int64_t)(expected_bits / ((double)all_available_bits / m->bit_rate)));
|
||||||
av_log(s->avctx, AV_LOG_DEBUG,
|
av_log(s->avctx, AV_LOG_DEBUG,
|
||||||
"[lavc rc] estimated target average qp: %.3f\n",
|
"[lavc rc] estimated target average qp: %.3f\n",
|
||||||
(float)qscale_sum / rcc->num_entries);
|
(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);
|
get_qscale(m, &rce, rcc->pass1_wanted_bits / rcc->pass1_rc_eq_output_sum, i);
|
||||||
|
|
||||||
// FIXME misbehaves a little for variable fps
|
// 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;
|
dts_pic = s->last_pic.ptr;
|
||||||
|
|
||||||
if (!dts_pic || dts_pic->f->pts == AV_NOPTS_VALUE)
|
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
|
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) {
|
if (wanted_bits_double > INT64_MAX) {
|
||||||
av_log(s->avctx, AV_LOG_WARNING, "Bits exceed 64bit range\n");
|
av_log(s->avctx, AV_LOG_WARNING, "Bits exceed 64bit range\n");
|
||||||
wanted_bits = INT64_MAX;
|
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);
|
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);
|
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,
|
wanted_bits / 1000, m->total_bits / 1000,
|
||||||
br_compensation, short_term_q, m->frame_bits,
|
br_compensation, short_term_q, m->frame_bits,
|
||||||
m->mb_var_sum, m->mc_mb_var_sum,
|
m->mb_var_sum, m->mc_mb_var_sum,
|
||||||
s->bit_rate / 1000, (int)fps);
|
m->bit_rate / 1000, (int)fps);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (q < qmin)
|
if (q < qmin)
|
||||||
|
@ -227,7 +227,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
|||||||
s->version=0;
|
s->version=0;
|
||||||
|
|
||||||
mpv->avctx = avctx;
|
mpv->avctx = avctx;
|
||||||
mpv->bit_rate= avctx->bit_rate;
|
enc->m.bit_rate = avctx->bit_rate;
|
||||||
enc->m.lmin = avctx->mb_lmin;
|
enc->m.lmin = avctx->mb_lmin;
|
||||||
enc->m.lmax = avctx->mb_lmax;
|
enc->m.lmax = avctx->mb_lmax;
|
||||||
mpv->mb_num = (avctx->width * avctx->height + 255) / 256; // For ratecontrol
|
mpv->mb_num = (avctx->width * avctx->height + 255) / 256; // For ratecontrol
|
||||||
|
@ -55,7 +55,7 @@ static int encode_ext_header(WMV2EncContext *w)
|
|||||||
init_put_bits(&pb, s->avctx->extradata, WMV2_EXTRADATA_SIZE);
|
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, 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, w->mspel_bit = 1);
|
||||||
put_bits(&pb, 1, s->loop_filter);
|
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->dc_table_index);
|
||||||
put_bits(&s->pb, 1, s->mv_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_level_length = 0;
|
||||||
s->esc3_run_length = 0;
|
s->esc3_run_length = 0;
|
||||||
|
Reference in New Issue
Block a user