goto found;
}
}else if(v==1 || v==2 || v==5){
+ state+=8;
+ continue;
+ }
+ state= 7;
+ }else{
+ h->parse_history[h->parse_history_count++]= buf[i];
+ if(h->parse_history_count>3){
+ unsigned int mb, last_mb= h->parse_last_mb;
+ GetBitContext gb;
+
+ init_get_bits(&gb, h->parse_history, 8*h->parse_history_count);
+ h->parse_history_count=0;
+ mb= get_ue_golomb_long(&gb);
+ last_mb= h->parse_last_mb;
+ h->parse_last_mb= mb;
if(pc->frame_start_found){
- state+=8;
- continue;
+ if(mb <= last_mb)
+ goto found;
}else
pc->frame_start_found = 1;
+ state= 7;
}
- state= 7;
- }else{
- if(buf[i] & 0x80)
- goto found;
- state= 7;
}
}
pc->state= state;
pc->frame_start_found= 0;
if(h->is_avc)
return next_avc;
- return i-(state&5);
+ return i-(state&5) - 3*(state>7);
}
/**
for(;;) {
int src_length, dst_length, consumed;
- buf = ff_find_start_code(buf, buf_end, &state);
+ buf = avpriv_mpv_find_start_code(buf, buf_end, &state);
if(buf >= buf_end)
break;
--buf;
s->key_frame = 1;
/* fall through */
case NAL_SLICE:
- get_ue_golomb(&h->s.gb); // skip first_mb_in_slice
+ get_ue_golomb_long(&h->s.gb); // skip first_mb_in_slice
slice_type = get_ue_golomb_31(&h->s.gb);
s->pict_type = golomb_to_pict_type[slice_type % 5];
if (h->sei_recovery_frame_cnt >= 0) {
}
AVCodecParser ff_h264_parser = {
- { CODEC_ID_H264 },
- sizeof(H264Context),
- init,
- h264_parse,
- close,
- h264_split,
+ .codec_ids = { CODEC_ID_H264 },
+ .priv_data_size = sizeof(H264Context),
+ .parser_init = init,
+ .parser_parse = h264_parse,
+ .parser_close = close,
+ .split = h264_split,
};