if (!dec->bs_ptr)
return;
- for (i = 0; i < num_buffers; ++i) {
- struct rvid_buffer *buf = &dec->bs_buffers[dec->cur_buffer];
- unsigned new_size = dec->bs_size + sizes[i];
-
- if (new_size > buf->res->buf->size) {
- dec->ws->buffer_unmap(dec->ws, buf->res->buf);
- dec->bs_ptr = NULL;
- if (!si_vid_resize_buffer(dec->screen, &dec->cs, buf, new_size, NULL)) {
- RVID_ERR("Can't resize bitstream buffer!");
- return;
- }
+ unsigned long total_bs_size = dec->bs_size;
+ for (i = 0; i < num_buffers; ++i)
+ total_bs_size += sizes[i];
+
+ struct rvid_buffer *buf = &dec->bs_buffers[dec->cur_buffer];
+
+ if (total_bs_size > buf->res->buf->size) {
+ dec->ws->buffer_unmap(dec->ws, buf->res->buf);
+ dec->bs_ptr = NULL;
+ if (!si_vid_resize_buffer(dec->screen, &dec->cs, buf, total_bs_size, NULL)) {
+ RVID_ERR("Can't resize bitstream buffer!");
+ return;
+ }
- dec->bs_ptr = dec->ws->buffer_map(dec->ws, buf->res->buf, &dec->cs,
- PIPE_MAP_WRITE | RADEON_MAP_TEMPORARY);
- if (!dec->bs_ptr)
- return;
+ dec->bs_ptr = dec->ws->buffer_map(dec->ws, buf->res->buf, &dec->cs,
+ PIPE_MAP_WRITE | RADEON_MAP_TEMPORARY);
+ if (!dec->bs_ptr)
+ return;
- dec->bs_ptr += dec->bs_size;
- }
+ dec->bs_ptr += dec->bs_size;
+ }
+ for (i = 0; i < num_buffers; ++i) {
memcpy(dec->bs_ptr, buffers[i], sizes[i]);
dec->bs_size += sizes[i];
dec->bs_ptr += sizes[i];