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>
			
			
This commit is contained in:
		
							parent
							
								
									878dda5db1
								
							
						
					
					
						commit
						5bf2ac2b37
					
				| @ -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 left_damage =  left_status&(ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR); | ||||||
|             int right_damage= right_status&(DC_ERROR|AC_ERROR|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 top_damage =      top_status&(ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR); | ||||||
|             int bottom_damage= bottom_status&(DC_ERROR|AC_ERROR|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)){ |     if(status & (ER_AC_ERROR|ER_AC_END)){ | ||||||
|         mask &= ~(AC_ERROR|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)){ |     if(status & (ER_DC_ERROR|ER_DC_END)){ | ||||||
|         mask &= ~(DC_ERROR|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)){ |     if(status & (ER_MV_ERROR|ER_MV_END)){ | ||||||
|         mask &= ~(MV_ERROR|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) |             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|DC_ERROR|AC_ERROR|MV_ERROR|AC_END|DC_END|MV_END) |                && error1!=(VP_START|ER_DC_ERROR|ER_AC_ERROR|ER_MV_ERROR|ER_AC_END|ER_DC_END|ER_MV_END) | ||||||
|                && ((error1&AC_END) || (error1&DC_END) || (error1&MV_END))){ //end & uninit
 |                && ((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)) |             if(error&(ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)) | ||||||
|                 error|= AC_ERROR|DC_ERROR|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&ER_DC_ERROR) dc_error ++; | ||||||
|         if(error&AC_ERROR) ac_error ++; |         if(error&ER_AC_ERROR) ac_error ++; | ||||||
|         if(error&MV_ERROR) mv_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&ER_MV_ERROR) continue;              //inter with damaged MV
 | ||||||
|             if(!(error&AC_ERROR)) continue;           //undamaged inter
 |             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&ER_MV_ERROR)) continue;           //inter with undamaged MV
 | ||||||
|                 if(!(error&AC_ERROR)) continue;           //undamaged inter
 |                 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; | ||||||
|  | |||||||
| @ -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); | ||||||
|  | |||||||
| @ -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; | ||||||
|                 } |                 } | ||||||
|  | |||||||
| @ -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); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -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; | ||||||
|  | |||||||
| @ -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; | ||||||
| } | } | ||||||
|  | |||||||
| @ -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); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -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_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 ? (DC_END  |MV_END)   : MV_END; |     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; | ||||||
|  | |||||||
| @ -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 ER_AC_ERROR            2 | ||||||
| #define DC_ERROR            4 | #define ER_DC_ERROR            4 | ||||||
| #define MV_ERROR            8 | #define ER_MV_ERROR            8 | ||||||
| #define AC_END              16 | #define ER_AC_END              16 | ||||||
| #define DC_END              32 | #define ER_DC_END              32 | ||||||
| #define MV_END              64 | #define ER_MV_END              64 | ||||||
| //FIXME some prefix?
 |  | ||||||
| 
 | 
 | ||||||
|     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
 | ||||||
|  | |||||||
| @ -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; | ||||||
| } | } | ||||||
|  | |||||||
| @ -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; | ||||||
| } | } | ||||||
|  | |||||||
| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user