You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avcodec/mpeg4video: Pass parameters directly
Namely in ff_mpeg4_get_video_packet_prefix_length(). This will allow to move [fb]_code from MpegEncContext. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
@ -39,16 +39,17 @@ av_cold void ff_mpeg4_init_rl_intra(void)
|
|||||||
ff_thread_once(&init_static_once, mpeg4_init_rl_intra);
|
ff_thread_once(&init_static_once, mpeg4_init_rl_intra);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s)
|
int ff_mpeg4_get_video_packet_prefix_length(enum AVPictureType pict_type,
|
||||||
|
int f_code, int b_code)
|
||||||
{
|
{
|
||||||
switch (s->pict_type) {
|
switch (pict_type) {
|
||||||
case AV_PICTURE_TYPE_I:
|
case AV_PICTURE_TYPE_I:
|
||||||
return 16;
|
return 16;
|
||||||
case AV_PICTURE_TYPE_P:
|
case AV_PICTURE_TYPE_P:
|
||||||
case AV_PICTURE_TYPE_S:
|
case AV_PICTURE_TYPE_S:
|
||||||
return s->f_code + 15;
|
return f_code + 15;
|
||||||
case AV_PICTURE_TYPE_B:
|
case AV_PICTURE_TYPE_B:
|
||||||
return FFMAX3(s->f_code, s->b_code, 2) + 15;
|
return FFMAX3(f_code, b_code, 2) + 15;
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,8 @@
|
|||||||
#include "mpegvideo.h"
|
#include "mpegvideo.h"
|
||||||
|
|
||||||
void ff_mpeg4_clean_buffers(MpegEncContext *s);
|
void ff_mpeg4_clean_buffers(MpegEncContext *s);
|
||||||
int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s);
|
int ff_mpeg4_get_video_packet_prefix_length(enum AVPictureType pict_type,
|
||||||
|
int f_code, int b_code);
|
||||||
void ff_mpeg4_init_direct_mv(MpegEncContext *s);
|
void ff_mpeg4_init_direct_mv(MpegEncContext *s);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -421,7 +421,7 @@ static inline int mpeg4_is_resync(Mpeg4DecContext *ctx)
|
|||||||
|
|
||||||
s->gb = gb;
|
s->gb = gb;
|
||||||
|
|
||||||
if (len >= ff_mpeg4_get_video_packet_prefix_length(s))
|
if (len >= ff_mpeg4_get_video_packet_prefix_length(s->pict_type, s->f_code, s->b_code))
|
||||||
return mb_num;
|
return mb_num;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -714,7 +714,7 @@ int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx)
|
|||||||
if (get_bits1(&s->gb))
|
if (get_bits1(&s->gb))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (len != ff_mpeg4_get_video_packet_prefix_length(s)) {
|
if (len != ff_mpeg4_get_video_packet_prefix_length(s->pict_type, s->f_code, s->b_code)) {
|
||||||
av_log(s->avctx, AV_LOG_ERROR, "marker does not match f_code\n");
|
av_log(s->avctx, AV_LOG_ERROR, "marker does not match f_code\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
@ -1393,7 +1393,7 @@ void ff_mpeg4_encode_video_packet_header(MPVEncContext *const s)
|
|||||||
{
|
{
|
||||||
int mb_num_bits = av_log2(s->c.mb_num - 1) + 1;
|
int mb_num_bits = av_log2(s->c.mb_num - 1) + 1;
|
||||||
|
|
||||||
put_bits(&s->pb, ff_mpeg4_get_video_packet_prefix_length(&s->c), 0);
|
put_bits(&s->pb, ff_mpeg4_get_video_packet_prefix_length(s->c.pict_type, s->c.f_code, s->c.b_code), 0);
|
||||||
put_bits(&s->pb, 1, 1);
|
put_bits(&s->pb, 1, 1);
|
||||||
|
|
||||||
put_bits(&s->pb, mb_num_bits, s->c.mb_x + s->c.mb_y * s->c.mb_width);
|
put_bits(&s->pb, mb_num_bits, s->c.mb_x + s->c.mb_y * s->c.mb_width);
|
||||||
|
Reference in New Issue
Block a user