mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
init_poc() vs. idr() cleanup
Originally committed as revision 14377 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e16190fa7a
commit
80f8e035ba
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user