summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElaine Wang <elaine.wang@intel.com>2014-04-09 22:43:55 +0800
committerPatrick Tjin <pattjin@google.com>2014-07-21 22:06:36 -0700
commit80512b077abec95c25376542d58e1ee4cb1a34ee (patch)
tree8daae794e7aaf6d539d81f8201c5f582d6142138
parent98be9b15fdf9dd710170f4d47d9be9ad754614b8 (diff)
downloadandroid_hardware_intel_img_psb_video-80512b077abec95c25376542d58e1ee4cb1a34ee.tar.gz
android_hardware_intel_img_psb_video-80512b077abec95c25376542d58e1ee4cb1a34ee.tar.bz2
android_hardware_intel_img_psb_video-80512b077abec95c25376542d58e1ee4cb1a34ee.zip
Change the value of PSB_MAX_BUFFERTYPES from 1007 to 64
BZ: 185572 VABufferTypeMax is large(1000+) because there is big blank space between common libva buffer type and Intel specific buffer types(for GEN usage only). If use VABufferTypeMax as PSB_MAX_BUFFERTYPES to define the size of buffer type related arrays in context object, we will waste about 16K memory. Currently, the max value of buffer type used in psb_video is VAParseSliceHeaderGroupBufferType(44). So change the value of PSB_MAX_BUFFERTYPES from 1007 to 64. Change-Id: I0d9ff14e6a1b3ecc8b34a7a73005c462141b8c4d Signed-off-by: Elaine Wang <elaine.wang@intel.com>
-rwxr-xr-xsrc/psb_drv_video.c18
-rw-r--r--src/psb_drv_video.h9
2 files changed, 24 insertions, 3 deletions
diff --git a/src/psb_drv_video.c b/src/psb_drv_video.c
index 5b2bdc6..12ef4de 100755
--- a/src/psb_drv_video.c
+++ b/src/psb_drv_video.c
@@ -1507,6 +1507,11 @@ void psb__suspend_buffer(psb_driver_data_p driver_data, object_buffer_p obj_buff
VABufferType type = obj_buffer->type;
object_context_p obj_context = obj_buffer->context;
+ if (type >= PSB_MAX_BUFFERTYPES) {
+ drv_debug_msg(VIDEO_DEBUG_ERROR, "Invalid buffer type %d\n", type);
+ return;
+ }
+
/* Remove buffer from active list */
*obj_buffer->pptr_prev_next = obj_buffer->ptr_next;
@@ -1655,9 +1660,18 @@ VAStatus psb__CreateBuffer(
DEBUG_FUNC_ENTER
VAStatus vaStatus = VA_STATUS_SUCCESS;
int bufferID;
- object_buffer_p obj_buffer = obj_context ? obj_context->buffers_unused[type] : NULL;
- int unused_count = obj_context ? obj_context->buffers_unused_count[type] : 0;
+ object_buffer_p obj_buffer;
+ int unused_count;
+
+ /*PSB_MAX_BUFFERTYPES is the size of array buffers_unused*/
+ if (type >= PSB_MAX_BUFFERTYPES) {
+ drv_debug_msg(VIDEO_DEBUG_ERROR, "Invalid buffer type %d\n", type);
+ return VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE;
+ }
+
+ obj_buffer = obj_context ? obj_context->buffers_unused[type] : NULL;
+ unused_count = obj_context ? obj_context->buffers_unused_count[type] : 0;
/*
* Buffer Management
diff --git a/src/psb_drv_video.h b/src/psb_drv_video.h
index 6cbad42..4797c66 100644
--- a/src/psb_drv_video.h
+++ b/src/psb_drv_video.h
@@ -96,7 +96,14 @@
#define PSB_MAX_PROFILES 32
#define PSB_MAX_ENTRYPOINTS 32
#define PSB_MAX_CONFIG_ATTRIBUTES VAConfigAttribTypeMax
-#define PSB_MAX_BUFFERTYPES VABufferTypeMax
+
+/* VABufferTypeMax is large(1000+) because there is big blank space between common libva buffer
+ * type and Intel specific buffer types(for GEN usage only). If use VABufferTypeMax as
+ * PSB_MAX_BUFFERTYPES to define the size of buffer type related arrays in context object,
+ * we will waste about 16K memory. Currently, the max value of buffer type used in psb_video is
+ * VAParseSliceHeaderGroupBufferType(44).
+ */
+#define PSB_MAX_BUFFERTYPES 64
/* Max # of command submission buffers */
#define PSB_MAX_CMDBUFS 10