|
|
|
@ -3304,6 +3304,9 @@ static void idr(H264Context *h){ |
|
|
|
|
} |
|
|
|
|
h->short_ref_count=0; |
|
|
|
|
h->prev_frame_num= 0; |
|
|
|
|
h->prev_frame_num_offset= 0; |
|
|
|
|
h->prev_poc_msb= |
|
|
|
|
h->prev_poc_lsb= 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* forget old pics after a seek */ |
|
|
|
@ -3696,23 +3699,14 @@ static int init_poc(H264Context *h){ |
|
|
|
|
const int max_frame_num= 1<<h->sps.log2_max_frame_num; |
|
|
|
|
int field_poc[2]; |
|
|
|
|
|
|
|
|
|
if(h->nal_unit_type == NAL_IDR_SLICE){ |
|
|
|
|
h->frame_num_offset= 0; |
|
|
|
|
}else{ |
|
|
|
|
if(h->frame_num < h->prev_frame_num) |
|
|
|
|
h->frame_num_offset= h->prev_frame_num_offset + max_frame_num; |
|
|
|
|
else |
|
|
|
|
h->frame_num_offset= h->prev_frame_num_offset; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(h->sps.poc_type==0){ |
|
|
|
|
const int max_poc_lsb= 1<<h->sps.log2_max_poc_lsb; |
|
|
|
|
|
|
|
|
|
if(h->nal_unit_type == NAL_IDR_SLICE){ |
|
|
|
|
h->prev_poc_msb= |
|
|
|
|
h->prev_poc_lsb= 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (h->poc_lsb < h->prev_poc_lsb && h->prev_poc_lsb - h->poc_lsb >= max_poc_lsb/2) |
|
|
|
|
h->poc_msb = h->prev_poc_msb + max_poc_lsb; |
|
|
|
|
else if(h->poc_lsb > h->prev_poc_lsb && h->prev_poc_lsb - h->poc_lsb < -max_poc_lsb/2) |
|
|
|
@ -3760,12 +3754,8 @@ static int init_poc(H264Context *h){ |
|
|
|
|
field_poc[1] += h->delta_poc[1]; |
|
|
|
|
}else{ |
|
|
|
|
int poc; |
|
|
|
|
if(h->nal_unit_type == NAL_IDR_SLICE){ |
|
|
|
|
poc= 0; |
|
|
|
|
}else{ |
|
|
|
|
if(h->nal_ref_idc) poc= 2*(h->frame_num_offset + h->frame_num); |
|
|
|
|
else poc= 2*(h->frame_num_offset + h->frame_num) - 1; |
|
|
|
|
} |
|
|
|
|
field_poc[0]= poc; |
|
|
|
|
field_poc[1]= poc; |
|
|
|
|
} |
|
|
|
|