# HG changeset patch # User michael # Date 1082345603 0 # Node ID d10578f7fd40fedd6675f1361c6bccc41259a9f5 # Parent b306574523ad2c9033d98f6acf798387c514384b exporting field_select/ref_index values diff -r b306574523ad -r d10578f7fd40 h263.c --- a/h263.c Sun Apr 18 18:30:05 2004 +0000 +++ b/h263.c Mon Apr 19 03:33:23 2004 +0000 @@ -577,12 +577,13 @@ } else if(IS_INTERLACED(colocated_mb_type)){ s->mv_type = MV_TYPE_FIELD; for(i=0; i<2; i++){ + int field_select= s->next_picture.ref_index[0][s->block_index[2*i]]; if(s->top_field_first){ - time_pp= s->pp_field_time - s->p_field_select_table[i][mb_index] + i; - time_pb= s->pb_field_time - s->p_field_select_table[i][mb_index] + i; + time_pp= s->pp_field_time - field_select + i; + time_pb= s->pb_field_time - field_select + i; }else{ - time_pp= s->pp_field_time + s->p_field_select_table[i][mb_index] - i; - time_pb= s->pb_field_time + s->p_field_select_table[i][mb_index] - i; + time_pp= s->pp_field_time + field_select - i; + time_pb= s->pb_field_time + field_select - i; } s->mv[0][i][0] = s->p_field_mv_table[i][0][mb_index][0]*time_pb/time_pp + mx; s->mv[0][i][1] = s->p_field_mv_table[i][0][mb_index][1]*time_pb/time_pp + my; @@ -631,10 +632,13 @@ for(i=0; i<2; i++){ s->p_field_mv_table[i][0][mb_xy][0]= s->mv[0][i][0]; s->p_field_mv_table[i][0][mb_xy][1]= s->mv[0][i][1]; - s->p_field_select_table[i][mb_xy]= s->field_select[0][i]; } + s->current_picture.ref_index[0][xy ]= + s->current_picture.ref_index[0][xy + 1]= s->field_select[0][0]; + s->current_picture.ref_index[0][xy + wrap ]= + s->current_picture.ref_index[0][xy + wrap + 1]= s->field_select[0][1]; } - + /* no update if 8X8 because it has been done during parsing */ s->current_picture.motion_val[0][xy][0] = motion_x; s->current_picture.motion_val[0][xy][1] = motion_y; diff -r b306574523ad -r d10578f7fd40 mpeg12.c --- a/mpeg12.c Sun Apr 18 18:30:05 2004 +0000 +++ b/mpeg12.c Mon Apr 19 03:33:23 2004 +0000 @@ -2341,11 +2341,13 @@ motion_x = s->mv[dir][i][0]; motion_y = s->mv[dir][i][1]; } - + s->current_picture.motion_val[dir][xy ][0] = motion_x; s->current_picture.motion_val[dir][xy ][1] = motion_y; s->current_picture.motion_val[dir][xy + 1][0] = motion_x; s->current_picture.motion_val[dir][xy + 1][1] = motion_y; + s->current_picture.ref_index [dir][xy ]= + s->current_picture.ref_index [dir][xy + 1]= s->field_select[dir][i]; } xy += wrap; } diff -r b306574523ad -r d10578f7fd40 mpegvideo.c --- a/mpegvideo.c Sun Apr 18 18:30:05 2004 +0000 +++ b/mpegvideo.c Mon Apr 19 03:33:23 2004 +0000 @@ -307,7 +307,7 @@ memcpy(dst->motion_val[i], src->motion_val[i], 2*stride*height*sizeof(int16_t)); } if(src->ref_index[i] && src->ref_index[i] != dst->ref_index[i]){ - memcpy(dst->ref_index[i], src->ref_index[i], s->mb_stride*s->mb_height*sizeof(int8_t)); //FIXME init this too + memcpy(dst->ref_index[i], src->ref_index[i], s->b8_stride*2*s->mb_height*sizeof(int8_t)); } } } @@ -369,14 +369,14 @@ for(i=0; i<2; i++){ CHECKED_ALLOCZ(pic->motion_val_base[i], 2 * (b4_array_size+2) * sizeof(int16_t)) pic->motion_val[i]= pic->motion_val_base[i]+2; - CHECKED_ALLOCZ(pic->ref_index[i] , b8_array_size * sizeof(uint8_t)) + CHECKED_ALLOCZ(pic->ref_index[i], b8_array_size * sizeof(uint8_t)) } pic->motion_subsample_log2= 2; }else if(s->out_format == FMT_H263 || s->encoding || (s->avctx->debug&FF_DEBUG_MV) || (s->avctx->debug_mv)){ for(i=0; i<2; i++){ CHECKED_ALLOCZ(pic->motion_val_base[i], 2 * (b8_array_size+2) * sizeof(int16_t)) pic->motion_val[i]= pic->motion_val_base[i]+2; - CHECKED_ALLOCZ(pic->ref_index[i], mb_array_size * sizeof(int8_t)) + CHECKED_ALLOCZ(pic->ref_index[i], b8_array_size * sizeof(uint8_t)) } pic->motion_subsample_log2= 3; }