avcodec/mpegvideo_dec, rv34: Simplify check for "does pic exist?"

The days in which an MPVPicture* is set with the corresponding frame
being blank are over; this allows to simplify some checks.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2024-04-28 18:59:29 +02:00
parent 7e61e77c4e
commit a13ca893cf
2 changed files with 6 additions and 7 deletions

View File

@ -312,9 +312,10 @@ int ff_mpv_alloc_dummy_frames(MpegEncContext *s)
AVCodecContext *avctx = s->avctx;
int ret;
if ((!s->last_pic.ptr || !s->last_pic.ptr->f->buf[0]) &&
(s->pict_type != AV_PICTURE_TYPE_I)) {
if (s->pict_type == AV_PICTURE_TYPE_B && s->next_pic.ptr && s->next_pic.ptr->f->buf[0])
av_assert1(!s->last_pic.ptr || s->last_pic.ptr->f->buf[0]);
av_assert1(!s->next_pic.ptr || s->next_pic.ptr->f->buf[0]);
if (!s->last_pic.ptr && s->pict_type != AV_PICTURE_TYPE_I) {
if (s->pict_type == AV_PICTURE_TYPE_B && s->next_pic.ptr)
av_log(avctx, AV_LOG_DEBUG,
"allocating dummy last picture for B frame\n");
else if (s->codec_id != AV_CODEC_ID_H261 /* H.261 has no keyframes */ &&
@ -332,8 +333,7 @@ int ff_mpv_alloc_dummy_frames(MpegEncContext *s)
color_frame(s->last_pic.ptr->f, luma_val);
}
}
if ((!s->next_pic.ptr || !s->next_pic.ptr->f->buf[0]) &&
s->pict_type == AV_PICTURE_TYPE_B) {
if (!s->next_pic.ptr && s->pict_type == AV_PICTURE_TYPE_B) {
/* Allocate a dummy frame */
ret = alloc_dummy_frame(s, &s->next_pic);
if (ret < 0)

View File

@ -1657,8 +1657,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx, AVFrame *pict,
av_log(avctx, AV_LOG_ERROR, "First slice header is incorrect\n");
return AVERROR_INVALIDDATA;
}
if ((!s->last_pic.ptr || !s->last_pic.ptr->f->data[0]) &&
si.type == AV_PICTURE_TYPE_B) {
if (!s->last_pic.ptr && si.type == AV_PICTURE_TYPE_B) {
av_log(avctx, AV_LOG_ERROR, "Invalid decoder state: B-frame without "
"reference data.\n");
faulty_b = 1;