| @@ -1184,6 +1184,18 @@ int ff_check_h264_startcode(AVFormatContext *s, const AVStream *st, const AVPack | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| static int check_hevc_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, "HEVC bitstream malformed, no startcode found\n"); | |||||
| return AVERROR_PATCHWELCOME; | |||||
| } | |||||
| av_log(s, AV_LOG_WARNING, "HEVC bitstream error, startcode missing\n"); | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) | static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) | ||||
| { | { | ||||
| AVStream *st = s->streams[pkt->stream_index]; | AVStream *st = s->streams[pkt->stream_index]; | ||||
| @@ -1281,6 +1293,10 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) | |||||
| ts_st->amux->pb = NULL; | ts_st->amux->pb = NULL; | ||||
| buf = data; | buf = data; | ||||
| } | } | ||||
| } else if (st->codec->codec_id == AV_CODEC_ID_HEVC) { | |||||
| int ret = check_hevc_startcode(s, st, pkt); | |||||
| if (ret < 0) | |||||
| return ret; | |||||
| } | } | ||||
| if (pkt->dts != AV_NOPTS_VALUE) { | if (pkt->dts != AV_NOPTS_VALUE) { | ||||