|
|
|
@ -474,6 +474,24 @@ static void print_long_term(H264Context *h) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ff_generate_sliding_window_mmcos(H264Context *h) { |
|
|
|
|
MpegEncContext * const s = &h->s; |
|
|
|
|
assert(h->long_ref_count + h->short_ref_count <= h->sps.ref_frame_count); |
|
|
|
|
|
|
|
|
|
if(h->short_ref_count && h->long_ref_count + h->short_ref_count == h->sps.ref_frame_count && |
|
|
|
|
!(FIELD_PICTURE && !s->first_field && s->current_picture_ptr->reference)) { |
|
|
|
|
h->mmco[0].opcode= MMCO_SHORT2UNUSED; |
|
|
|
|
h->mmco[0].short_pic_num= h->short_ref[ h->short_ref_count - 1 ]->frame_num; |
|
|
|
|
h->mmco_index= 1; |
|
|
|
|
if (FIELD_PICTURE) { |
|
|
|
|
h->mmco[0].short_pic_num *= 2; |
|
|
|
|
h->mmco[1].opcode= MMCO_SHORT2UNUSED; |
|
|
|
|
h->mmco[1].short_pic_num= h->mmco[0].short_pic_num + 1; |
|
|
|
|
h->mmco_index= 2; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int ff_h264_execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){ |
|
|
|
|
MpegEncContext * const s = &h->s; |
|
|
|
|
int i, av_uninit(j); |
|
|
|
@ -673,20 +691,7 @@ int ff_h264_decode_ref_pic_marking(H264Context *h, GetBitContext *gb){ |
|
|
|
|
} |
|
|
|
|
h->mmco_index= i; |
|
|
|
|
}else{ |
|
|
|
|
assert(h->long_ref_count + h->short_ref_count <= h->sps.ref_frame_count); |
|
|
|
|
|
|
|
|
|
if(h->short_ref_count && h->long_ref_count + h->short_ref_count == h->sps.ref_frame_count && |
|
|
|
|
!(FIELD_PICTURE && !s->first_field && s->current_picture_ptr->reference)) { |
|
|
|
|
h->mmco[0].opcode= MMCO_SHORT2UNUSED; |
|
|
|
|
h->mmco[0].short_pic_num= h->short_ref[ h->short_ref_count - 1 ]->frame_num; |
|
|
|
|
h->mmco_index= 1; |
|
|
|
|
if (FIELD_PICTURE) { |
|
|
|
|
h->mmco[0].short_pic_num *= 2; |
|
|
|
|
h->mmco[1].opcode= MMCO_SHORT2UNUSED; |
|
|
|
|
h->mmco[1].short_pic_num= h->mmco[0].short_pic_num + 1; |
|
|
|
|
h->mmco_index= 2; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
ff_generate_sliding_window_mmcos(h); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|