uint32_t b;
int lzb = -1;
- for(b = 0; !b && !bs_eof(bs); lzb++)
+ for(b = 0; !b && !bs_eof(bs) && lzb < 32; lzb++)
b = read_bits1(bs);
if (lzb < 0)
int32_t
read_golomb_se(bitstream_t *bs)
{
- uint32_t v, pos;
+ uint32_t v;
v = read_golomb_ue(bs);
if(v == 0)
return 0;
- pos = v & 1;
- v = (v + 1) >> 1;
- return pos ? v : -v;
+ return (v & 1) ? ((v + 1) >> 1) : -(v >> 1);
}
if (!read_bits1(bs)) /* We need timing info */
return 0;
+ if (remaining_bits(bs) < 65)
+ return 0;
+
sps->units_in_tick = read_bits(bs, 32);
sps->time_scale = read_bits(bs, 32);
sps->fixed_rate = read_bits1(bs);
return -1;
if (profile_idc >= 100){ //high profile
- if(read_golomb_ue(bs) == 3) //chroma_format_idc
- read_bits1(bs); //residual_color_transform_flag
- read_golomb_ue(bs); //bit_depth_luma_minus8
- read_golomb_ue(bs); //bit_depth_chroma_minus8
- read_bits1(bs);
+ tmp = read_golomb_ue(bs);
+ if (tmp == 3) //chroma_format_idc
+ read_bits1(bs); //residual_color_transform_flag
+ read_golomb_ue(bs); //bit_depth_luma_minus8
+ read_golomb_ue(bs); //bit_depth_chroma_minus8
+ read_bits1(bs); //transform_bypass
if(read_bits1(bs)) {
/* Scaling matrices */
}
max_frame_num_bits = read_golomb_ue(bs) + 4;
- poc_type = read_golomb_ue(bs);
-
- if(poc_type == 0){ //FIXME #define
+ poc_type = read_golomb_ue(bs); // pic_order_cnt_type
+
+ if(poc_type == 0){
read_golomb_ue(bs);
- } else if(poc_type == 1){//FIXME #define
+ } else if(poc_type == 1){
skip_bits1(bs);
read_golomb_se(bs);
read_golomb_se(bs);