{
unsigned int in_slice_data_bit_offset = slice_param->slice_data_bit_offset;
unsigned int out_slice_data_bit_offset;
- unsigned int i, n, buf_size, data_size;
+ unsigned int i, j, buf_size, data_size, header_size;
uint8_t *buf;
int ret;
- buf_size = slice_param->slice_data_bit_offset / 8;
- data_size = slice_param->slice_data_size - slice_param->slice_data_offset;
+ header_size = slice_param->slice_data_bit_offset / 8;
+ data_size = slice_param->slice_data_size - slice_param->slice_data_offset;
+ buf_size = (header_size * 4 + 2) / 3; /* max possible header size */
if (buf_size > data_size)
buf_size = data_size;
);
assert(ret == 0);
- for (i = 2, n = 0; i < buf_size; i++) {
- if (!buf[i - 2] && !buf[i - 1] && buf[i] == 3)
- i += 2, n++;
+ for (i = 2, j = 2; i < buf_size && j < header_size; i++, j++) {
+ if (buf[i] == 0x03 && buf[i - 1] == 0x00 && buf[i - 2] == 0x00)
+ i += 2, j++;
}
- out_slice_data_bit_offset = in_slice_data_bit_offset + n * 8;
+ out_slice_data_bit_offset = in_slice_data_bit_offset % 8 + i * 8;
if (mode_flag == ENTROPY_CABAC)
out_slice_data_bit_offset = ALIGN(out_slice_data_bit_offset, 0x8);