summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiang, Haihao <haihao.xiang@intel.com>2011-04-02 16:16:04 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2011-04-07 14:45:14 +0800
commit6df4c56f312aa4251db4c3b218686458009ac5fb (patch)
tree1c125d633a7c85ecc8f8806d38e385aef162d680
parentfcd8f475be6d1980c5b5e0d56ab7b0bf6e7a15c6 (diff)
fix for VAEncCodedBufferType
It matches VA spec. Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
-rw-r--r--i965_drv_video/gen6_mfc.c2
-rw-r--r--i965_drv_video/i965_drv_video.c24
2 files changed, 24 insertions, 2 deletions
diff --git a/i965_drv_video/gen6_mfc.c b/i965_drv_video/gen6_mfc.c
index 52b8bc3..f883b9f 100644
--- a/i965_drv_video/gen6_mfc.c
+++ b/i965_drv_video/gen6_mfc.c
@@ -294,7 +294,7 @@ static void gen6_mfc_avc_slice_state(VADriverContextP ctx)
OUT_BCS_RELOC(ctx, bcs_state->mfc_indirect_pak_bse_object.bo,
I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
- 0);
+ ALIGN(sizeof(VACodedBufferSegment), 64));
OUT_BCS_BATCH(ctx, 0);
OUT_BCS_BATCH(ctx, 0);
diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c
index fe06097..766d513 100644
--- a/i965_drv_video/i965_drv_video.c
+++ b/i965_drv_video/i965_drv_video.c
@@ -922,6 +922,10 @@ i965_create_buffer_internal(VADriverContextP ctx,
return VA_STATUS_ERROR_ALLOCATION_FAILED;
}
+ if (type == VAEncCodedBufferType) {
+ size += ALIGN(sizeof(VACodedBufferSegment), 64);
+ }
+
obj_buffer->max_num_elements = num_elements;
obj_buffer->num_elements = num_elements;
obj_buffer->size_element = size;
@@ -943,8 +947,20 @@ i965_create_buffer_internal(VADriverContextP ctx,
size * num_elements, 64);
assert(buffer_store->bo);
- if (data)
+ if (type == VAEncCodedBufferType) {
+ VACodedBufferSegment *coded_buffer_segment;
+ dri_bo_map(buffer_store->bo, 1);
+ coded_buffer_segment = (VACodedBufferSegment *)buffer_store->bo->virtual;
+ coded_buffer_segment->size = size - ALIGN(sizeof(VACodedBufferSegment), 64);
+ coded_buffer_segment->bit_offset = 0;
+ coded_buffer_segment->status = 0;
+ coded_buffer_segment->buf = NULL;
+ coded_buffer_segment->next = NULL;
+ dri_bo_unmap(buffer_store->bo);
+ } else if (data) {
dri_bo_subdata(buffer_store->bo, 0, size * num_elements, data);
+ }
+
} else {
buffer_store->buffer = malloc(size * num_elements);
assert(buffer_store->buffer);
@@ -1023,6 +1039,12 @@ i965_MapBuffer(VADriverContextP ctx,
assert(obj_buffer->buffer_store->bo->virtual);
*pbuf = obj_buffer->buffer_store->bo->virtual;
+
+ if (obj_buffer->type == VAEncCodedBufferType) {
+ VACodedBufferSegment *coded_buffer_segment = (VACodedBufferSegment *)(obj_buffer->buffer_store->bo->virtual);
+ coded_buffer_segment->buf = (unsigned char *)(obj_buffer->buffer_store->bo->virtual) + ALIGN(sizeof(VACodedBufferSegment), 64);
+ }
+
vaStatus = VA_STATUS_SUCCESS;
} else if (NULL != obj_buffer->buffer_store->buffer) {
*pbuf = obj_buffer->buffer_store->buffer;