diff options
-rw-r--r-- | src/gen6_mfd.c | 56 | ||||
-rw-r--r-- | src/gen75_mfd.c | 56 | ||||
-rw-r--r-- | src/gen7_mfd.c | 56 | ||||
-rw-r--r-- | src/gen8_mfd.c | 56 |
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); |