提交 9d252137 编写于 作者: B Baptiste Coudurier

In h264 decoder, fix decoding when nal end sequence is present

Originally committed as revision 25809 to svn://svn.ffmpeg.org/ffmpeg/trunk
上级 8ee764b0
......@@ -2783,15 +2783,10 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){
nalsize = 0;
for(i = 0; i < h->nal_length_size; i++)
nalsize = (nalsize << 8) | buf[buf_index++];
if(nalsize <= 1 || nalsize > buf_size - buf_index){
if(nalsize == 1){
buf_index++;
continue;
}else{
if(nalsize <= 0 || nalsize > buf_size - buf_index){
av_log(h->s.avctx, AV_LOG_ERROR, "AVC: nal size %d\n", nalsize);
break;
}
}
next_avc= buf_index + nalsize;
} else {
// start code prefix search
......@@ -2990,6 +2985,7 @@ static int decode_frame(AVCodecContext *avctx,
s->flags2= avctx->flags2;
/* end of stream, output what is still in the buffers */
out:
if (buf_size == 0) {
Picture *out;
int i, out_idx;
......@@ -3018,6 +3014,11 @@ static int decode_frame(AVCodecContext *avctx,
if(buf_index < 0)
return -1;
if (!s->current_picture_ptr && h->nal_unit_type == NAL_END_SEQUENCE) {
buf_size = 0;
goto out;
}
if(!(s->flags2 & CODEC_FLAG2_CHUNKS) && !s->current_picture_ptr){
if (avctx->skip_frame >= AVDISCARD_NONREF || s->hurry_up) return 0;
av_log(avctx, AV_LOG_ERROR, "no frame!\n");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册