mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +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,
|
Mp4Descr *mp4_descr, int mp4_descr_count, int pid,
|
||||||
MpegTSContext *ts);
|
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 */
|
#endif /* AVFORMAT_MPEGTS_H */
|
||||||
|
@ -1162,6 +1162,19 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
|
|||||||
ts_st->prev_payload_key = key;
|
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)
|
static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
|
||||||
{
|
{
|
||||||
AVStream *st = s->streams[pkt->stream_index];
|
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) {
|
if (st->codec->codec_id == AV_CODEC_ID_H264) {
|
||||||
const uint8_t *p = buf, *buf_end = p+size;
|
const uint8_t *p = buf, *buf_end = p+size;
|
||||||
uint32_t state = -1;
|
uint32_t state = -1;
|
||||||
|
int ret = ff_check_h264_startcode(s, st, pkt);
|
||||||
if (pkt->size < 5 || AV_RB32(pkt->data) != 0x0000001) {
|
if (ret < 0)
|
||||||
if (!st->nb_frames) {
|
return ret;
|
||||||
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");
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
p = avpriv_find_start_code(p, buf_end, &state);
|
p = avpriv_find_start_code(p, buf_end, &state);
|
||||||
|
Loading…
Reference in New Issue
Block a user