mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avformat/mpegtsenc: move startcode validity check to ff_check_h264_startcode
Signed-off-by: Peter Ross <pross@xvid.org> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
7aa3979b8c
commit
e61973db6c
@ -105,4 +105,10 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
|
||||
Mp4Descr *mp4_descr, int mp4_descr_count, int pid,
|
||||
MpegTSContext *ts);
|
||||
|
||||
/**
|
||||
* Check presence of H264 startcode
|
||||
* @return <0 to stop processing
|
||||
*/
|
||||
int ff_check_h264_startcode(AVFormatContext *s, const AVStream *st, const AVPacket *pkt);
|
||||
|
||||
#endif /* AVFORMAT_MPEGTS_H */
|
||||
|
@ -1162,6 +1162,19 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
|
||||
ts_st->prev_payload_key = key;
|
||||
}
|
||||
|
||||
int ff_check_h264_startcode(AVFormatContext *s, const AVStream *st, const AVPacket *pkt)
|
||||
{
|
||||
if (pkt->size < 5 || AV_RB32(pkt->data) != 0x0000001) {
|
||||
if (!st->nb_frames) {
|
||||
av_log(s, AV_LOG_ERROR, "H.264 bitstream malformed, "
|
||||
"no startcode found, use the h264_mp4toannexb bitstream filter (-bsf h264_mp4toannexb)\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
av_log(s, AV_LOG_WARNING, "H.264 bitstream error, startcode missing\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
|
||||
{
|
||||
AVStream *st = s->streams[pkt->stream_index];
|
||||
@ -1201,15 +1214,9 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
|
||||
if (st->codec->codec_id == AV_CODEC_ID_H264) {
|
||||
const uint8_t *p = buf, *buf_end = p+size;
|
||||
uint32_t state = -1;
|
||||
|
||||
if (pkt->size < 5 || AV_RB32(pkt->data) != 0x0000001) {
|
||||
if (!st->nb_frames) {
|
||||
av_log(s, AV_LOG_ERROR, "H.264 bitstream malformed, "
|
||||
"no startcode found, use the h264_mp4toannexb bitstream filter (-bsf h264_mp4toannexb)\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
av_log(s, AV_LOG_WARNING, "H.264 bitstream error, startcode missing\n");
|
||||
}
|
||||
int ret = ff_check_h264_startcode(s, st, pkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
do {
|
||||
p = avpriv_find_start_code(p, buf_end, &state);
|
||||
|
Loading…
Reference in New Issue
Block a user