summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gen6_mfd.c56
-rw-r--r--src/gen75_mfd.c56
-rw-r--r--src/gen7_mfd.c56
-rw-r--r--src/gen8_mfd.c56
4 files changed, 144 insertions, 80 deletions
diff --git a/src/gen6_mfd.c b/src/gen6_mfd.c
index 44c9717b..f0d8c99f 100644
--- a/src/gen6_mfd.c
+++ b/src/gen6_mfd.c
@@ -1287,7 +1287,10 @@ gen6_mfd_vc1_decode_init(VADriverContextP ctx,
gen6_mfd_context->mpr_row_store_scratch_buffer.valid = 0;
- gen6_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value;
+ if (picture_type == GEN6_VC1_SKIPPED_PICTURE)
+ gen6_mfd_context->bitplane_read_buffer.valid = 1;
+ else
+ gen6_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value;
dri_bo_unreference(gen6_mfd_context->bitplane_read_buffer.bo);
if (gen6_mfd_context->bitplane_read_buffer.valid) {
@@ -1297,9 +1300,6 @@ gen6_mfd_vc1_decode_init(VADriverContextP ctx,
int src_w, src_h;
uint8_t *src = NULL, *dst = NULL;
- assert(decode_state->bit_plane->buffer);
- src = decode_state->bit_plane->buffer;
-
bo = dri_bo_alloc(i965->intel.bufmgr,
"VC-1 Bitplane",
bitplane_width * height_in_mbs,
@@ -1311,28 +1311,44 @@ gen6_mfd_vc1_decode_init(VADriverContextP ctx,
assert(bo->virtual);
dst = bo->virtual;
- for (src_h = 0; src_h < height_in_mbs; src_h++) {
- for (src_w = 0; src_w < width_in_mbs; src_w++) {
- int src_index, dst_index;
- int src_shift;
- uint8_t src_value;
-
- src_index = (src_h * width_in_mbs + src_w) / 2;
- src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4;
- src_value = ((src[src_index] >> src_shift) & 0xf);
+ if (picture_type == GEN6_VC1_SKIPPED_PICTURE) {
+ for (src_h = 0; src_h < height_in_mbs; src_h++) {
+ for (src_w = 0; src_w < width_in_mbs; src_w++) {
+ int dst_index;
+ uint8_t src_value = 0x2;
- if (picture_type == GEN6_VC1_SKIPPED_PICTURE) {
- src_value |= 0x2;
+ dst_index = src_w / 2;
+ dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
}
- dst_index = src_w / 2;
- dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
+ if (src_w & 1)
+ dst[src_w / 2] >>= 4;
+
+ dst += bitplane_width;
}
+ } else {
+ assert(decode_state->bit_plane->buffer);
+ src = decode_state->bit_plane->buffer;
- if (src_w & 1)
- dst[src_w / 2] >>= 4;
+ for (src_h = 0; src_h < height_in_mbs; src_h++) {
+ for (src_w = 0; src_w < width_in_mbs; src_w++) {
+ int src_index, dst_index;
+ int src_shift;
+ uint8_t src_value;
- dst += bitplane_width;
+ src_index = (src_h * width_in_mbs + src_w) / 2;
+ src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4;
+ src_value = ((src[src_index] >> src_shift) & 0xf);
+
+ dst_index = src_w / 2;
+ dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
+ }
+
+ if (src_w & 1)
+ dst[src_w / 2] >>= 4;
+
+ dst += bitplane_width;
+ }
}
dri_bo_unmap(bo);
diff --git a/src/gen75_mfd.c b/src/gen75_mfd.c
index 3f31d5e8..a27bf18c 100644
--- a/src/gen75_mfd.c
+++ b/src/gen75_mfd.c
@@ -1612,7 +1612,10 @@ gen75_mfd_vc1_decode_init(VADriverContextP ctx,
gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0;
- gen7_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value;
+ if (picture_type == GEN7_VC1_SKIPPED_PICTURE)
+ gen7_mfd_context->bitplane_read_buffer.valid = 1;
+ else
+ gen7_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value;
dri_bo_unreference(gen7_mfd_context->bitplane_read_buffer.bo);
if (gen7_mfd_context->bitplane_read_buffer.valid) {
@@ -1622,9 +1625,6 @@ gen75_mfd_vc1_decode_init(VADriverContextP ctx,
int src_w, src_h;
uint8_t *src = NULL, *dst = NULL;
- assert(decode_state->bit_plane->buffer);
- src = decode_state->bit_plane->buffer;
-
bo = dri_bo_alloc(i965->intel.bufmgr,
"VC-1 Bitplane",
bitplane_width * height_in_mbs,
@@ -1636,28 +1636,44 @@ gen75_mfd_vc1_decode_init(VADriverContextP ctx,
assert(bo->virtual);
dst = bo->virtual;
- for (src_h = 0; src_h < height_in_mbs; src_h++) {
- for (src_w = 0; src_w < width_in_mbs; src_w++) {
- int src_index, dst_index;
- int src_shift;
- uint8_t src_value;
-
- src_index = (src_h * width_in_mbs + src_w) / 2;
- src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4;
- src_value = ((src[src_index] >> src_shift) & 0xf);
+ if (picture_type == GEN7_VC1_SKIPPED_PICTURE) {
+ for (src_h = 0; src_h < height_in_mbs; src_h++) {
+ for (src_w = 0; src_w < width_in_mbs; src_w++) {
+ int dst_index;
+ uint8_t src_value = 0x2;
- if (picture_type == GEN7_VC1_SKIPPED_PICTURE) {
- src_value |= 0x2;
+ dst_index = src_w / 2;
+ dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
}
- dst_index = src_w / 2;
- dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
+ if (src_w & 1)
+ dst[src_w / 2] >>= 4;
+
+ dst += bitplane_width;
}
+ } else {
+ assert(decode_state->bit_plane->buffer);
+ src = decode_state->bit_plane->buffer;
- if (src_w & 1)
- dst[src_w / 2] >>= 4;
+ for (src_h = 0; src_h < height_in_mbs; src_h++) {
+ for (src_w = 0; src_w < width_in_mbs; src_w++) {
+ int src_index, dst_index;
+ int src_shift;
+ uint8_t src_value;
- dst += bitplane_width;
+ src_index = (src_h * width_in_mbs + src_w) / 2;
+ src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4;
+ src_value = ((src[src_index] >> src_shift) & 0xf);
+
+ dst_index = src_w / 2;
+ dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
+ }
+
+ if (src_w & 1)
+ dst[src_w / 2] >>= 4;
+
+ dst += bitplane_width;
+ }
}
dri_bo_unmap(bo);
diff --git a/src/gen7_mfd.c b/src/gen7_mfd.c
index 1bf6500c..1358db60 100644
--- a/src/gen7_mfd.c
+++ b/src/gen7_mfd.c
@@ -1347,7 +1347,10 @@ gen7_mfd_vc1_decode_init(VADriverContextP ctx,
gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0;
- gen7_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value;
+ if (picture_type == GEN7_VC1_SKIPPED_PICTURE)
+ gen7_mfd_context->bitplane_read_buffer.valid = 1;
+ else
+ gen7_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value;
dri_bo_unreference(gen7_mfd_context->bitplane_read_buffer.bo);
if (gen7_mfd_context->bitplane_read_buffer.valid) {
@@ -1357,9 +1360,6 @@ gen7_mfd_vc1_decode_init(VADriverContextP ctx,
int src_w, src_h;
uint8_t *src = NULL, *dst = NULL;
- assert(decode_state->bit_plane->buffer);
- src = decode_state->bit_plane->buffer;
-
bo = dri_bo_alloc(i965->intel.bufmgr,
"VC-1 Bitplane",
bitplane_width * height_in_mbs,
@@ -1371,28 +1371,44 @@ gen7_mfd_vc1_decode_init(VADriverContextP ctx,
assert(bo->virtual);
dst = bo->virtual;
- for (src_h = 0; src_h < height_in_mbs; src_h++) {
- for (src_w = 0; src_w < width_in_mbs; src_w++) {
- int src_index, dst_index;
- int src_shift;
- uint8_t src_value;
-
- src_index = (src_h * width_in_mbs + src_w) / 2;
- src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4;
- src_value = ((src[src_index] >> src_shift) & 0xf);
+ if (picture_type == GEN7_VC1_SKIPPED_PICTURE) {
+ for (src_h = 0; src_h < height_in_mbs; src_h++) {
+ for (src_w = 0; src_w < width_in_mbs; src_w++) {
+ int dst_index;
+ uint8_t src_value = 0x2;
- if (picture_type == GEN7_VC1_SKIPPED_PICTURE) {
- src_value |= 0x2;
+ dst_index = src_w / 2;
+ dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
}
- dst_index = src_w / 2;
- dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
+ if (src_w & 1)
+ dst[src_w / 2] >>= 4;
+
+ dst += bitplane_width;
}
+ } else {
+ assert(decode_state->bit_plane->buffer);
+ src = decode_state->bit_plane->buffer;
- if (src_w & 1)
- dst[src_w / 2] >>= 4;
+ for (src_h = 0; src_h < height_in_mbs; src_h++) {
+ for (src_w = 0; src_w < width_in_mbs; src_w++) {
+ int src_index, dst_index;
+ int src_shift;
+ uint8_t src_value;
- dst += bitplane_width;
+ src_index = (src_h * width_in_mbs + src_w) / 2;
+ src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4;
+ src_value = ((src[src_index] >> src_shift) & 0xf);
+
+ dst_index = src_w / 2;
+ dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
+ }
+
+ if (src_w & 1)
+ dst[src_w / 2] >>= 4;
+
+ dst += bitplane_width;
+ }
}
dri_bo_unmap(bo);
diff --git a/src/gen8_mfd.c b/src/gen8_mfd.c
index 124f72e4..1ef2525e 100644
--- a/src/gen8_mfd.c
+++ b/src/gen8_mfd.c
@@ -1391,7 +1391,10 @@ gen8_mfd_vc1_decode_init(VADriverContextP ctx,
gen7_mfd_context->mpr_row_store_scratch_buffer.valid = 0;
- gen7_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value;
+ if (picture_type == GEN7_VC1_SKIPPED_PICTURE)
+ gen7_mfd_context->bitplane_read_buffer.valid = 1;
+ else
+ gen7_mfd_context->bitplane_read_buffer.valid = !!pic_param->bitplane_present.value;
dri_bo_unreference(gen7_mfd_context->bitplane_read_buffer.bo);
if (gen7_mfd_context->bitplane_read_buffer.valid) {
@@ -1401,9 +1404,6 @@ gen8_mfd_vc1_decode_init(VADriverContextP ctx,
int src_w, src_h;
uint8_t *src = NULL, *dst = NULL;
- assert(decode_state->bit_plane->buffer);
- src = decode_state->bit_plane->buffer;
-
bo = dri_bo_alloc(i965->intel.bufmgr,
"VC-1 Bitplane",
bitplane_width * height_in_mbs,
@@ -1415,28 +1415,44 @@ gen8_mfd_vc1_decode_init(VADriverContextP ctx,
assert(bo->virtual);
dst = bo->virtual;
- for (src_h = 0; src_h < height_in_mbs; src_h++) {
- for (src_w = 0; src_w < width_in_mbs; src_w++) {
- int src_index, dst_index;
- int src_shift;
- uint8_t src_value;
-
- src_index = (src_h * width_in_mbs + src_w) / 2;
- src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4;
- src_value = ((src[src_index] >> src_shift) & 0xf);
+ if (picture_type == GEN7_VC1_SKIPPED_PICTURE) {
+ for (src_h = 0; src_h < height_in_mbs; src_h++) {
+ for (src_w = 0; src_w < width_in_mbs; src_w++) {
+ int dst_index;
+ uint8_t src_value = 0x2;
- if (picture_type == GEN7_VC1_SKIPPED_PICTURE) {
- src_value |= 0x2;
+ dst_index = src_w / 2;
+ dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
}
- dst_index = src_w / 2;
- dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
+ if (src_w & 1)
+ dst[src_w / 2] >>= 4;
+
+ dst += bitplane_width;
}
+ } else {
+ assert(decode_state->bit_plane->buffer);
+ src = decode_state->bit_plane->buffer;
- if (src_w & 1)
- dst[src_w / 2] >>= 4;
+ for (src_h = 0; src_h < height_in_mbs; src_h++) {
+ for (src_w = 0; src_w < width_in_mbs; src_w++) {
+ int src_index, dst_index;
+ int src_shift;
+ uint8_t src_value;
- dst += bitplane_width;
+ src_index = (src_h * width_in_mbs + src_w) / 2;
+ src_shift = !((src_h * width_in_mbs + src_w) & 1) * 4;
+ src_value = ((src[src_index] >> src_shift) & 0xf);
+
+ dst_index = src_w / 2;
+ dst[dst_index] = ((dst[dst_index] >> 4) | (src_value << 4));
+ }
+
+ if (src_w & 1)
+ dst[src_w / 2] >>= 4;
+
+ dst += bitplane_width;
+ }
}
dri_bo_unmap(bo);