You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avcodec/mpegvideo: Move bit_rate field to MSMP4DecContext
Also make it an int as that is all MSMP4 needs. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
@ -95,7 +95,6 @@ typedef struct MpegEncContext {
|
|||||||
void *private_ctx;
|
void *private_ctx;
|
||||||
/* the following parameters must be initialized before encoding */
|
/* the following parameters must be initialized before encoding */
|
||||||
int width, height;///< picture size. must be a multiple of 16
|
int width, height;///< picture size. must be a multiple of 16
|
||||||
int64_t bit_rate; ///< wanted bit rate
|
|
||||||
enum OutputFormat out_format; ///< output format
|
enum OutputFormat out_format; ///< output format
|
||||||
int h263_pred; ///< use MPEG-4/H.263 ac/dc predictions
|
int h263_pred; ///< use MPEG-4/H.263 ac/dc predictions
|
||||||
int pb_frame; ///< PB-frame mode (0 = none, 1 = base, 2 = improved)
|
int pb_frame; ///< PB-frame mode (0 = none, 1 = base, 2 = improved)
|
||||||
|
@ -389,6 +389,7 @@ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx)
|
|||||||
|
|
||||||
int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
|
int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
|
||||||
{
|
{
|
||||||
|
MSMP4DecContext *const ms = mpv_to_msmpeg4(s);
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
// at minimum one bit per macroblock is required at least in a valid frame,
|
// at minimum one bit per macroblock is required at least in a valid frame,
|
||||||
@ -457,8 +458,10 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
|
|||||||
case MSMP4_WMV1:
|
case MSMP4_WMV1:
|
||||||
ff_msmpeg4_decode_ext_header(s, (2+5+5+17+7)/8);
|
ff_msmpeg4_decode_ext_header(s, (2+5+5+17+7)/8);
|
||||||
|
|
||||||
if(s->bit_rate > MBAC_BITRATE) s->per_mb_rl_table= get_bits1(&s->gb);
|
if (ms->bit_rate > MBAC_BITRATE)
|
||||||
else s->per_mb_rl_table= 0;
|
s->per_mb_rl_table = get_bits1(&s->gb);
|
||||||
|
else
|
||||||
|
s->per_mb_rl_table = 0;
|
||||||
|
|
||||||
if(!s->per_mb_rl_table){
|
if(!s->per_mb_rl_table){
|
||||||
s->rl_chroma_table_index = decode012(&s->gb);
|
s->rl_chroma_table_index = decode012(&s->gb);
|
||||||
@ -503,8 +506,10 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
|
|||||||
case MSMP4_WMV1:
|
case MSMP4_WMV1:
|
||||||
s->use_skip_mb_code = get_bits1(&s->gb);
|
s->use_skip_mb_code = get_bits1(&s->gb);
|
||||||
|
|
||||||
if(s->bit_rate > MBAC_BITRATE) s->per_mb_rl_table= get_bits1(&s->gb);
|
if (ms->bit_rate > MBAC_BITRATE)
|
||||||
else s->per_mb_rl_table= 0;
|
s->per_mb_rl_table = get_bits1(&s->gb);
|
||||||
|
else
|
||||||
|
s->per_mb_rl_table = 0;
|
||||||
|
|
||||||
if(!s->per_mb_rl_table){
|
if(!s->per_mb_rl_table){
|
||||||
s->rl_table_index = decode012(&s->gb);
|
s->rl_table_index = decode012(&s->gb);
|
||||||
@ -514,7 +519,8 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
|
|||||||
s->dc_table_index = get_bits1(&s->gb);
|
s->dc_table_index = get_bits1(&s->gb);
|
||||||
|
|
||||||
s->mv_table_index = get_bits1(&s->gb);
|
s->mv_table_index = get_bits1(&s->gb);
|
||||||
s->inter_intra_pred= (s->width*s->height < 320*240 && s->bit_rate<=II_BITRATE);
|
s->inter_intra_pred = s->width*s->height < 320*240 &&
|
||||||
|
ms->bit_rate <= II_BITRATE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -534,7 +540,7 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
|
|||||||
s->no_rounding = 0;
|
s->no_rounding = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ff_dlog(s->avctx, "%d %"PRId64" %d %d %d\n", s->pict_type, s->bit_rate,
|
ff_dlog(s->avctx, "%d %d %d %d %d\n", s->pict_type, ms->bit_rate,
|
||||||
s->inter_intra_pred, s->width, s->height);
|
s->inter_intra_pred, s->width, s->height);
|
||||||
|
|
||||||
s->esc3_level_length= 0;
|
s->esc3_level_length= 0;
|
||||||
@ -545,13 +551,14 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
|
|||||||
|
|
||||||
int ff_msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size)
|
int ff_msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size)
|
||||||
{
|
{
|
||||||
|
MSMP4DecContext *const ms = mpv_to_msmpeg4(s);
|
||||||
int left= buf_size*8 - get_bits_count(&s->gb);
|
int left= buf_size*8 - get_bits_count(&s->gb);
|
||||||
int length = s->msmpeg4_version >= MSMP4_V3 ? 17 : 16;
|
int length = s->msmpeg4_version >= MSMP4_V3 ? 17 : 16;
|
||||||
/* the alt_bitstream reader could read over the end so we need to check it */
|
/* the alt_bitstream reader could read over the end so we need to check it */
|
||||||
if(left>=length && left<length+8)
|
if(left>=length && left<length+8)
|
||||||
{
|
{
|
||||||
skip_bits(&s->gb, 5); /* fps */
|
skip_bits(&s->gb, 5); /* fps */
|
||||||
s->bit_rate= get_bits(&s->gb, 11)*1024;
|
ms->bit_rate = get_bits(&s->gb, 11) * 1024;
|
||||||
if (s->msmpeg4_version >= MSMP4_V3)
|
if (s->msmpeg4_version >= MSMP4_V3)
|
||||||
s->flipflop_rounding= get_bits1(&s->gb);
|
s->flipflop_rounding= get_bits1(&s->gb);
|
||||||
else
|
else
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
typedef struct MSMP4DecContext {
|
typedef struct MSMP4DecContext {
|
||||||
MpegEncContext m;
|
MpegEncContext m;
|
||||||
|
int bit_rate;
|
||||||
} MSMP4DecContext;
|
} MSMP4DecContext;
|
||||||
|
|
||||||
static inline MSMP4DecContext *mpv_to_msmpeg4(MpegEncContext *s)
|
static inline MSMP4DecContext *mpv_to_msmpeg4(MpegEncContext *s)
|
||||||
|
@ -177,7 +177,7 @@ static int decode_ext_header(WMV2DecContext *w)
|
|||||||
init_get_bits(&gb, s->avctx->extradata, 32);
|
init_get_bits(&gb, s->avctx->extradata, 32);
|
||||||
|
|
||||||
fps = get_bits(&gb, 5);
|
fps = get_bits(&gb, 5);
|
||||||
s->bit_rate = get_bits(&gb, 11) * 1024;
|
w->ms.bit_rate = get_bits(&gb, 11) * 1024;
|
||||||
w->mspel_bit = get_bits1(&gb);
|
w->mspel_bit = get_bits1(&gb);
|
||||||
s->loop_filter = get_bits1(&gb);
|
s->loop_filter = get_bits1(&gb);
|
||||||
w->abt_flag = get_bits1(&gb);
|
w->abt_flag = get_bits1(&gb);
|
||||||
@ -193,10 +193,10 @@ static int decode_ext_header(WMV2DecContext *w)
|
|||||||
|
|
||||||
if (s->avctx->debug & FF_DEBUG_PICT_INFO)
|
if (s->avctx->debug & FF_DEBUG_PICT_INFO)
|
||||||
av_log(s->avctx, AV_LOG_DEBUG,
|
av_log(s->avctx, AV_LOG_DEBUG,
|
||||||
"fps:%d, br:%"PRId64", qpbit:%d, abt_flag:%d, j_type_bit:%d, "
|
"fps:%d, br:%d, qpbit:%d, abt_flag:%d, j_type_bit:%d, "
|
||||||
"tl_mv_flag:%d, mbrl_bit:%d, code:%d, loop_filter:%d, "
|
"tl_mv_flag:%d, mbrl_bit:%d, code:%d, loop_filter:%d, "
|
||||||
"slices:%d\n",
|
"slices:%d\n",
|
||||||
fps, s->bit_rate, w->mspel_bit, w->abt_flag, w->j_type_bit,
|
fps, w->ms.bit_rate, w->mspel_bit, w->abt_flag, w->j_type_bit,
|
||||||
w->top_left_mv_flag, w->per_mb_rl_bit, code, s->loop_filter,
|
w->top_left_mv_flag, w->per_mb_rl_bit, code, s->loop_filter,
|
||||||
code);
|
code);
|
||||||
return 0;
|
return 0;
|
||||||
@ -313,7 +313,7 @@ int ff_wmv2_decode_secondary_picture_header(MpegEncContext *s)
|
|||||||
s->dc_table_index = get_bits1(&s->gb);
|
s->dc_table_index = get_bits1(&s->gb);
|
||||||
s->mv_table_index = get_bits1(&s->gb);
|
s->mv_table_index = get_bits1(&s->gb);
|
||||||
|
|
||||||
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 && w->ms.bit_rate <= II_BITRATE);
|
||||||
s->no_rounding ^= 1;
|
s->no_rounding ^= 1;
|
||||||
|
|
||||||
if (s->avctx->debug & FF_DEBUG_PICT_INFO) {
|
if (s->avctx->debug & FF_DEBUG_PICT_INFO) {
|
||||||
|
Reference in New Issue
Block a user