Use FRAGMENT_DATA struct in pbi
for fragment information.
Change-Id: Idc83625591a1e4ca6f551dcfb7fc0428f6f37351
diff --git a/vp8/decoder/decodframe.c b/vp8/decoder/decodframe.c
index 4632118..6f8282a 100644
--- a/vp8/decoder/decodframe.c
+++ b/vp8/decoder/decodframe.c
@@ -828,8 +828,8 @@
unsigned int partition_idx;
unsigned int fragment_idx;
unsigned int num_token_partitions;
- const unsigned char *first_fragment_end = pbi->fragments[0] +
- pbi->fragment_sizes[0];
+ const unsigned char *first_fragment_end = pbi->fragments.ptrs[0] +
+ pbi->fragments.sizes[0];
TOKEN_PARTITION multi_token_partition =
(TOKEN_PARTITION)vp8_read_literal(&pbi->mbc[8], 2);
@@ -839,10 +839,10 @@
/* Check for partitions within the fragments and unpack the fragments
* so that each fragment pointer points to its corresponding partition. */
- for (fragment_idx = 0; fragment_idx < pbi->num_fragments; ++fragment_idx)
+ for (fragment_idx = 0; fragment_idx < pbi->fragments.count; ++fragment_idx)
{
- unsigned int fragment_size = pbi->fragment_sizes[fragment_idx];
- const unsigned char *fragment_end = pbi->fragments[fragment_idx] +
+ unsigned int fragment_size = pbi->fragments.sizes[fragment_idx];
+ const unsigned char *fragment_end = pbi->fragments.ptrs[fragment_idx] +
fragment_size;
/* Special case for handling the first partition since we have already
* read its size. */
@@ -850,16 +850,16 @@
{
/* Size of first partition + token partition sizes element */
ptrdiff_t ext_first_part_size = token_part_sizes -
- pbi->fragments[0] + 3 * (num_token_partitions - 1);
+ pbi->fragments.ptrs[0] + 3 * (num_token_partitions - 1);
fragment_size -= (unsigned int)ext_first_part_size;
if (fragment_size > 0)
{
- pbi->fragment_sizes[0] = (unsigned int)ext_first_part_size;
+ pbi->fragments.sizes[0] = (unsigned int)ext_first_part_size;
/* The fragment contains an additional partition. Move to
* next. */
fragment_idx++;
- pbi->fragments[fragment_idx] = pbi->fragments[0] +
- pbi->fragment_sizes[0];
+ pbi->fragments.ptrs[fragment_idx] = pbi->fragments.ptrs[0] +
+ pbi->fragments.sizes[0];
}
}
/* Split the chunk into partitions read from the bitstream */
@@ -868,12 +868,12 @@
ptrdiff_t partition_size = read_available_partition_size(
pbi,
token_part_sizes,
- pbi->fragments[fragment_idx],
+ pbi->fragments.ptrs[fragment_idx],
first_fragment_end,
fragment_end,
fragment_idx - 1,
num_token_partitions);
- pbi->fragment_sizes[fragment_idx] = (unsigned int)partition_size;
+ pbi->fragments.sizes[fragment_idx] = (unsigned int)partition_size;
fragment_size -= (unsigned int)partition_size;
assert(fragment_idx <= num_token_partitions);
if (fragment_size > 0)
@@ -881,19 +881,19 @@
/* The fragment contains an additional partition.
* Move to next. */
fragment_idx++;
- pbi->fragments[fragment_idx] =
- pbi->fragments[fragment_idx - 1] + partition_size;
+ pbi->fragments.ptrs[fragment_idx] =
+ pbi->fragments.ptrs[fragment_idx - 1] + partition_size;
}
}
}
- pbi->num_fragments = num_token_partitions + 1;
+ pbi->fragments.count = num_token_partitions + 1;
- for (partition_idx = 1; partition_idx < pbi->num_fragments; ++partition_idx)
+ for (partition_idx = 1; partition_idx < pbi->fragments.count; ++partition_idx)
{
if (vp8dx_start_decode(bool_decoder,
- pbi->fragments[partition_idx],
- pbi->fragment_sizes[partition_idx]))
+ pbi->fragments.ptrs[partition_idx],
+ pbi->fragments.sizes[partition_idx]))
vpx_internal_error(&pbi->common.error, VPX_CODEC_MEM_ERROR,
"Failed to allocate bool decoder %d",
partition_idx);
@@ -983,8 +983,8 @@
vp8_reader *const bc = & pbi->mbc[8];
VP8_COMMON *const pc = & pbi->common;
MACROBLOCKD *const xd = & pbi->mb;
- const unsigned char *data = pbi->fragments[0];
- const unsigned char *data_end = data + pbi->fragment_sizes[0];
+ const unsigned char *data = pbi->fragments.ptrs[0];
+ const unsigned char *data_end = data + pbi->fragments.sizes[0];
ptrdiff_t first_partition_length_in_bytes;
int i, j, k, l;
diff --git a/vp8/decoder/onyxd_if.c b/vp8/decoder/onyxd_if.c
index cb51c2b..6f473de 100644
--- a/vp8/decoder/onyxd_if.c
+++ b/vp8/decoder/onyxd_if.c
@@ -282,7 +282,7 @@
int check_fragments_for_errors(VP8D_COMP *pbi)
{
if (!pbi->ec_active &&
- pbi->num_fragments <= 1 && pbi->fragment_sizes[0] == 0)
+ pbi->fragments.count <= 1 && pbi->fragments.sizes[0] == 0)
{
VP8_COMMON *cm = &pbi->common;
diff --git a/vp8/decoder/onyxd_int.h b/vp8/decoder/onyxd_int.h
index ff9ef0e..290c212 100644
--- a/vp8/decoder/onyxd_int.h
+++ b/vp8/decoder/onyxd_int.h
@@ -54,10 +54,7 @@
VP8D_CONFIG oxcf;
-
- const unsigned char *fragments[MAX_PARTITIONS];
- unsigned int fragment_sizes[MAX_PARTITIONS];
- unsigned int num_fragments;
+ FRAGMENT_DATA fragments;
#if CONFIG_MULTITHREAD
/* variable for threading */
@@ -103,7 +100,6 @@
#endif
int ec_enabled;
int ec_active;
- int input_fragments;
int decoded_key_frame;
int independent_partitions;
int frame_corrupt_residual;
diff --git a/vp8/vp8_dx_iface.c b/vp8/vp8_dx_iface.c
index 51fb74a..598abbd 100644
--- a/vp8/vp8_dx_iface.c
+++ b/vp8/vp8_dx_iface.c
@@ -598,13 +598,7 @@
}
/* update the pbi fragment data */
- ctx->pbi->num_fragments = ctx->fragments.count;
- ctx->pbi->input_fragments = ctx->fragments.enabled;
- vpx_memcpy(ctx->pbi->fragments, ctx->fragments.ptrs,
- sizeof(ctx->fragments.ptrs));
- vpx_memcpy(ctx->pbi->fragment_sizes, ctx->fragments.sizes,
- sizeof(ctx->fragments.sizes));
-
+ ctx->pbi->fragments = ctx->fragments;
ctx->user_priv = user_priv;
if (vp8dx_receive_compressed_data(ctx->pbi, data_sz, data, deadline))