CVS: ffmpeg/libavcodec mpegvideo.c,1.266,1.267 h263.c,1.180,1.181 h263dec.c,1.121,1.122
Michael Niedermayer <michaelni <at> users.sourceforge.net>
2003-08-01 11:00:06 GMT
Update of /cvsroot/ffmpeg/ffmpeg/libavcodec
In directory sc8-pr-cvs1:/tmp/cvs-serv14216
Modified Files:
mpegvideo.c h263.c h263dec.c
Log Message:
make the h263 decoder more error tolerant
Index: mpegvideo.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/mpegvideo.c,v
retrieving revision 1.266
retrieving revision 1.267
diff -u -d -r1.266 -r1.267
--- mpegvideo.c 29 Jul 2003 02:09:12 -0000 1.266
+++ mpegvideo.c 1 Aug 2003 11:00:02 -0000 1.267
<at> <at> -1004,6 +1004,14 <at> <at>
if(s->next_picture_ptr) s->next_picture= *s->next_picture_ptr;
if(s->new_picture_ptr ) s->new_picture = *s->new_picture_ptr;
+ if(s->pict_type != I_TYPE && s->last_picture_ptr==NULL){
+ fprintf(stderr, "warning: first frame is no keyframe\n");
+ assert(s->pict_type != B_TYPE); //these should have been dropped if we dont have a reference
+ goto alloc;
+ }
+
+ assert(s->pict_type == I_TYPE || (s->last_picture_ptr && s->last_picture_ptr->data[0]));
+
if(s->picture_structure!=PICT_FRAME){
int i;
for(i=0; i<4; i++){
<at> <at> -1014,12 +1022,6 <at> <at>
s->last_picture.linesize[i] *=2;
s->next_picture.linesize[i] *=2;
}
- }
-
- if(s->pict_type != I_TYPE && s->last_picture_ptr==NULL){
- fprintf(stderr, "warning: first frame is no keyframe\n");
- assert(s->pict_type != B_TYPE); //these should have been dropped if we dont have a reference
- goto alloc;
}
}
Index: h263.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/h263.c,v
retrieving revision 1.180
retrieving revision 1.181
diff -u -d -r1.180 -r1.181
--- h263.c 29 Jul 2003 09:58:47 -0000 1.180
+++ h263.c 1 Aug 2003 11:00:03 -0000 1.181
<at> <at> -2500,6 +2500,8 <at> <at>
return -1;
s->mb_x= 0;
s->mb_y= s->gob_index* s->gob_number;
+ if(s->mb_y >= s->mb_height)
+ return -1;
#ifdef DEBUG
fprintf(stderr, "\nGN: %u GFID: %u Quant: %u\n", s->gob_number, gfid, s->qscale);
#endif
<at> <at> -4069,7 +4071,7 <at> <at>
startcode= get_bits(&s->gb, 22-8);
- for(i= s->gb.size_in_bits - get_bits_count(&s->gb); i>0; i--) {
+ for(i= s->gb.size_in_bits - get_bits_count(&s->gb); i>24; i-=8) {
startcode = ((startcode << 8) | get_bits(&s->gb, 8)) & 0x003FFFFF;
if(startcode == 0x20)
<at> <at> -4116,8 +4118,6 <at> <at>
if (!width)
return -1;
- s->width = width;
- s->height = height;
s->pict_type = I_TYPE + get_bits1(&s->gb);
s->unrestricted_mv = get_bits1(&s->gb);
<at> <at> -4137,6 +4137,9 <at> <at>
}
s->qscale = get_bits(&s->gb, 5);
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
+
+ s->width = width;
+ s->height = height;
} else {
int ufep;
Index: h263dec.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/h263dec.c,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -d -r1.121 -r1.122
--- h263dec.c 29 Jul 2003 02:09:12 -0000 1.121
+++ h263dec.c 1 Aug 2003 11:00:03 -0000 1.122
<at> <at> -470,6 +470,15 <at> <at>
} else {
ret = h263_decode_picture_header(s);
}
+
+ if(ret==FRAME_SKIPED) return get_consumed_bytes(s, buf_size);
+
+ /* skip if the header was thrashed */
+ if (ret < 0){
+ fprintf(stderr, "header damaged\n");
+ return -1;
+ }
+
avctx->has_b_frames= !s->low_delay;
if(s->workaround_bugs&FF_BUG_AUTODETECT){
<at> <at> -604,13 +613,6 <at> <at>
if((s->codec_id==CODEC_ID_H263 || s->codec_id==CODEC_ID_H263P))
s->gob_index = ff_h263_get_gob_height(s);
-
- if(ret==FRAME_SKIPED) return get_consumed_bytes(s, buf_size);
- /* skip if the header was thrashed */
- if (ret < 0){
- fprintf(stderr, "header damaged\n");
- return -1;
- }
// for hurry_up==5
s->current_picture.pict_type= s->pict_type;
-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01