also parse extradata for MPEG4
Originally committed as revision 2493 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		@@ -114,8 +114,10 @@ typedef struct ParseContext1{
 | 
				
			|||||||
    int frame_rate;
 | 
					    int frame_rate;
 | 
				
			||||||
    int progressive_sequence;
 | 
					    int progressive_sequence;
 | 
				
			||||||
    int width, height;
 | 
					    int width, height;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* XXX: suppress that, needed by MPEG4 */
 | 
					    /* XXX: suppress that, needed by MPEG4 */
 | 
				
			||||||
    MpegEncContext *enc;
 | 
					    MpegEncContext *enc;
 | 
				
			||||||
 | 
					    int first_picture;
 | 
				
			||||||
} ParseContext1;
 | 
					} ParseContext1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -439,21 +441,31 @@ static int av_mpeg4_decode_header(AVCodecParserContext *s1,
 | 
				
			|||||||
    int ret;
 | 
					    int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->avctx = avctx;
 | 
					    s->avctx = avctx;
 | 
				
			||||||
 | 
					    s->current_picture_ptr = &s->current_picture;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (avctx->extradata_size && pc->first_picture){
 | 
				
			||||||
 | 
					        init_get_bits(gb, avctx->extradata, avctx->extradata_size*8);
 | 
				
			||||||
 | 
					        ret = ff_mpeg4_decode_picture_header(s, gb);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_get_bits(gb, buf, 8 * buf_size);
 | 
					    init_get_bits(gb, buf, 8 * buf_size);
 | 
				
			||||||
    ret = ff_mpeg4_decode_picture_header(s, gb);
 | 
					    ret = ff_mpeg4_decode_picture_header(s, gb);
 | 
				
			||||||
    if (s->width) {
 | 
					    if (s->width) {
 | 
				
			||||||
        avctx->width = s->width;
 | 
					        avctx->width = s->width;
 | 
				
			||||||
        avctx->height = s->height;
 | 
					        avctx->height = s->height;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    pc->first_picture = 0;
 | 
				
			||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int mpeg4video_parse_init(AVCodecParserContext *s)
 | 
					int mpeg4video_parse_init(AVCodecParserContext *s)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ParseContext1 *pc = s->priv_data;
 | 
					    ParseContext1 *pc = s->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pc->enc = av_mallocz(sizeof(MpegEncContext));
 | 
					    pc->enc = av_mallocz(sizeof(MpegEncContext));
 | 
				
			||||||
    if (!pc->enc)
 | 
					    if (!pc->enc)
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
 | 
					    pc->first_picture = 1;
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user