if(!(s->mb_type[mb_index]&MB_TYPE_INTRA)) continue;
if(IS_INTER(s->current_picture.mb_type[mb_index])) continue;
static void guess_dc(MpegEncContext *s, int16_t *dc, int w, int h, int stride, int is_luma){    int b_x, b_y;    for(b_y=0; b_y<h; b_y++){        for(b_x=0; b_x<w; b_x++){            int color[4]={1024,1024,1024,1024};            int distance[4]={9999,9999,9999,9999};            int mb_index, error, j;            int64_t guess, weight_sum;                        mb_index= (b_x>>is_luma) + (b_y>>is_luma)*s->mb_width;                        error= s->error_status_table[mb_index];                        if(!(s->mb_type[mb_index]&MB_TYPE_INTRA)) continue; //inter            if(!(error&DC_ERROR)) continue;           //dc-ok                        /* right block */            for(j=b_x+1; j<w; j++){                int mb_index_j= (j>>is_luma) + (b_y>>is_luma)*s->mb_width;                int error_j= s->error_status_table[mb_index_j];                int intra_j= s->mb_type[mb_index_j]&MB_TYPE_INTRA;                if(intra_j==0 || !(error_j&DC_ERROR)){                    color[0]= dc[j + b_y*stride];                    distance[0]= j-b_x;                    break;                }            }                        /* left block */            for(j=b_x-1; j>=0; j--){                int mb_index_j= (j>>is_luma) + (b_y>>is_luma)*s->mb_width;                int error_j= s->error_status_table[mb_index_j];                int intra_j= s->mb_type[mb_index_j]&MB_TYPE_INTRA;                if(intra_j==0 || !(error_j&DC_ERROR)){                    color[1]= dc[j + b_y*stride];                    distance[1]= b_x-j;                    break;                }            }            /* bottom block */            for(j=b_y+1; j<h; j++){                int mb_index_j= (b_x>>is_luma) + (j>>is_luma)*s->mb_width;                int error_j= s->error_status_table[mb_index_j];                int intra_j= s->mb_type[mb_index_j]&MB_TYPE_INTRA;                if(intra_j==0 || !(error_j&DC_ERROR)){                    color[2]= dc[b_x + j*stride];                    distance[2]= j-b_y;                    break;                }            }            /* top block */            for(j=b_y-1; j>=0; j--){                int mb_index_j= (b_x>>is_luma) + (j>>is_luma)*s->mb_width;                int error_j= s->error_status_table[mb_index_j];                int intra_j= s->mb_type[mb_index_j]&MB_TYPE_INTRA;                if(intra_j==0 || !(error_j&DC_ERROR)){                    color[3]= dc[b_x + j*stride];                    distance[3]= b_y-j;                    break;                }            }                        weight_sum=0;            guess=0;            for(j=0; j<4; j++){                int64_t weight= 256*256*256*16/distance[j];                guess+= weight*(int64_t)color[j];                weight_sum+= weight;            }            guess= (guess + weight_sum/2) / weight_sum;            dc[b_x + b_y*stride]= guess;        }    }}