[Ffmpeg-cvslog] CVS: ffmpeg/libavcodec rv10.c,1.73,1.74
Michael Niedermayer CVS
michael
Thu Sep 1 02:15:15 CEST 2005
Update of /cvsroot/ffmpeg/ffmpeg/libavcodec
In directory mail:/var2/tmp/cvs-serv31021
Modified Files:
rv10.c
Log Message:
error concealment fix
Index: rv10.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/rv10.c,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -d -r1.73 -r1.74
--- rv10.c 25 Apr 2005 18:29:05 -0000 1.73
+++ rv10.c 1 Sep 2005 00:15:12 -0000 1.74
@@ -620,8 +620,14 @@
//if(s->pict_type == P_TYPE) return 0;
if ((s->mb_x == 0 && s->mb_y == 0) || s->current_picture_ptr==NULL) {
+ if(s->current_picture_ptr){ //FIXME write parser so we always have complete frames?
+ ff_er_frame_end(s);
+ MPV_frame_end(s);
+ s->mb_x= s->mb_y = s->resync_mb_x = s->resync_mb_y= 0;
+ }
if(MPV_frame_start(s, avctx) < 0)
return -1;
+ ff_er_frame_start(s);
}
#ifdef DEBUG
@@ -673,7 +679,7 @@
s->mv_type = MV_TYPE_16X16;
ret=ff_h263_decode_mb(s, s->block);
- if (ret == SLICE_ERROR) {
+ if (ret == SLICE_ERROR || s->gb.size_in_bits < get_bits_count(&s->gb)) {
av_log(s->avctx, AV_LOG_ERROR, "ERROR at MB %d %d\n", s->mb_x, s->mb_y);
return -1;
}
@@ -693,6 +699,8 @@
if(ret == SLICE_END) break;
}
+ ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, AC_END|DC_END|MV_END);
+
return buf_size;
}
@@ -723,15 +731,14 @@
else
size= avctx->slice_offset[i+1] - offset;
- if( rv10_decode_packet(avctx, buf+offset, size) < 0 )
- return -1;
+ rv10_decode_packet(avctx, buf+offset, size);
}
}else{
- if( rv10_decode_packet(avctx, buf, buf_size) < 0 )
- return -1;
+ rv10_decode_packet(avctx, buf, buf_size);
}
if(s->mb_y>=s->mb_height){
+ ff_er_frame_end(s);
MPV_frame_end(s);
if(s->pict_type==B_TYPE || s->low_delay){
@@ -743,6 +750,7 @@
}
if(s->last_picture_ptr || s->low_delay)
*data_size = sizeof(AVFrame);
+ s->current_picture_ptr= NULL; //so we can detect if frame_end wasnt called (find some nicer solution...)
}
return buf_size;
More information about the ffmpeg-cvslog
mailing list