else state>>=1; //2->1, 1->0, 0->0
}else if(state<=5){
int v= buf[i] & 0x1F;
- if(v==7 || v==8 || v==9){
+ if(v==6 || v==7 || v==8 || v==9){
if(pc->frame_start_found){
i++;
goto found;
const uint8_t *buf_end = buf + buf_size;
unsigned int pps_id;
unsigned int slice_type;
- int state;
+ int state = -1;
const uint8_t *ptr;
/* set some sane default values */
h->s.avctx= avctx;
h->sei_recovery_frame_cnt = -1;
+ h->sei_dpb_output_delay = 0;
+ h->sei_cpb_removal_delay = -1;
+ h->sei_buffering_period_present = 0;
for(;;) {
int src_length, dst_length, consumed;
switch (h->sei_pic_struct) {
case SEI_PIC_STRUCT_TOP_FIELD:
case SEI_PIC_STRUCT_BOTTOM_FIELD:
- s->repeat_pict = -1;
+ s->repeat_pict = 0;
break;
case SEI_PIC_STRUCT_FRAME:
case SEI_PIC_STRUCT_TOP_BOTTOM:
case SEI_PIC_STRUCT_BOTTOM_TOP:
- s->repeat_pict = 0;
+ s->repeat_pict = 1;
break;
case SEI_PIC_STRUCT_TOP_BOTTOM_TOP:
case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM:
- s->repeat_pict = 1;
+ s->repeat_pict = 2;
break;
case SEI_PIC_STRUCT_FRAME_DOUBLING:
- s->repeat_pict = 2;
+ s->repeat_pict = 3;
break;
case SEI_PIC_STRUCT_FRAME_TRIPLING:
- s->repeat_pict = 4;
+ s->repeat_pict = 5;
break;
default:
- s->repeat_pict = h->s.picture_structure == PICT_FRAME ? 0 : -1;
+ s->repeat_pict = h->s.picture_structure == PICT_FRAME ? 1 : 0;
break;
}
} else {
- s->repeat_pict = h->s.picture_structure == PICT_FRAME ? 0 : -1;
+ s->repeat_pict = h->s.picture_structure == PICT_FRAME ? 1 : 0;
}
return 0; /* no need to evaluate the rest */
}
parse_nal_units(s, avctx, buf, buf_size);
+
+ if (h->sei_cpb_removal_delay >= 0) {
+ s->dts_sync_point = h->sei_buffering_period_present;
+ s->dts_ref_dts_delta = h->sei_cpb_removal_delay;
+ s->pts_dts_delta = h->sei_dpb_output_delay;
+ } else {
+ s->dts_sync_point = INT_MIN;
+ s->dts_ref_dts_delta = INT_MIN;
+ s->pts_dts_delta = INT_MIN;
+ }
}
*poutbuf = buf;
ParseContext *pc = &h->s.parse_context;
av_free(pc->buffer);
+ ff_h264_free_context(h);
}