# HG changeset patch # User michael # Date 1088216438 0 # Node ID 5ab35105671a8b49bef6040c07ef01777370c894 # Parent 9c29987380e44cdf4ef7c3794ae288829d03add7 support skiping of mb rows during decoding diff -r 9c29987380e4 -r 5ab35105671a avcodec.h --- a/avcodec.h Fri Jun 25 19:14:23 2004 +0000 +++ b/avcodec.h Sat Jun 26 02:20:38 2004 +0000 @@ -17,7 +17,7 @@ #define FFMPEG_VERSION_INT 0x000408 #define FFMPEG_VERSION "0.4.8" -#define LIBAVCODEC_BUILD 4716 +#define LIBAVCODEC_BUILD 4717 #define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT #define LIBAVCODEC_VERSION FFMPEG_VERSION @@ -1605,6 +1605,20 @@ * - decoding: unused */ int nsse_weight; + + /** + * number of macroblock rows at the top which are skiped. + * - encoding: unused + * - decoding: set by user + */ + int skip_top; + + /** + * number of macroblock rows at the bottom which are skiped. + * - encoding: unused + * - decoding: set by user + */ + int skip_bottom; } AVCodecContext; diff -r 9c29987380e4 -r 5ab35105671a error_resilience.c --- a/error_resilience.c Fri Jun 25 19:14:23 2004 +0000 +++ b/error_resilience.c Sat Jun 26 02:20:38 2004 +0000 @@ -652,7 +652,7 @@ s->error_status_table[start_xy] |= VP_START; - if(start_xy > 0 && s->avctx->thread_count <= 1){ + if(start_xy > 0 && s->avctx->thread_count <= 1 && s->avctx->skip_top*s->mb_width < start_i){ int prev_status= s->error_status_table[ s->mb_index2xy[start_i - 1] ]; prev_status &= ~ VP_START; @@ -667,9 +667,10 @@ int threshold= 50; int is_intra_likely; - if(!s->error_resilience || s->error_count==0) return; + if(!s->error_resilience || s->error_count==0 || + s->error_count==3*s->mb_width*(s->avctx->skip_top + s->avctx->skip_bottom)) return; - av_log(s->avctx, AV_LOG_INFO, "concealing errors\n"); + av_log(s->avctx, AV_LOG_INFO, "concealing %d errors\n", s->error_count); if(s->current_picture.motion_val[0] == NULL){ int size = s->b8_stride * 2 * s->mb_height; diff -r 9c29987380e4 -r 5ab35105671a mpeg12.c --- a/mpeg12.c Fri Jun 25 19:14:23 2004 +0000 +++ b/mpeg12.c Sat Jun 26 02:20:38 2004 +0000 @@ -2869,6 +2869,11 @@ if(avctx->hurry_up>=5) break; if (!s->mpeg_enc_ctx_allocated) break; + + if(s2->codec_id == CODEC_ID_MPEG2VIDEO){ + if(mb_y < avctx->skip_top || mb_y >= s2->mb_height - avctx->skip_bottom) + break; + } if(s2->first_slice){ s2->first_slice=0;