Browse Source

error_resilience: use the ER_ namespace

Add the namespace to {AC_,DC_,MV_}{END,ERROR} macros

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
tags/n0.10
Luca Barbato 13 years ago
parent
commit
5bf2ac2b37
12 changed files with 92 additions and 93 deletions
  1. +45
    -45
      libavcodec/error_resilience.c
  2. +8
    -8
      libavcodec/h263dec.c
  3. +9
    -9
      libavcodec/h264.c
  4. +2
    -2
      libavcodec/h264.h
  5. +1
    -1
      libavcodec/h264_cabac.c
  6. +1
    -1
      libavcodec/intrax8.c
  7. +4
    -4
      libavcodec/mpeg12.c
  8. +4
    -4
      libavcodec/mpeg4videodec.c
  9. +6
    -7
      libavcodec/mpegvideo.h
  10. +1
    -1
      libavcodec/rv10.c
  11. +2
    -2
      libavcodec/rv34.c
  12. +9
    -9
      libavcodec/vc1dec.c

+ 45
- 45
libavcodec/error_resilience.c View File

@@ -167,14 +167,14 @@ static void guess_dc(MpegEncContext *s, int16_t *dc, int w, int h, int stride, i
error= s->error_status_table[mb_index]; error= s->error_status_table[mb_index];


if(IS_INTER(s->current_picture.f.mb_type[mb_index])) continue; //inter if(IS_INTER(s->current_picture.f.mb_type[mb_index])) continue; //inter
if(!(error&DC_ERROR)) continue; //dc-ok
if(!(error&ER_DC_ERROR)) continue; //dc-ok


/* right block */ /* right block */
for(j=b_x+1; j<w; j++){ for(j=b_x+1; j<w; j++){
int mb_index_j= (j>>is_luma) + (b_y>>is_luma)*s->mb_stride; int mb_index_j= (j>>is_luma) + (b_y>>is_luma)*s->mb_stride;
int error_j= s->error_status_table[mb_index_j]; int error_j= s->error_status_table[mb_index_j];
int intra_j = IS_INTRA(s->current_picture.f.mb_type[mb_index_j]); int intra_j = IS_INTRA(s->current_picture.f.mb_type[mb_index_j]);
if(intra_j==0 || !(error_j&DC_ERROR)){
if(intra_j==0 || !(error_j&ER_DC_ERROR)){
color[0]= dc[j + b_y*stride]; color[0]= dc[j + b_y*stride];
distance[0]= j-b_x; distance[0]= j-b_x;
break; break;
@@ -186,7 +186,7 @@ static void guess_dc(MpegEncContext *s, int16_t *dc, int w, int h, int stride, i
int mb_index_j= (j>>is_luma) + (b_y>>is_luma)*s->mb_stride; int mb_index_j= (j>>is_luma) + (b_y>>is_luma)*s->mb_stride;
int error_j= s->error_status_table[mb_index_j]; int error_j= s->error_status_table[mb_index_j];
int intra_j = IS_INTRA(s->current_picture.f.mb_type[mb_index_j]); int intra_j = IS_INTRA(s->current_picture.f.mb_type[mb_index_j]);
if(intra_j==0 || !(error_j&DC_ERROR)){
if(intra_j==0 || !(error_j&ER_DC_ERROR)){
color[1]= dc[j + b_y*stride]; color[1]= dc[j + b_y*stride];
distance[1]= b_x-j; distance[1]= b_x-j;
break; break;
@@ -198,7 +198,7 @@ static void guess_dc(MpegEncContext *s, int16_t *dc, int w, int h, int stride, i
int mb_index_j= (b_x>>is_luma) + (j>>is_luma)*s->mb_stride; int mb_index_j= (b_x>>is_luma) + (j>>is_luma)*s->mb_stride;
int error_j= s->error_status_table[mb_index_j]; int error_j= s->error_status_table[mb_index_j];
int intra_j = IS_INTRA(s->current_picture.f.mb_type[mb_index_j]); int intra_j = IS_INTRA(s->current_picture.f.mb_type[mb_index_j]);
if(intra_j==0 || !(error_j&DC_ERROR)){
if(intra_j==0 || !(error_j&ER_DC_ERROR)){
color[2]= dc[b_x + j*stride]; color[2]= dc[b_x + j*stride];
distance[2]= j-b_y; distance[2]= j-b_y;
break; break;
@@ -210,7 +210,7 @@ static void guess_dc(MpegEncContext *s, int16_t *dc, int w, int h, int stride, i
int mb_index_j= (b_x>>is_luma) + (j>>is_luma)*s->mb_stride; int mb_index_j= (b_x>>is_luma) + (j>>is_luma)*s->mb_stride;
int error_j= s->error_status_table[mb_index_j]; int error_j= s->error_status_table[mb_index_j];
int intra_j = IS_INTRA(s->current_picture.f.mb_type[mb_index_j]); int intra_j = IS_INTRA(s->current_picture.f.mb_type[mb_index_j]);
if(intra_j==0 || !(error_j&DC_ERROR)){
if(intra_j==0 || !(error_j&ER_DC_ERROR)){
color[3]= dc[b_x + j*stride]; color[3]= dc[b_x + j*stride];
distance[3]= b_y-j; distance[3]= b_y-j;
break; break;
@@ -250,8 +250,8 @@ static void h_block_filter(MpegEncContext *s, uint8_t *dst, int w, int h, int st
int right_status= s->error_status_table[((b_x+1)>>is_luma) + (b_y>>is_luma)*s->mb_stride]; int right_status= s->error_status_table[((b_x+1)>>is_luma) + (b_y>>is_luma)*s->mb_stride];
int left_intra = IS_INTRA(s->current_picture.f.mb_type[( b_x >> is_luma) + (b_y >> is_luma) * s->mb_stride]); int left_intra = IS_INTRA(s->current_picture.f.mb_type[( b_x >> is_luma) + (b_y >> is_luma) * s->mb_stride]);
int right_intra = IS_INTRA(s->current_picture.f.mb_type[((b_x + 1) >> is_luma) + (b_y >> is_luma) * s->mb_stride]); int right_intra = IS_INTRA(s->current_picture.f.mb_type[((b_x + 1) >> is_luma) + (b_y >> is_luma) * s->mb_stride]);
int left_damage = left_status&(DC_ERROR|AC_ERROR|MV_ERROR);
int right_damage= right_status&(DC_ERROR|AC_ERROR|MV_ERROR);
int left_damage = left_status&(ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR);
int right_damage= right_status&(ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR);
int offset= b_x*8 + b_y*stride*8; int offset= b_x*8 + b_y*stride*8;
int16_t *left_mv= s->current_picture.f.motion_val[0][mvy_stride*b_y + mvx_stride* b_x ]; int16_t *left_mv= s->current_picture.f.motion_val[0][mvy_stride*b_y + mvx_stride* b_x ];
int16_t *right_mv= s->current_picture.f.motion_val[0][mvy_stride*b_y + mvx_stride*(b_x+1)]; int16_t *right_mv= s->current_picture.f.motion_val[0][mvy_stride*b_y + mvx_stride*(b_x+1)];
@@ -313,8 +313,8 @@ static void v_block_filter(MpegEncContext *s, uint8_t *dst, int w, int h, int st
int bottom_status= s->error_status_table[(b_x>>is_luma) + ((b_y+1)>>is_luma)*s->mb_stride]; int bottom_status= s->error_status_table[(b_x>>is_luma) + ((b_y+1)>>is_luma)*s->mb_stride];
int top_intra = IS_INTRA(s->current_picture.f.mb_type[(b_x >> is_luma) + ( b_y >> is_luma) * s->mb_stride]); int top_intra = IS_INTRA(s->current_picture.f.mb_type[(b_x >> is_luma) + ( b_y >> is_luma) * s->mb_stride]);
int bottom_intra = IS_INTRA(s->current_picture.f.mb_type[(b_x >> is_luma) + ((b_y + 1) >> is_luma) * s->mb_stride]); int bottom_intra = IS_INTRA(s->current_picture.f.mb_type[(b_x >> is_luma) + ((b_y + 1) >> is_luma) * s->mb_stride]);
int top_damage = top_status&(DC_ERROR|AC_ERROR|MV_ERROR);
int bottom_damage= bottom_status&(DC_ERROR|AC_ERROR|MV_ERROR);
int top_damage = top_status&(ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR);
int bottom_damage= bottom_status&(ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR);
int offset= b_x*8 + b_y*stride*8; int offset= b_x*8 + b_y*stride*8;
int16_t *top_mv = s->current_picture.f.motion_val[0][mvy_stride * b_y + mvx_stride * b_x]; int16_t *top_mv = s->current_picture.f.motion_val[0][mvy_stride * b_y + mvx_stride * b_x];
int16_t *bottom_mv = s->current_picture.f.motion_val[0][mvy_stride * (b_y + 1) + mvx_stride * b_x]; int16_t *bottom_mv = s->current_picture.f.motion_val[0][mvy_stride * (b_y + 1) + mvx_stride * b_x];
@@ -377,7 +377,7 @@ static void guess_mv(MpegEncContext *s){
int error= s->error_status_table[mb_xy]; int error= s->error_status_table[mb_xy];


if(IS_INTRA(s->current_picture.f.mb_type[mb_xy])) f=MV_FROZEN; //intra //FIXME check if(IS_INTRA(s->current_picture.f.mb_type[mb_xy])) f=MV_FROZEN; //intra //FIXME check
if(!(error&MV_ERROR)) f=MV_FROZEN; //inter with undamaged MV
if(!(error&ER_MV_ERROR)) f=MV_FROZEN; //inter with undamaged MV


fixed[mb_xy]= f; fixed[mb_xy]= f;
if(f==MV_FROZEN) if(f==MV_FROZEN)
@@ -390,7 +390,7 @@ static void guess_mv(MpegEncContext *s){
const int mb_xy= mb_x + mb_y*s->mb_stride; const int mb_xy= mb_x + mb_y*s->mb_stride;


if(IS_INTRA(s->current_picture.f.mb_type[mb_xy])) continue; if(IS_INTRA(s->current_picture.f.mb_type[mb_xy])) continue;
if(!(s->error_status_table[mb_xy]&MV_ERROR)) continue;
if(!(s->error_status_table[mb_xy]&ER_MV_ERROR)) continue;


s->mv_dir = s->last_picture.f.data[0] ? MV_DIR_FORWARD : MV_DIR_BACKWARD; s->mv_dir = s->last_picture.f.data[0] ? MV_DIR_FORWARD : MV_DIR_BACKWARD;
s->mb_intra=0; s->mb_intra=0;
@@ -646,7 +646,7 @@ static int is_intra_more_likely(MpegEncContext *s){
for(i=0; i<s->mb_num; i++){ for(i=0; i<s->mb_num; i++){
const int mb_xy= s->mb_index2xy[i]; const int mb_xy= s->mb_index2xy[i];
const int error= s->error_status_table[mb_xy]; const int error= s->error_status_table[mb_xy];
if(!((error&DC_ERROR) && (error&MV_ERROR)))
if(!((error&ER_DC_ERROR) && (error&ER_MV_ERROR)))
undamaged_count++; undamaged_count++;
} }


@@ -672,7 +672,7 @@ static int is_intra_more_likely(MpegEncContext *s){
const int mb_xy= mb_x + mb_y*s->mb_stride; const int mb_xy= mb_x + mb_y*s->mb_stride;


error= s->error_status_table[mb_xy]; error= s->error_status_table[mb_xy];
if((error&DC_ERROR) && (error&MV_ERROR))
if((error&ER_DC_ERROR) && (error&ER_MV_ERROR))
continue; //skip damaged continue; //skip damaged


j++; j++;
@@ -705,7 +705,7 @@ static int is_intra_more_likely(MpegEncContext *s){
void ff_er_frame_start(MpegEncContext *s){ void ff_er_frame_start(MpegEncContext *s){
if(!s->err_recognition) return; if(!s->err_recognition) return;


memset(s->error_status_table, MV_ERROR|AC_ERROR|DC_ERROR|VP_START|AC_END|DC_END|MV_END, s->mb_stride*s->mb_height*sizeof(uint8_t));
memset(s->error_status_table, ER_MV_ERROR|ER_AC_ERROR|ER_DC_ERROR|VP_START|ER_AC_END|ER_DC_END|ER_MV_END, s->mb_stride*s->mb_height*sizeof(uint8_t));
s->error_count= 3*s->mb_num; s->error_count= 3*s->mb_num;
s->error_occurred = 0; s->error_occurred = 0;
} }
@@ -713,7 +713,7 @@ void ff_er_frame_start(MpegEncContext *s){
/** /**
* Add a slice. * Add a slice.
* @param endx x component of the last macroblock, can be -1 for the last of the previous line * @param endx x component of the last macroblock, can be -1 for the last of the previous line
* @param status the status at the end (MV_END, AC_ERROR, ...), it is assumed that no earlier end or
* @param status the status at the end (ER_MV_END, ER_AC_ERROR, ...), it is assumed that no earlier end or
* error of the same type occurred * error of the same type occurred
*/ */
void ff_er_add_slice(MpegEncContext *s, int startx, int starty, int endx, int endy, int status){ void ff_er_add_slice(MpegEncContext *s, int startx, int starty, int endx, int endy, int status){
@@ -734,20 +734,20 @@ void ff_er_add_slice(MpegEncContext *s, int startx, int starty, int endx, int en
if(!s->err_recognition) return; if(!s->err_recognition) return;


mask &= ~VP_START; mask &= ~VP_START;
if(status & (AC_ERROR|AC_END)){
mask &= ~(AC_ERROR|AC_END);
if(status & (ER_AC_ERROR|ER_AC_END)){
mask &= ~(ER_AC_ERROR|ER_AC_END);
s->error_count -= end_i - start_i + 1; s->error_count -= end_i - start_i + 1;
} }
if(status & (DC_ERROR|DC_END)){
mask &= ~(DC_ERROR|DC_END);
if(status & (ER_DC_ERROR|ER_DC_END)){
mask &= ~(ER_DC_ERROR|ER_DC_END);
s->error_count -= end_i - start_i + 1; s->error_count -= end_i - start_i + 1;
} }
if(status & (MV_ERROR|MV_END)){
mask &= ~(MV_ERROR|MV_END);
if(status & (ER_MV_ERROR|ER_MV_END)){
mask &= ~(ER_MV_ERROR|ER_MV_END);
s->error_count -= end_i - start_i + 1; s->error_count -= end_i - start_i + 1;
} }


if(status & (AC_ERROR|DC_ERROR|MV_ERROR)) {
if(status & (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)) {
s->error_occurred = 1; s->error_occurred = 1;
s->error_count= INT_MAX; s->error_count= INT_MAX;
} }
@@ -774,7 +774,7 @@ void ff_er_add_slice(MpegEncContext *s, int startx, int starty, int endx, int en
int prev_status= s->error_status_table[ s->mb_index2xy[start_i - 1] ]; int prev_status= s->error_status_table[ s->mb_index2xy[start_i - 1] ];


prev_status &= ~ VP_START; prev_status &= ~ VP_START;
if(prev_status != (MV_END|DC_END|AC_END)) s->error_count= INT_MAX;
if(prev_status != (ER_MV_END|ER_DC_END|ER_AC_END)) s->error_count= INT_MAX;
} }
} }


@@ -845,13 +845,13 @@ void ff_er_frame_end(MpegEncContext *s){
const int mb_xy= s->mb_index2xy[i]; const int mb_xy= s->mb_index2xy[i];
int error= s->error_status_table[mb_xy]; int error= s->error_status_table[mb_xy];


if(error&AC_END)
if(error&ER_AC_END)
end_ok=0; end_ok=0;
if((error&MV_END) || (error&DC_END) || (error&AC_ERROR))
if((error&ER_MV_END) || (error&ER_DC_END) || (error&ER_AC_ERROR))
end_ok=1; end_ok=1;


if(!end_ok) if(!end_ok)
s->error_status_table[mb_xy]|= AC_ERROR;
s->error_status_table[mb_xy]|= ER_AC_ERROR;


if(error&VP_START) if(error&VP_START)
end_ok=0; end_ok=0;
@@ -870,14 +870,14 @@ void ff_er_frame_end(MpegEncContext *s){
if(error1&VP_START) if(error1&VP_START)
end_ok=1; end_ok=1;


if( error2==(VP_START|DC_ERROR|AC_ERROR|MV_ERROR|AC_END|DC_END|MV_END)
&& error1!=(VP_START|DC_ERROR|AC_ERROR|MV_ERROR|AC_END|DC_END|MV_END)
&& ((error1&AC_END) || (error1&DC_END) || (error1&MV_END))){ //end & uninit
if( error2==(VP_START|ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR|ER_AC_END|ER_DC_END|ER_MV_END)
&& error1!=(VP_START|ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR|ER_AC_END|ER_DC_END|ER_MV_END)
&& ((error1&ER_AC_END) || (error1&ER_DC_END) || (error1&ER_MV_END))){ //end & uninit
end_ok=0; end_ok=0;
} }


if(!end_ok) if(!end_ok)
s->error_status_table[mb_xy]|= DC_ERROR|AC_ERROR|MV_ERROR;
s->error_status_table[mb_xy]|= ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR;
} }
} }


@@ -913,9 +913,9 @@ void ff_er_frame_end(MpegEncContext *s){
int old_error= s->error_status_table[mb_xy]; int old_error= s->error_status_table[mb_xy];


if(old_error&VP_START) if(old_error&VP_START)
error= old_error& (DC_ERROR|AC_ERROR|MV_ERROR);
error= old_error& (ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR);
else{ else{
error|= old_error& (DC_ERROR|AC_ERROR|MV_ERROR);
error|= old_error& (ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR);
s->error_status_table[mb_xy]|= error; s->error_status_table[mb_xy]|= error;
} }
} }
@@ -925,8 +925,8 @@ void ff_er_frame_end(MpegEncContext *s){
for(i=0; i<s->mb_num; i++){ for(i=0; i<s->mb_num; i++){
const int mb_xy= s->mb_index2xy[i]; const int mb_xy= s->mb_index2xy[i];
error= s->error_status_table[mb_xy]; error= s->error_status_table[mb_xy];
if(error&(AC_ERROR|DC_ERROR|MV_ERROR))
error|= AC_ERROR|DC_ERROR|MV_ERROR;
if(error&(ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR))
error|= ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR;
s->error_status_table[mb_xy]= error; s->error_status_table[mb_xy]= error;
} }
} }
@@ -935,9 +935,9 @@ void ff_er_frame_end(MpegEncContext *s){
for(i=0; i<s->mb_num; i++){ for(i=0; i<s->mb_num; i++){
const int mb_xy= s->mb_index2xy[i]; const int mb_xy= s->mb_index2xy[i];
error= s->error_status_table[mb_xy]; error= s->error_status_table[mb_xy];
if(error&DC_ERROR) dc_error ++;
if(error&AC_ERROR) ac_error ++;
if(error&MV_ERROR) mv_error ++;
if(error&ER_DC_ERROR) dc_error ++;
if(error&ER_AC_ERROR) ac_error ++;
if(error&ER_MV_ERROR) mv_error ++;
} }
av_log(s->avctx, AV_LOG_INFO, "concealing %d DC, %d AC, %d MV errors\n", dc_error, ac_error, mv_error); av_log(s->avctx, AV_LOG_INFO, "concealing %d DC, %d AC, %d MV errors\n", dc_error, ac_error, mv_error);


@@ -947,7 +947,7 @@ void ff_er_frame_end(MpegEncContext *s){
for(i=0; i<s->mb_num; i++){ for(i=0; i<s->mb_num; i++){
const int mb_xy= s->mb_index2xy[i]; const int mb_xy= s->mb_index2xy[i];
error= s->error_status_table[mb_xy]; error= s->error_status_table[mb_xy];
if(!((error&DC_ERROR) && (error&MV_ERROR)))
if(!((error&ER_DC_ERROR) && (error&ER_MV_ERROR)))
continue; continue;


if(is_intra_likely) if(is_intra_likely)
@@ -973,8 +973,8 @@ void ff_er_frame_end(MpegEncContext *s){
error= s->error_status_table[mb_xy]; error= s->error_status_table[mb_xy];


if(IS_INTRA(mb_type)) continue; //intra if(IS_INTRA(mb_type)) continue; //intra
if(error&MV_ERROR) continue; //inter with damaged MV
if(!(error&AC_ERROR)) continue; //undamaged inter
if(error&ER_MV_ERROR) continue; //inter with damaged MV
if(!(error&ER_AC_ERROR)) continue; //undamaged inter


s->mv_dir = dir ? MV_DIR_BACKWARD : MV_DIR_FORWARD; s->mv_dir = dir ? MV_DIR_BACKWARD : MV_DIR_FORWARD;
s->mb_intra=0; s->mb_intra=0;
@@ -1011,8 +1011,8 @@ void ff_er_frame_end(MpegEncContext *s){
error= s->error_status_table[mb_xy]; error= s->error_status_table[mb_xy];


if(IS_INTRA(mb_type)) continue; if(IS_INTRA(mb_type)) continue;
if(!(error&MV_ERROR)) continue; //inter with undamaged MV
if(!(error&AC_ERROR)) continue; //undamaged inter
if(!(error&ER_MV_ERROR)) continue; //inter with undamaged MV
if(!(error&ER_AC_ERROR)) continue; //undamaged inter


s->mv_dir = MV_DIR_FORWARD|MV_DIR_BACKWARD; s->mv_dir = MV_DIR_FORWARD|MV_DIR_BACKWARD;
if(!s->last_picture.f.data[0]) s->mv_dir &= ~MV_DIR_FORWARD; if(!s->last_picture.f.data[0]) s->mv_dir &= ~MV_DIR_FORWARD;
@@ -1066,7 +1066,7 @@ void ff_er_frame_end(MpegEncContext *s){
error= s->error_status_table[mb_xy]; error= s->error_status_table[mb_xy];


if(IS_INTRA(mb_type) && s->partitioned_frame) continue; if(IS_INTRA(mb_type) && s->partitioned_frame) continue;
// if(error&MV_ERROR) continue; //inter data damaged FIXME is this good?
// if(error&ER_MV_ERROR) continue; //inter data damaged FIXME is this good?


dest_y = s->current_picture.f.data[0] + mb_x * 16 + mb_y * 16 * s->linesize; dest_y = s->current_picture.f.data[0] + mb_x * 16 + mb_y * 16 * s->linesize;
dest_cb = s->current_picture.f.data[1] + mb_x * 8 + mb_y * 8 * s->uvlinesize; dest_cb = s->current_picture.f.data[1] + mb_x * 8 + mb_y * 8 * s->uvlinesize;
@@ -1115,7 +1115,7 @@ void ff_er_frame_end(MpegEncContext *s){
error= s->error_status_table[mb_xy]; error= s->error_status_table[mb_xy];


if(IS_INTER(mb_type)) continue; if(IS_INTER(mb_type)) continue;
if(!(error&AC_ERROR)) continue; //undamaged
if(!(error&ER_AC_ERROR)) continue; //undamaged


dest_y = s->current_picture.f.data[0] + mb_x * 16 + mb_y * 16 * s->linesize; dest_y = s->current_picture.f.data[0] + mb_x * 16 + mb_y * 16 * s->linesize;
dest_cb = s->current_picture.f.data[1] + mb_x * 8 + mb_y * 8 * s->uvlinesize; dest_cb = s->current_picture.f.data[1] + mb_x * 8 + mb_y * 8 * s->uvlinesize;
@@ -1143,7 +1143,7 @@ ec_clean:
const int mb_xy= s->mb_index2xy[i]; const int mb_xy= s->mb_index2xy[i];
int error= s->error_status_table[mb_xy]; int error= s->error_status_table[mb_xy];


if(s->pict_type!=AV_PICTURE_TYPE_B && (error&(DC_ERROR|MV_ERROR|AC_ERROR))){
if(s->pict_type!=AV_PICTURE_TYPE_B && (error&(ER_DC_ERROR|ER_MV_ERROR|ER_AC_ERROR))){
s->mbskip_table[mb_xy]=0; s->mbskip_table[mb_xy]=0;
} }
s->mbintra_table[mb_xy]=1; s->mbintra_table[mb_xy]=1;


+ 8
- 8
libavcodec/h263dec.c View File

@@ -148,7 +148,7 @@ static int get_consumed_bytes(MpegEncContext *s, int buf_size){
} }


static int decode_slice(MpegEncContext *s){ static int decode_slice(MpegEncContext *s){
const int part_mask= s->partitioned_frame ? (AC_END|AC_ERROR) : 0x7F;
const int part_mask= s->partitioned_frame ? (ER_AC_END|ER_AC_ERROR) : 0x7F;
const int mb_size= 16>>s->avctx->lowres; const int mb_size= 16>>s->avctx->lowres;
s->last_resync_gb= s->gb; s->last_resync_gb= s->gb;
s->first_slice_line= 1; s->first_slice_line= 1;
@@ -184,7 +184,7 @@ static int decode_slice(MpegEncContext *s){
/* per-row end of slice checks */ /* per-row end of slice checks */
if(s->msmpeg4_version){ if(s->msmpeg4_version){
if(s->resync_mb_y + s->slice_height == s->mb_y){ if(s->resync_mb_y + s->slice_height == s->mb_y){
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);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_AC_END|ER_DC_END|ER_MV_END);


return 0; return 0;
} }
@@ -225,7 +225,7 @@ static int decode_slice(MpegEncContext *s){
ff_h263_loop_filter(s); ff_h263_loop_filter(s);


//printf("%d %d %d %06X\n", s->mb_x, s->mb_y, s->gb.size*8 - get_bits_count(&s->gb), show_bits(&s->gb, 24)); //printf("%d %d %d %06X\n", s->mb_x, s->mb_y, s->gb.size*8 - get_bits_count(&s->gb), show_bits(&s->gb, 24));
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END)&part_mask);


s->padding_bug_score--; s->padding_bug_score--;


@@ -238,11 +238,11 @@ static int decode_slice(MpegEncContext *s){
return 0; return 0;
}else if(ret==SLICE_NOEND){ }else if(ret==SLICE_NOEND){
av_log(s->avctx, AV_LOG_ERROR, "Slice mismatch at MB: %d\n", xy); av_log(s->avctx, AV_LOG_ERROR, "Slice mismatch at MB: %d\n", xy);
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)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x+1, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END)&part_mask);
return -1; return -1;
} }
av_log(s->avctx, AV_LOG_ERROR, "Error at MB: %d\n", xy); av_log(s->avctx, AV_LOG_ERROR, "Error at MB: %d\n", xy);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_ERROR|DC_ERROR|MV_ERROR)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)&part_mask);


return -1; return -1;
} }
@@ -321,7 +321,7 @@ static int decode_slice(MpegEncContext *s){
else if(left<0){ else if(left<0){
av_log(s->avctx, AV_LOG_ERROR, "overreading %d bits\n", -left); av_log(s->avctx, AV_LOG_ERROR, "overreading %d bits\n", -left);
}else }else
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);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_AC_END|ER_DC_END|ER_MV_END);


return 0; return 0;
} }
@@ -330,7 +330,7 @@ static int decode_slice(MpegEncContext *s){
get_bits_left(&s->gb), get_bits_left(&s->gb),
show_bits(&s->gb, 24), s->padding_bug_score); show_bits(&s->gb, 24), s->padding_bug_score);


ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END)&part_mask);


return -1; return -1;
} }
@@ -661,7 +661,7 @@ retry:


if (s->msmpeg4_version && s->msmpeg4_version<4 && s->pict_type==AV_PICTURE_TYPE_I) if (s->msmpeg4_version && s->msmpeg4_version<4 && s->pict_type==AV_PICTURE_TYPE_I)
if(!CONFIG_MSMPEG4_DECODER || msmpeg4_decode_ext_header(s, buf_size) < 0){ if(!CONFIG_MSMPEG4_DECODER || msmpeg4_decode_ext_header(s, buf_size) < 0){
s->error_status_table[s->mb_num-1]= AC_ERROR|DC_ERROR|MV_ERROR;
s->error_status_table[s->mb_num-1]= ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR;
} }


assert(s->bitstream_buffer_size==0); assert(s->bitstream_buffer_size==0);


+ 9
- 9
libavcodec/h264.c View File

@@ -3556,7 +3556,7 @@ static void decode_finish_row(H264Context *h){
static int decode_slice(struct AVCodecContext *avctx, void *arg){ static int decode_slice(struct AVCodecContext *avctx, void *arg){
H264Context *h = *(void**)arg; H264Context *h = *(void**)arg;
MpegEncContext * const s = &h->s; MpegEncContext * const s = &h->s;
const int part_mask= s->partitioned_frame ? (AC_END|AC_ERROR) : 0x7F;
const int part_mask= s->partitioned_frame ? (ER_AC_END|ER_AC_ERROR) : 0x7F;
int lf_x_start = s->mb_x; int lf_x_start = s->mb_x;


s->mb_skip_run= -1; s->mb_skip_run= -1;
@@ -3595,13 +3595,13 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){
eos = get_cabac_terminate( &h->cabac ); eos = get_cabac_terminate( &h->cabac );


if((s->workaround_bugs & FF_BUG_TRUNCATED) && h->cabac.bytestream > h->cabac.bytestream_end + 2){ if((s->workaround_bugs & FF_BUG_TRUNCATED) && h->cabac.bytestream > h->cabac.bytestream_end + 2){
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)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END)&part_mask);
if (s->mb_x >= lf_x_start) loop_filter(h, lf_x_start, s->mb_x + 1); if (s->mb_x >= lf_x_start) loop_filter(h, lf_x_start, s->mb_x + 1);
return 0; return 0;
} }
if( ret < 0 || h->cabac.bytestream > h->cabac.bytestream_end + 2) { if( ret < 0 || h->cabac.bytestream > h->cabac.bytestream_end + 2) {
av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d, bytestream (%td)\n", s->mb_x, s->mb_y, h->cabac.bytestream_end - h->cabac.bytestream); av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d, bytestream (%td)\n", s->mb_x, s->mb_y, h->cabac.bytestream_end - h->cabac.bytestream);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_ERROR|DC_ERROR|MV_ERROR)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)&part_mask);
return -1; return -1;
} }


@@ -3619,7 +3619,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){


if( eos || s->mb_y >= s->mb_height ) { if( eos || s->mb_y >= s->mb_height ) {
tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits); tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits);
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)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END)&part_mask);
if (s->mb_x > lf_x_start) loop_filter(h, lf_x_start, s->mb_x); if (s->mb_x > lf_x_start) loop_filter(h, lf_x_start, s->mb_x);
return 0; return 0;
} }
@@ -3641,7 +3641,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){


if(ret<0){ if(ret<0){
av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d\n", s->mb_x, s->mb_y); av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d\n", s->mb_x, s->mb_y);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_ERROR|DC_ERROR|MV_ERROR)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)&part_mask);
return -1; return -1;
} }


@@ -3659,11 +3659,11 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){
tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits); tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits);


if(get_bits_count(&s->gb) == s->gb.size_in_bits ) { if(get_bits_count(&s->gb) == s->gb.size_in_bits ) {
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)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END)&part_mask);


return 0; return 0;
}else{ }else{
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END)&part_mask);


return -1; return -1;
} }
@@ -3673,12 +3673,12 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){
if(get_bits_count(&s->gb) >= s->gb.size_in_bits && s->mb_skip_run<=0){ if(get_bits_count(&s->gb) >= s->gb.size_in_bits && s->mb_skip_run<=0){
tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits); tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits);
if(get_bits_count(&s->gb) == s->gb.size_in_bits ){ if(get_bits_count(&s->gb) == s->gb.size_in_bits ){
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)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END)&part_mask);
if (s->mb_x > lf_x_start) loop_filter(h, lf_x_start, s->mb_x); if (s->mb_x > lf_x_start) loop_filter(h, lf_x_start, s->mb_x);


return 0; return 0;
}else{ }else{
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_ERROR|DC_ERROR|MV_ERROR)&part_mask);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)&part_mask);


return -1; return -1;
} }


+ 2
- 2
libavcodec/h264.h View File

@@ -668,13 +668,13 @@ av_cold void ff_h264_decode_init_vlc(void);


/** /**
* Decode a macroblock * Decode a macroblock
* @return 0 if OK, AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed
* @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
*/ */
int ff_h264_decode_mb_cavlc(H264Context *h); int ff_h264_decode_mb_cavlc(H264Context *h);


/** /**
* Decode a CABAC coded macroblock * Decode a CABAC coded macroblock
* @return 0 if OK, AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed
* @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
*/ */
int ff_h264_decode_mb_cabac(H264Context *h); int ff_h264_decode_mb_cabac(H264Context *h);




+ 1
- 1
libavcodec/h264_cabac.c View File

@@ -1863,7 +1863,7 @@ static av_always_inline void decode_cabac_luma_residual( H264Context *h, const u


/** /**
* Decode a macroblock. * Decode a macroblock.
* @return 0 if OK, AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed
* @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
*/ */
int ff_h264_decode_mb_cabac(H264Context *h) { int ff_h264_decode_mb_cabac(H264Context *h) {
MpegEncContext * const s = &h->s; MpegEncContext * const s = &h->s;


+ 1
- 1
libavcodec/intrax8.c View File

@@ -784,6 +784,6 @@ int ff_intrax8_decode_picture(IntraX8Context * const w, int dquant, int quant_of
error: error:
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y,
(s->mb_x>>1)-1, (s->mb_y>>1)-1, (s->mb_x>>1)-1, (s->mb_y>>1)-1,
(AC_END|DC_END|MV_END) );
(ER_AC_END|ER_DC_END|ER_MV_END) );
return 0; return 0;
} }

+ 4
- 4
libavcodec/mpeg12.c View File

@@ -1866,9 +1866,9 @@ static int slice_decode_thread(AVCodecContext *c, void *arg)
if (c->err_recognition & AV_EF_EXPLODE) if (c->err_recognition & AV_EF_EXPLODE)
return ret; return ret;
if (s->resync_mb_x >= 0 && s->resync_mb_y >= 0) if (s->resync_mb_x >= 0 && s->resync_mb_y >= 0)
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, AC_ERROR | DC_ERROR | MV_ERROR);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, ER_AC_ERROR | ER_DC_ERROR | ER_MV_ERROR);
} else { } else {
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);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_AC_END | ER_DC_END | ER_MV_END);
} }


if (s->mb_y == s->end_mb_y) if (s->mb_y == s->end_mb_y)
@@ -2450,9 +2450,9 @@ static int decode_chunks(AVCodecContext *avctx,
if (avctx->err_recognition & AV_EF_EXPLODE) if (avctx->err_recognition & AV_EF_EXPLODE)
return ret; return ret;
if (s2->resync_mb_x >= 0 && s2->resync_mb_y >= 0) if (s2->resync_mb_x >= 0 && s2->resync_mb_y >= 0)
ff_er_add_slice(s2, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x, s2->mb_y, AC_ERROR | DC_ERROR | MV_ERROR);
ff_er_add_slice(s2, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x, s2->mb_y, ER_AC_ERROR | ER_DC_ERROR | ER_MV_ERROR);
} else { } else {
ff_er_add_slice(s2, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x-1, s2->mb_y, AC_END | DC_END | MV_END);
ff_er_add_slice(s2, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x-1, s2->mb_y, ER_AC_END | ER_DC_END | ER_MV_END);
} }
} }
} }


+ 4
- 4
libavcodec/mpeg4videodec.c View File

@@ -790,8 +790,8 @@ static int mpeg4_decode_partition_b(MpegEncContext *s, int mb_count){
int ff_mpeg4_decode_partitions(MpegEncContext *s) int ff_mpeg4_decode_partitions(MpegEncContext *s)
{ {
int mb_num; int mb_num;
const int part_a_error= s->pict_type==AV_PICTURE_TYPE_I ? (DC_ERROR|MV_ERROR) : MV_ERROR;
const int part_a_end = s->pict_type==AV_PICTURE_TYPE_I ? (DC_END |MV_END) : MV_END;
const int part_a_error= s->pict_type==AV_PICTURE_TYPE_I ? (ER_DC_ERROR|ER_MV_ERROR) : ER_MV_ERROR;
const int part_a_end = s->pict_type==AV_PICTURE_TYPE_I ? (ER_DC_END |ER_MV_END) : ER_MV_END;


mb_num= mpeg4_decode_partition_a(s); mb_num= mpeg4_decode_partition_a(s);
if(mb_num<0){ if(mb_num<0){
@@ -826,11 +826,11 @@ int ff_mpeg4_decode_partitions(MpegEncContext *s)


if( mpeg4_decode_partition_b(s, mb_num) < 0){ if( mpeg4_decode_partition_b(s, mb_num) < 0){
if(s->pict_type==AV_PICTURE_TYPE_P) if(s->pict_type==AV_PICTURE_TYPE_P)
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, DC_ERROR);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, ER_DC_ERROR);
return -1; return -1;
}else{ }else{
if(s->pict_type==AV_PICTURE_TYPE_P) if(s->pict_type==AV_PICTURE_TYPE_P)
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, DC_END);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_DC_END);
} }


return 0; return 0;


+ 6
- 7
libavcodec/mpegvideo.h View File

@@ -474,13 +474,12 @@ typedef struct MpegEncContext {
int error_count, error_occurred; int error_count, error_occurred;
uint8_t *error_status_table; ///< table of the error status of each MB uint8_t *error_status_table; ///< table of the error status of each MB
#define VP_START 1 ///< current MB is the first after a resync marker #define VP_START 1 ///< current MB is the first after a resync marker
#define AC_ERROR 2
#define DC_ERROR 4
#define MV_ERROR 8
#define AC_END 16
#define DC_END 32
#define MV_END 64
//FIXME some prefix?
#define ER_AC_ERROR 2
#define ER_DC_ERROR 4
#define ER_MV_ERROR 8
#define ER_AC_END 16
#define ER_DC_END 32
#define ER_MV_END 64


int resync_mb_x; ///< x position of last resync marker int resync_mb_x; ///< x position of last resync marker
int resync_mb_y; ///< y position of last resync marker int resync_mb_y; ///< y position of last resync marker


+ 1
- 1
libavcodec/rv10.c View File

@@ -609,7 +609,7 @@ static int rv10_decode_packet(AVCodecContext *avctx,
if(ret == SLICE_END) break; if(ret == SLICE_END) break;
} }


ff_er_add_slice(s, start_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, AC_END|DC_END|MV_END);
ff_er_add_slice(s, start_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_AC_END|ER_DC_END|ER_MV_END);


return s->gb.size_in_bits; return s->gb.size_in_bits;
} }


+ 2
- 2
libavcodec/rv34.c View File

@@ -1278,7 +1278,7 @@ static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int
s->dsp.clear_blocks(s->block[0]); s->dsp.clear_blocks(s->block[0]);


if(rv34_decode_macroblock(r, r->intra_types + s->mb_x * 4 + 4) < 0){ if(rv34_decode_macroblock(r, r->intra_types + s->mb_x * 4 + 4) < 0){
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, AC_ERROR|DC_ERROR|MV_ERROR);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR);
return -1; return -1;
} }
if (++s->mb_x == s->mb_width) { if (++s->mb_x == s->mb_width) {
@@ -1296,7 +1296,7 @@ static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int
s->first_slice_line=0; s->first_slice_line=0;
s->mb_num_left--; s->mb_num_left--;
} }
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);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_AC_END|ER_DC_END|ER_MV_END);


return s->mb_y == s->mb_height; return s->mb_y == s->mb_height;
} }


+ 9
- 9
libavcodec/vc1dec.c View File

@@ -4548,7 +4548,7 @@ static void vc1_decode_i_blocks(VC1Context *v)
if (v->s.loop_filter) vc1_loop_filter_iblk(v, v->pq); if (v->s.loop_filter) vc1_loop_filter_iblk(v, v->pq);


if (get_bits_count(&s->gb) > v->bits) { if (get_bits_count(&s->gb) > v->bits) {
ff_er_add_slice(s, 0, 0, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END));
ff_er_add_slice(s, 0, 0, s->mb_x, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END));
av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n",
get_bits_count(&s->gb), v->bits); get_bits_count(&s->gb), v->bits);
return; return;
@@ -4563,7 +4563,7 @@ static void vc1_decode_i_blocks(VC1Context *v)
} }
if (v->s.loop_filter) if (v->s.loop_filter)
ff_draw_horiz_band(s, (s->mb_height - 1) * 16, 16); ff_draw_horiz_band(s, (s->mb_height - 1) * 16, 16);
ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END));
ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (ER_AC_END|ER_DC_END|ER_MV_END));
} }


/** Decode blocks of I-frame for advanced profile /** Decode blocks of I-frame for advanced profile
@@ -4673,7 +4673,7 @@ static void vc1_decode_i_blocks_adv(VC1Context *v)


if (get_bits_count(&s->gb) > v->bits) { if (get_bits_count(&s->gb) > v->bits) {
// TODO: may need modification to handle slice coding // TODO: may need modification to handle slice coding
ff_er_add_slice(s, 0, s->start_mb_y, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END));
ff_er_add_slice(s, 0, s->start_mb_y, s->mb_x, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END));
av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n",
get_bits_count(&s->gb), v->bits); get_bits_count(&s->gb), v->bits);
return; return;
@@ -4698,7 +4698,7 @@ static void vc1_decode_i_blocks_adv(VC1Context *v)
if (v->s.loop_filter) if (v->s.loop_filter)
ff_draw_horiz_band(s, (s->end_mb_y-1)*16, 16); ff_draw_horiz_band(s, (s->end_mb_y-1)*16, 16);
ff_er_add_slice(s, 0, s->start_mb_y << v->field_mode, s->mb_width - 1, ff_er_add_slice(s, 0, s->start_mb_y << v->field_mode, s->mb_width - 1,
(s->end_mb_y << v->field_mode) - 1, (AC_END|DC_END|MV_END));
(s->end_mb_y << v->field_mode) - 1, (ER_AC_END|ER_DC_END|ER_MV_END));
} }


static void vc1_decode_p_blocks(VC1Context *v) static void vc1_decode_p_blocks(VC1Context *v)
@@ -4749,7 +4749,7 @@ static void vc1_decode_p_blocks(VC1Context *v)
vc1_apply_p_loop_filter(v); vc1_apply_p_loop_filter(v);
if (get_bits_count(&s->gb) > v->bits || get_bits_count(&s->gb) < 0) { if (get_bits_count(&s->gb) > v->bits || get_bits_count(&s->gb) < 0) {
// TODO: may need modification to handle slice coding // TODO: may need modification to handle slice coding
ff_er_add_slice(s, 0, s->start_mb_y, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END));
ff_er_add_slice(s, 0, s->start_mb_y, s->mb_x, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END));
av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i at %ix%i\n", av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i at %ix%i\n",
get_bits_count(&s->gb), v->bits, s->mb_x, s->mb_y); get_bits_count(&s->gb), v->bits, s->mb_x, s->mb_y);
return; return;
@@ -4773,7 +4773,7 @@ static void vc1_decode_p_blocks(VC1Context *v)
if (s->end_mb_y >= s->start_mb_y) if (s->end_mb_y >= s->start_mb_y)
ff_draw_horiz_band(s, (s->end_mb_y - 1) * 16, 16); ff_draw_horiz_band(s, (s->end_mb_y - 1) * 16, 16);
ff_er_add_slice(s, 0, s->start_mb_y << v->field_mode, s->mb_width - 1, ff_er_add_slice(s, 0, s->start_mb_y << v->field_mode, s->mb_width - 1,
(s->end_mb_y << v->field_mode) - 1, (AC_END|DC_END|MV_END));
(s->end_mb_y << v->field_mode) - 1, (ER_AC_END|ER_DC_END|ER_MV_END));
} }


static void vc1_decode_b_blocks(VC1Context *v) static void vc1_decode_b_blocks(VC1Context *v)
@@ -4818,7 +4818,7 @@ static void vc1_decode_b_blocks(VC1Context *v)
vc1_decode_b_mb(v); vc1_decode_b_mb(v);
if (get_bits_count(&s->gb) > v->bits || get_bits_count(&s->gb) < 0) { if (get_bits_count(&s->gb) > v->bits || get_bits_count(&s->gb) < 0) {
// TODO: may need modification to handle slice coding // TODO: may need modification to handle slice coding
ff_er_add_slice(s, 0, s->start_mb_y, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END));
ff_er_add_slice(s, 0, s->start_mb_y, s->mb_x, s->mb_y, (ER_AC_END|ER_DC_END|ER_MV_END));
av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i at %ix%i\n", av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i at %ix%i\n",
get_bits_count(&s->gb), v->bits, s->mb_x, s->mb_y); get_bits_count(&s->gb), v->bits, s->mb_x, s->mb_y);
return; return;
@@ -4834,14 +4834,14 @@ static void vc1_decode_b_blocks(VC1Context *v)
if (v->s.loop_filter) if (v->s.loop_filter)
ff_draw_horiz_band(s, (s->end_mb_y - 1) * 16, 16); ff_draw_horiz_band(s, (s->end_mb_y - 1) * 16, 16);
ff_er_add_slice(s, 0, s->start_mb_y << v->field_mode, s->mb_width - 1, ff_er_add_slice(s, 0, s->start_mb_y << v->field_mode, s->mb_width - 1,
(s->end_mb_y << v->field_mode) - 1, (AC_END|DC_END|MV_END));
(s->end_mb_y << v->field_mode) - 1, (ER_AC_END|ER_DC_END|ER_MV_END));
} }


static void vc1_decode_skip_blocks(VC1Context *v) static void vc1_decode_skip_blocks(VC1Context *v)
{ {
MpegEncContext *s = &v->s; MpegEncContext *s = &v->s;


ff_er_add_slice(s, 0, s->start_mb_y, s->mb_width - 1, s->end_mb_y - 1, (AC_END|DC_END|MV_END));
ff_er_add_slice(s, 0, s->start_mb_y, s->mb_width - 1, s->end_mb_y - 1, (ER_AC_END|ER_DC_END|ER_MV_END));
s->first_slice_line = 1; s->first_slice_line = 1;
for (s->mb_y = s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) { for (s->mb_y = s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) {
s->mb_x = 0; s->mb_x = 0;


Loading…
Cancel
Save