avformat/segafilmenc: Check early whether video is allowed

The current code only checks when writing the trailer whether the video
format and Codec ID are actually compatible with the container. At this
point, a lot of data will already have been written (in vain, of
course), so check during the init function instead.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
pull/331/head
Andreas Rheinhardt 5 years ago committed by Michael Niedermayer
parent 30859c270f
commit 56a04b7c38
  1. 19
      libavformat/segafilmenc.c

@ -181,6 +181,17 @@ static int film_init(AVFormatContext *format_context)
av_log(format_context, AV_LOG_ERROR, "Sega FILM allows a maximum of one video stream.\n"); av_log(format_context, AV_LOG_ERROR, "Sega FILM allows a maximum of one video stream.\n");
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
if (st->codecpar->codec_id != AV_CODEC_ID_CINEPAK &&
st->codecpar->codec_id != AV_CODEC_ID_RAWVIDEO) {
av_log(format_context, AV_LOG_ERROR,
"Incompatible video stream format.\n");
return AVERROR(EINVAL);
}
if (st->codecpar->format != AV_PIX_FMT_RGB24) {
av_log(format_context, AV_LOG_ERROR,
"Pixel format must be rgb24.\n");
return AVERROR(EINVAL);
}
film->video_index = i; film->video_index = i;
} }
} }
@ -293,11 +304,6 @@ static int film_write_header(AVFormatContext *format_context)
} }
} }
if (video->codecpar->format != AV_PIX_FMT_RGB24) {
av_log(format_context, AV_LOG_ERROR, "Pixel format must be rgb24.\n");
return AVERROR(EINVAL);
}
/* First, write the FILM header; this is very simple */ /* First, write the FILM header; this is very simple */
ffio_wfourcc(pb, "FILM"); ffio_wfourcc(pb, "FILM");
@ -320,9 +326,6 @@ static int film_write_header(AVFormatContext *format_context)
case AV_CODEC_ID_RAWVIDEO: case AV_CODEC_ID_RAWVIDEO:
ffio_wfourcc(pb, "raw "); ffio_wfourcc(pb, "raw ");
break; break;
default:
av_log(format_context, AV_LOG_ERROR, "Incompatible video stream format.\n");
return AVERROR(EINVAL);
} }
avio_wb32(pb, video->codecpar->height); avio_wb32(pb, video->codecpar->height);

Loading…
Cancel
Save