mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
exporting field_select/ref_index values
Originally committed as revision 3035 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
8857a7ef32
commit
7c4f71c428
@ -577,12 +577,13 @@ int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my){
|
|||||||
} else if(IS_INTERLACED(colocated_mb_type)){
|
} else if(IS_INTERLACED(colocated_mb_type)){
|
||||||
s->mv_type = MV_TYPE_FIELD;
|
s->mv_type = MV_TYPE_FIELD;
|
||||||
for(i=0; i<2; i++){
|
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){
|
if(s->top_field_first){
|
||||||
time_pp= s->pp_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 - s->p_field_select_table[i][mb_index] + i;
|
time_pb= s->pb_field_time - field_select + i;
|
||||||
}else{
|
}else{
|
||||||
time_pp= s->pp_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 + s->p_field_select_table[i][mb_index] - 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][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;
|
s->mv[0][i][1] = s->p_field_mv_table[i][0][mb_index][1]*time_pb/time_pp + my;
|
||||||
@ -631,10 +632,13 @@ void ff_h263_update_motion_val(MpegEncContext * s){
|
|||||||
for(i=0; i<2; i++){
|
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][0]= s->mv[0][i][0];
|
||||||
s->p_field_mv_table[i][0][mb_xy][1]= s->mv[0][i][1];
|
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 */
|
/* 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][0] = motion_x;
|
||||||
s->current_picture.motion_val[0][xy][1] = motion_y;
|
s->current_picture.motion_val[0][xy][1] = motion_y;
|
||||||
|
@ -2341,11 +2341,13 @@ static int mpeg_decode_slice(Mpeg1Context *s1, int mb_y,
|
|||||||
motion_x = s->mv[dir][i][0];
|
motion_x = s->mv[dir][i][0];
|
||||||
motion_y = s->mv[dir][i][1];
|
motion_y = s->mv[dir][i][1];
|
||||||
}
|
}
|
||||||
|
|
||||||
s->current_picture.motion_val[dir][xy ][0] = motion_x;
|
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] = motion_y;
|
||||||
s->current_picture.motion_val[dir][xy + 1][0] = motion_x;
|
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.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;
|
xy += wrap;
|
||||||
}
|
}
|
||||||
|
@ -307,7 +307,7 @@ static void copy_picture_attributes(MpegEncContext *s, AVFrame *dst, AVFrame *sr
|
|||||||
memcpy(dst->motion_val[i], src->motion_val[i], 2*stride*height*sizeof(int16_t));
|
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]){
|
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 @@ static int alloc_picture(MpegEncContext *s, Picture *pic, int shared){
|
|||||||
for(i=0; i<2; i++){
|
for(i=0; i<2; i++){
|
||||||
CHECKED_ALLOCZ(pic->motion_val_base[i], 2 * (b4_array_size+2) * sizeof(int16_t))
|
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;
|
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;
|
pic->motion_subsample_log2= 2;
|
||||||
}else if(s->out_format == FMT_H263 || s->encoding || (s->avctx->debug&FF_DEBUG_MV) || (s->avctx->debug_mv)){
|
}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++){
|
for(i=0; i<2; i++){
|
||||||
CHECKED_ALLOCZ(pic->motion_val_base[i], 2 * (b8_array_size+2) * sizeof(int16_t))
|
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;
|
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;
|
pic->motion_subsample_log2= 3;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user