mirror of https://git.ffmpeg.org/ffmpeg.git
in TRUNCATED mode, use residual fragments in ParseContext
for decoding the very last frame. Originally committed as revision 13538 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
369074680e
commit
ae899d12ae
|
@ -7656,6 +7656,15 @@ static int decode_frame(AVCodecContext *avctx,
|
||||||
s->flags= avctx->flags;
|
s->flags= avctx->flags;
|
||||||
s->flags2= avctx->flags2;
|
s->flags2= avctx->flags2;
|
||||||
|
|
||||||
|
if(s->flags&CODEC_FLAG_TRUNCATED){
|
||||||
|
const int next= ff_h264_find_frame_end(h, buf, buf_size);
|
||||||
|
assert((buf_size > 0) || (next == END_NOT_FOUND));
|
||||||
|
|
||||||
|
if( ff_combine_frame(&s->parse_context, next, &buf, &buf_size) < 0 )
|
||||||
|
return buf_size;
|
||||||
|
//printf("next:%d buf_size:%d last_index:%d\n", next, buf_size, s->parse_context.last_index);
|
||||||
|
}
|
||||||
|
|
||||||
/* no supplementary picture */
|
/* no supplementary picture */
|
||||||
if (buf_size == 0) {
|
if (buf_size == 0) {
|
||||||
Picture *out;
|
Picture *out;
|
||||||
|
@ -7681,14 +7690,6 @@ static int decode_frame(AVCodecContext *avctx,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(s->flags&CODEC_FLAG_TRUNCATED){
|
|
||||||
int next= ff_h264_find_frame_end(h, buf, buf_size);
|
|
||||||
|
|
||||||
if( ff_combine_frame(&s->parse_context, next, (const uint8_t **)&buf, &buf_size) < 0 )
|
|
||||||
return buf_size;
|
|
||||||
//printf("next:%d buf_size:%d last_index:%d\n", next, buf_size, s->parse_context.last_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(h->is_avc && !h->got_avcC) {
|
if(h->is_avc && !h->got_avcC) {
|
||||||
int i, cnt, nalsize;
|
int i, cnt, nalsize;
|
||||||
unsigned char *p = avctx->extradata;
|
unsigned char *p = avctx->extradata;
|
||||||
|
|
Loading…
Reference in New Issue