You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-07-06 06:27:36 +02:00
avcodec/mpeg4videodec: Remove use of FF_PROFILE_MPEG4_SIMPLE_STUDIO as indicator of studio profile
The profile field is changed by code inside and outside the decoder, its not a reliable indicator of the internal codec state. Maintaining it consistency with studio_profile is messy. Its easier to just avoid it and use only studio_profile Fixes: assertion failure Fixes: ffmpeg_crash_9.avi Found-by: Thuan Pham, Marcel Böhme, Andrew Santosa and Alexandru Razvan Caciulescu with AFLSmart Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
@ -814,8 +814,7 @@ static int er_supported(ERContext *s)
|
|||||||
{
|
{
|
||||||
if(s->avctx->hwaccel && s->avctx->hwaccel->decode_slice ||
|
if(s->avctx->hwaccel && s->avctx->hwaccel->decode_slice ||
|
||||||
!s->cur_pic.f ||
|
!s->cur_pic.f ||
|
||||||
s->cur_pic.field_picture ||
|
s->cur_pic.field_picture
|
||||||
s->avctx->profile == FF_PROFILE_MPEG4_SIMPLE_STUDIO
|
|
||||||
)
|
)
|
||||||
return 0;
|
return 0;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -47,9 +47,10 @@
|
|||||||
|
|
||||||
static enum AVPixelFormat h263_get_format(AVCodecContext *avctx)
|
static enum AVPixelFormat h263_get_format(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
|
MpegEncContext *s = avctx->priv_data;
|
||||||
/* MPEG-4 Studio Profile only, not supported by hardware */
|
/* MPEG-4 Studio Profile only, not supported by hardware */
|
||||||
if (avctx->bits_per_raw_sample > 8) {
|
if (avctx->bits_per_raw_sample > 8) {
|
||||||
av_assert1(avctx->profile == FF_PROFILE_MPEG4_SIMPLE_STUDIO);
|
av_assert1(s->studio_profile);
|
||||||
return avctx->pix_fmt;
|
return avctx->pix_fmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -670,6 +671,7 @@ retry:
|
|||||||
|
|
||||||
av_assert1(s->bitstream_buffer_size == 0);
|
av_assert1(s->bitstream_buffer_size == 0);
|
||||||
frame_end:
|
frame_end:
|
||||||
|
if (!s->studio_profile)
|
||||||
ff_er_frame_end(&s->er);
|
ff_er_frame_end(&s->er);
|
||||||
|
|
||||||
if (avctx->hwaccel) {
|
if (avctx->hwaccel) {
|
||||||
|
@ -3244,7 +3244,6 @@ end:
|
|||||||
s->avctx->has_b_frames = !s->low_delay;
|
s->avctx->has_b_frames = !s->low_delay;
|
||||||
|
|
||||||
if (s->studio_profile) {
|
if (s->studio_profile) {
|
||||||
av_assert0(s->avctx->profile == FF_PROFILE_MPEG4_SIMPLE_STUDIO);
|
|
||||||
if (!s->avctx->bits_per_raw_sample) {
|
if (!s->avctx->bits_per_raw_sample) {
|
||||||
av_log(s->avctx, AV_LOG_ERROR, "Missing VOL header\n");
|
av_log(s->avctx, AV_LOG_ERROR, "Missing VOL header\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
Reference in New Issue
Block a user