aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Wang <xin1.wang@intel.com>2017-05-09 23:15:05 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-05-09 23:15:05 +0000
commit092dbc02099a2e19be850a81a6bf8f5d22d725bb (patch)
tree97c125742a0f638196be6b956362cd0dd2d696c9
parent76f9c460fdad60c6b670774e55c8001944caabdc (diff)
parent054060f4c80f7401b49f88dd1f25bf644a16730b (diff)
downloadpsb_video-092dbc02099a2e19be850a81a6bf8f5d22d725bb.tar.gz
Fixed the Klocwork issue. am: 19045e10b7
am: 054060f4c8 Change-Id: Ib5f643dec7b71e3eb6ab7efaf8de6dc1394ea16d
-rw-r--r--fw/msvdx/msvdx_bin.c4
-rw-r--r--src/pnw_H264ES.c9
-rw-r--r--src/pnw_hostheader.c10
-rwxr-xr-xsrc/pnw_rotate.c8
-rw-r--r--src/psb_buffer.c2
-rw-r--r--src/psb_drv_debug.c47
-rwxr-xr-xsrc/psb_drv_video.c155
-rwxr-xr-xsrc/tng_yuv_processor.c7
-rw-r--r--src/vsp_VPP.c8
-rw-r--r--src/vsp_vp8.c6
10 files changed, 180 insertions, 76 deletions
diff --git a/fw/msvdx/msvdx_bin.c b/fw/msvdx/msvdx_bin.c
index d58e4a3..4f77a56 100644
--- a/fw/msvdx/msvdx_bin.c
+++ b/fw/msvdx/msvdx_bin.c
@@ -123,6 +123,7 @@ int main()
fwrite(&fw_DE3.pui8Data[i*4], 4, 1, ptr);
}
fclose(ptr);
+ fclose(fp_ll_dma);
/* Create stitch image of 56k msvdx fw */
ptr = fopen("unsigned_msvdx_fw_56k.bin", "w");
@@ -158,6 +159,7 @@ int main()
fwrite(&fw_DE3.pui8Data[i*4], 4, 1, ptr);
}
fclose(ptr);
+ fclose(fp_ll_dma);
/* Create mrfl unsigned image */
ptr = fopen("unsigned_msvdx_fw_mrfl.bin", "w");
@@ -201,6 +203,7 @@ int main()
fwrite(&fw_DE3.pui8Data[i*4], 4, 1, ptr);
}
fclose(ptr);
+ fclose(fp_ll_dma);
/* Create mrfl unsigned image 56k */
ptr = fopen("unsigned_msvdx_fw_mrfl_56k.bin", "w");
@@ -237,6 +240,7 @@ int main()
fwrite(&fw_DE3.pui8Data[i*4], 4, 1, ptr);
}
fclose(ptr);
+ fclose(fp_ll_dma);
return 0;
}
diff --git a/src/pnw_H264ES.c b/src/pnw_H264ES.c
index e578340..a65f49d 100644
--- a/src/pnw_H264ES.c
+++ b/src/pnw_H264ES.c
@@ -845,9 +845,10 @@ static VAStatus pnw__convert_sliceparameter_buffer(VAEncSliceParameterBufferH264
static VAStatus pnw__H264ES_process_slice_param(context_ENC_p ctx, object_buffer_p obj_buffer)
{
/* Prepare InParams for macros of current slice, insert slice header, insert do slice command */
- VAEncSliceParameterBuffer *pBuf_per_core, *pBuffer;
+ VAEncSliceParameterBuffer *pBuf_per_core = NULL, *pBuffer = NULL;
pnw_cmdbuf_p cmdbuf = ctx->obj_context->pnw_cmdbuf;
PIC_PARAMS *psPicParams = (PIC_PARAMS *)(cmdbuf->pic_params_p);
+ bool pBufferAlloced = false;
unsigned int i, j, slice_per_core;
VAStatus vaStatus = VA_STATUS_SUCCESS;
@@ -871,6 +872,8 @@ static VAStatus pnw__H264ES_process_slice_param(context_ENC_p ctx, object_buffer
goto out2;
}
+ pBufferAlloced = true;
+
pnw__convert_sliceparameter_buffer((VAEncSliceParameterBufferH264 *)obj_buffer->buffer_data,
pBuffer,
ctx->Width / 16,
@@ -905,7 +908,7 @@ static VAStatus pnw__H264ES_process_slice_param(context_ENC_p ctx, object_buffer
drv_debug_msg(VIDEO_DEBUG_ERROR, "Run out of memory!\n");
/* free the converted VAEncSliceParameterBuffer */
- if (obj_buffer->size == sizeof(VAEncSliceParameterBufferH264))
+ if (pBufferAlloced)
free(pBuffer);
free(obj_buffer->buffer_data);
return VA_STATUS_ERROR_ALLOCATION_FAILED;
@@ -964,7 +967,7 @@ static VAStatus pnw__H264ES_process_slice_param(context_ENC_p ctx, object_buffer
}
out1:
/* free the converted VAEncSliceParameterBuffer */
- if (obj_buffer->size == sizeof(VAEncSliceParameterBufferH264))
+ if (pBufferAlloced)
free(pBuffer);
out2:
diff --git a/src/pnw_hostheader.c b/src/pnw_hostheader.c
index ce392cb..524e733 100644
--- a/src/pnw_hostheader.c
+++ b/src/pnw_hostheader.c
@@ -204,7 +204,7 @@ static void pnw__write_upto8bits_elements(
OutByteIndex = (size_bits_p[0] / 8);
if (!(size_bits_p[0] & 7)) {
- if (size_bits_p[0] >= 120) {
+ if (size_bits_p[0] >= 120 && ((mtx_hdr->Elements + 1) < MAXNUMBERELEMENTS)) {
/* Element maximum bits send to element, time to start a new one */
mtx_hdr->Elements++; /* Increment element index */
/* Element pointer set to position of next element (120/8 = 15 bytes) */
@@ -751,7 +751,7 @@ static void pnw__H264_writebits_sequence_header(
MTX_HEADER_ELEMENT **aui32ElementPointers,
H264_SEQUENCE_HEADER_PARAMS *pSHParams, H264_CROP_PARAMS *psCrop)
{
- IMG_UINT8 ui8SBP;
+ IMG_UINT8 ui8SBP = 0;
pnw__insert_element_token(pMTX_Header,
aui32ElementPointers,
@@ -917,7 +917,11 @@ static void pnw__H264_writebits_sequence_header(
// Finally we need to align to the next byte
// We know the size of the data in the sequence header (no MTX variables) and start is byte aligned, so it's possible to add this field here rather than MTX ELEMENT_INSERTBYTEALIGN_H264 command.
pnw__write_upto8bits_elements(pMTX_Header, aui32ElementPointers, 1, 1);
- ui8SBP = (aui32ElementPointers[pMTX_Header->Elements]->Size) & 7;
+ if (pMTX_Header->Elements < MAXNUMBERELEMENTS) {
+ ui8SBP = (aui32ElementPointers[pMTX_Header->Elements]->Size) & 7;
+ } else {
+ ui8SBP = 0;
+ }
if (ui8SBP > 0)
pnw__write_upto8bits_elements(pMTX_Header, aui32ElementPointers, 0, 8 - (ui8SBP));
return;
diff --git a/src/pnw_rotate.c b/src/pnw_rotate.c
index 8bbb088..f8a1fb7 100755
--- a/src/pnw_rotate.c
+++ b/src/pnw_rotate.c
@@ -581,7 +581,8 @@ VAStatus psb_CreateRotateSurface(
)
{
int width, height;
- psb_surface_p rotate_surface;
+ psb_surface_p rotate_surface = NULL;
+ bool rotate_surfaceAlloc = false;
VAStatus vaStatus = VA_STATUS_SUCCESS;
int need_realloc = 0;
unsigned int flags = 0;
@@ -615,6 +616,7 @@ VAStatus psb_CreateRotateSurface(
} else {
rotate_surface = (psb_surface_p) calloc(1, sizeof(struct psb_surface_s));
CHECK_ALLOCATION(rotate_surface);
+ rotate_surfaceAlloc = true;
}
#ifdef PSBVIDEO_MSVDX_DEC_TILING
@@ -704,6 +706,10 @@ VAStatus psb_CreateRotateSurface(
if (NULL == obj_context) {
vaStatus = VA_STATUS_ERROR_INVALID_CONTEXT;
DEBUG_FAILURE;
+ if (rotate_surface != NULL && rotate_surfaceAlloc) {
+ free(rotate_surface);
+ rotate_surface = NULL;
+ }
return vaStatus;
}
unsigned long msvdx_tile = psb__tile_stride_log2_256(obj_surface->width_r);
diff --git a/src/psb_buffer.c b/src/psb_buffer.c
index 64ef263..8c796da 100644
--- a/src/psb_buffer.c
+++ b/src/psb_buffer.c
@@ -266,6 +266,7 @@ VAStatus psb_buffer_create_from_ub(psb_driver_data_p driver_data,
ret = wsbmBODataUB(buf->drm_buf, size, NULL, NULL, 0, vaddr, fd);
if (ret) {
drv_debug_msg(VIDEO_DEBUG_ERROR, "Failed to alloc wsbm buffers, buf->drm_buf is 0x%x, size is %d, vaddr is 0x%x, fd=%d\n", buf->drm_buf, size, vaddr, fd);
+ UNLOCK_HARDWARE(driver_data);
return 1;
}
@@ -276,6 +277,7 @@ VAStatus psb_buffer_create_from_ub(psb_driver_data_p driver_data,
buf->status = psb_bs_ready;
buf->wsbm_synccpu_flag = 0;
+ UNLOCK_HARDWARE(driver_data);
return VA_STATUS_SUCCESS;
}
diff --git a/src/psb_drv_debug.c b/src/psb_drv_debug.c
index e274994..56a55a5 100644
--- a/src/psb_drv_debug.c
+++ b/src/psb_drv_debug.c
@@ -53,16 +53,25 @@
#include "hwdefs/dxva_msg.h"
#include "hwdefs/msvdx_cmds_io2.h"
+#define PSB_VIDEO_DEBUG_FILE "/data/mediadrm/log"
+#define PSB_VIDEO_TRACE_FILE "/data/mediadrm/trace"
+#define PSB_VIDEO_DUMP_VABUF_FILE "/data/mediadrm/dump.va"
+#define PSB_VIDEO_DUMP_VABUF_VERBOSE_FILE "/data/mediadrm/dump.va.verbose"
+#define PSB_VIDEO_DUMP_YUVBUF_FILE "/data/mediadrm/dump.yuv"
+
void psb__open_log(void)
{
char log_fn[1024] = {0};
unsigned int suffix;
+ char env_fn[1024] = {0};//used to get file name from psbvideo.conf, only to check if value is set
if ((psb_video_debug_fp != NULL) && (psb_video_debug_fp != stderr)) {
debug_fp_count++;
} else {
/* psb video info debug */
- if (psb_parse_config("PSB_VIDEO_DEBUG", &log_fn[0]) == 0) {
+ if (psb_parse_config("PSB_VIDEO_DEBUG", &env_fn[0]) == 0) {
+ strcpy(log_fn, PSB_VIDEO_DEBUG_FILE);
+ drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s , force use %s\n", env_fn, log_fn);
suffix = 0xffff & ((unsigned int)time(NULL));
snprintf(log_fn + strnlen(log_fn, 1024),
(1024 - 8 - strnlen(log_fn, 1024)),
@@ -84,7 +93,9 @@ void psb__open_log(void)
}
}
- if(psb_parse_config("PSB_VIDEO_TRACE", &log_fn[0]) == 0) {
+ if(psb_parse_config("PSB_VIDEO_TRACE", &env_fn[0]) == 0) {
+ strcpy(log_fn, PSB_VIDEO_TRACE_FILE);
+ drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s , force use %s\n", env_fn, log_fn);
unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
time_t curtime;
@@ -106,8 +117,8 @@ void psb__open_log(void)
}
/* debug level include error, warning, general, init, entry, ...... */
- if(psb_parse_config("PSB_VIDEO_DEBUG_LEVEL", &log_fn[0]) == 0) {
- psb_video_debug_level = atoi(log_fn);
+ if(psb_parse_config("PSB_VIDEO_DEBUG_LEVEL", &env_fn[0]) == 0) {
+ psb_video_debug_level = atoi(env_fn);
#ifdef ANDROID
ALOGD("psb_video_debug_level is %d parsed.\n", psb_video_debug_level);
#endif
@@ -116,8 +127,8 @@ void psb__open_log(void)
}
/* control debug output option, logcat output or print to file */
- if(psb_parse_config("PSB_VIDEO_DEBUG_OPTION", &log_fn[0]) == 0) {
- psb_video_debug_option = atoi(log_fn);
+ if(psb_parse_config("PSB_VIDEO_DEBUG_OPTION", &env_fn[0]) == 0) {
+ psb_video_debug_option = atoi(env_fn);
#ifdef ANDROID
ALOGD("psb_video_debug_option is %d parsed.\n", psb_video_debug_option);
#endif
@@ -126,8 +137,8 @@ void psb__open_log(void)
}
/* trace level include vabuf, cmdmsg buf, aux buffer, lldma */
- if(psb_parse_config("PSB_VIDEO_TRACE_LEVEL", &log_fn[0]) == 0) {
- psb_video_trace_level = atoi(log_fn);
+ if(psb_parse_config("PSB_VIDEO_TRACE_LEVEL", &env_fn[0]) == 0) {
+ psb_video_trace_level = atoi(env_fn);
#ifdef ANDROID
ALOGD("psb_video_trace_level is %d parsed.\n", psb_video_trace_level);
#endif
@@ -136,8 +147,8 @@ void psb__open_log(void)
}
/* control trace output option, logcat output or print to file */
- if(psb_parse_config("PSB_VIDEO_TRACE_OPTION", &log_fn[0]) == 0) {
- psb_video_trace_option = atoi(log_fn);
+ if(psb_parse_config("PSB_VIDEO_TRACE_OPTION", &env_fn[0]) == 0) {
+ psb_video_trace_option = atoi(env_fn);
#ifdef ANDROID
ALOGD("psb_video_debug_option is %d parsed.\n", psb_video_trace_option);
#endif
@@ -146,8 +157,8 @@ void psb__open_log(void)
}
/* cmdbuf dump, every frame decoded cmdbuf dump to /data/ctrlAlloc%i.txt */
- if(psb_parse_config("PSB_VIDEO_DUMP_CMDBUF", &log_fn[0]) == 0) {
- if(strstr(log_fn, "true") != NULL)
+ if(psb_parse_config("PSB_VIDEO_DUMP_CMDBUF", &env_fn[0]) == 0) {
+ if(strstr(env_fn, "true") != NULL)
psb_video_dump_cmdbuf = TRUE;
else
psb_video_dump_cmdbuf = FALSE;
@@ -159,7 +170,9 @@ void psb__open_log(void)
}
/* psb video va buffers dump */
- if(psb_parse_config("PSB_VIDEO_DUMP_VABUF", &log_fn[0]) == 0) {
+ if(psb_parse_config("PSB_VIDEO_DUMP_VABUF", &env_fn[0]) == 0) {
+ strcpy(log_fn, PSB_VIDEO_DUMP_VABUF_FILE);
+ drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s , force use %s\n", env_fn, log_fn);
unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
/* Make sure there is space left for suffix */
log_fn[1024 - 12] = '\0';
@@ -174,7 +187,9 @@ void psb__open_log(void)
}
/* psb video va buffer verbose dump */
- if(psb_parse_config("PSB_VIDEO_DUMP_VABUF_VERBOSE", &log_fn[0]) == 0) {
+ if(psb_parse_config("PSB_VIDEO_DUMP_VABUF_VERBOSE", &env_fn[0]) == 0) {
+ strcpy(log_fn, PSB_VIDEO_DUMP_VABUF_VERBOSE_FILE);
+ drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s , force use %s\n", env_fn, log_fn);
unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
/* Make sure there is space left for suffix */
log_fn[1024 - 12] = '\0';
@@ -189,7 +204,9 @@ void psb__open_log(void)
}
/* dump decoded surface to a yuv file */
- if(psb_parse_config("PSB_VIDEO_DUMP_YUVBUF", &log_fn[0]) == 0) {
+ if(psb_parse_config("PSB_VIDEO_DUMP_YUVBUF", &env_fn[0]) == 0) {
+ strcpy(log_fn, PSB_VIDEO_DUMP_YUVBUF_FILE);
+ drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s , force use %s\n", env_fn, log_fn);
unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
/* Make sure there is space left for suffix */
log_fn[1024 - 12] = '\0';
diff --git a/src/psb_drv_video.c b/src/psb_drv_video.c
index 7417b25..9f5b465 100755
--- a/src/psb_drv_video.c
+++ b/src/psb_drv_video.c
@@ -742,24 +742,36 @@ VAStatus psb_CreateSurfaces2(
unsigned int initalized_info_flag = 1;
VASurfaceAttribExternalBuffers *pExternalBufDesc = NULL;
PsbSurfaceAttributeTPI attribute_tpi;
+ attribute_tpi.buffers = NULL;
+ bool attribute_tpi_buffersAlloced = false;
CHECK_INVALID_PARAM(num_surfaces <= 0);
CHECK_SURFACE(surface_list);
if ((attrib_list != NULL) && (num_attribs > 0)) {
for (i = 0; i < num_attribs; i++, attrib_list++) {
- if (!attrib_list)
+ if (!attrib_list) {
+ if(attribute_tpi.buffers != NULL)
+ free(attribute_tpi.buffers);
return VA_STATUS_ERROR_INVALID_PARAMETER;
+ }
switch (attrib_list->type) {
case VASurfaceAttribExternalBufferDescriptor:
{
pExternalBufDesc = (VASurfaceAttribExternalBuffers *)attrib_list->value.value.p;
if (pExternalBufDesc == NULL) {
+ if(attribute_tpi.buffers != NULL)
+ free(attribute_tpi.buffers);
drv_debug_msg(VIDEO_DEBUG_ERROR, "Invalid VASurfaceAttribExternalBuffers.\n");
return VA_STATUS_ERROR_INVALID_PARAMETER;
}
attribute_tpi.type = memory_type;
+ if (attribute_tpi_buffersAlloced == true && attribute_tpi.buffers != NULL) {
+ free(attribute_tpi.buffers);
+ attribute_tpi.buffers = NULL;
+ }
attribute_tpi.buffers = malloc(sizeof(long) * pExternalBufDesc->num_buffers);
+ attribute_tpi_buffersAlloced = true;
attribute_tpi.width = pExternalBufDesc->width;
attribute_tpi.height = pExternalBufDesc->height;
attribute_tpi.count = pExternalBufDesc->num_buffers;
@@ -800,6 +812,8 @@ VAStatus psb_CreateSurfaces2(
memory_type = VAExternalMemoryNULL;
break;
default:
+ if (attribute_tpi.buffers != NULL)
+ free(attribute_tpi.buffers);
drv_debug_msg(VIDEO_DEBUG_ERROR, "Unsupported memory type.\n");
return VA_STATUS_ERROR_INVALID_PARAMETER;
@@ -820,6 +834,8 @@ VAStatus psb_CreateSurfaces2(
}
break;
default:
+ if (attribute_tpi.buffers != NULL)
+ free(attribute_tpi.buffers);
drv_debug_msg(VIDEO_DEBUG_ERROR, "Unsupported attribute.\n");
return VA_STATUS_ERROR_INVALID_PARAMETER;
}
@@ -1263,89 +1279,126 @@ VAStatus psb_CreateContext(
}
for (i = 0; i < cmdbuf_num; i++) {
- void *cmdbuf = NULL;
#ifndef BAYTRAIL
if (encode) { /* Topaz encode context */
#ifdef PSBVIDEO_MRFL
- if (IS_MRFL(obj_context->driver_data))
- cmdbuf = calloc(1, sizeof(struct tng_cmdbuf_s));
+ if (IS_MRFL(obj_context->driver_data)) {
+ obj_context->tng_cmdbuf_list[i] = calloc(1, sizeof(struct tng_cmdbuf_s));
+ if (NULL == obj_context->tng_cmdbuf_list[i]) {
+ vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
+ DEBUG_FAILURE;
+ break;
+ }
+ }
#endif
#ifdef PSBVIDEO_MFLD
- if (IS_MFLD(obj_context->driver_data))
- cmdbuf = calloc(1, sizeof(struct pnw_cmdbuf_s));
+ if (IS_MFLD(obj_context->driver_data)) {
+ obj_context->pnw_cmdbuf_list[i] = calloc(1, sizeof(struct pnw_cmdbuf_s));
+ if (NULL == obj_context->pnw_cmdbuf_list[i]) {
+ vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
+ DEBUG_FAILURE;
+ break;
+ }
+ }
#endif
} else if (proc) { /* VSP VPP context */
/* VED two pass rotation under VPP API */
- if (driver_data->ved_vpp)
- cmdbuf = calloc(1, sizeof(struct psb_cmdbuf_s));
+ if (driver_data->ved_vpp) {
+ obj_context->cmdbuf_list[i] = calloc(1, sizeof(struct psb_cmdbuf_s));
+ if (NULL == obj_context->cmdbuf_list[i]) {
+ vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
+ DEBUG_FAILURE;
+ break;
+ }
+ }
#ifdef PSBVIDEO_MRFL_VPP
- else if (IS_MRFL(obj_context->driver_data))
- cmdbuf = calloc(1, sizeof(struct vsp_cmdbuf_s));
+ else if (IS_MRFL(obj_context->driver_data)) {
+ obj_context->vsp_cmdbuf_list[i] = calloc(1, sizeof(struct vsp_cmdbuf_s));
+ if (NULL == obj_context->vsp_cmdbuf_list[i]) {
+ vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
+ DEBUG_FAILURE;
+ break;
+ }
+ }
#endif
- } else /* MSVDX decode context */
+ } else /* MSVDX decode context */ {
#endif
- cmdbuf = calloc(1, sizeof(struct psb_cmdbuf_s));
-
- if (NULL == cmdbuf) {
- vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
- DEBUG_FAILURE;
- break;
+ obj_context->cmdbuf_list[i] = calloc(1, sizeof(struct psb_cmdbuf_s));
+ if (NULL == obj_context->cmdbuf_list[i]) {
+ vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
+ DEBUG_FAILURE;
+ break;
+ }
}
#ifndef BAYTRAIL
if (encode) { /* Topaz encode context */
#ifdef PSBVIDEO_MRFL
- if (IS_MRFL(obj_context->driver_data))
- vaStatus = tng_cmdbuf_create(obj_context, driver_data, (tng_cmdbuf_p)cmdbuf);
+ if (IS_MRFL(obj_context->driver_data)) {
+ vaStatus = tng_cmdbuf_create(obj_context, driver_data, (tng_cmdbuf_p)obj_context->tng_cmdbuf_list[i]);
+ if (VA_STATUS_SUCCESS != vaStatus) {
+ free(obj_context->tng_cmdbuf_list[i]);
+ DEBUG_FAILURE;
+ break;
+ }
+ }
#endif
#ifdef PSBVIDEO_MFLD
- if (IS_MFLD(obj_context->driver_data))
- vaStatus = pnw_cmdbuf_create(obj_context, driver_data, (pnw_cmdbuf_p)cmdbuf);
+ if (IS_MFLD(obj_context->driver_data)) {
+ vaStatus = pnw_cmdbuf_create(obj_context, driver_data, (pnw_cmdbuf_p)obj_context->pnw_cmdbuf_list[i]);
+ if (VA_STATUS_SUCCESS != vaStatus) {
+ free(obj_context->pnw_cmdbuf_list[i]);
+ DEBUG_FAILURE;
+ break;
+ }
+ }
#endif
} else if (proc) { /* VSP VPP context */
- if (driver_data->ved_vpp)
- vaStatus = psb_cmdbuf_create(obj_context, driver_data, (psb_cmdbuf_p)cmdbuf);
+ if (driver_data->ved_vpp) {
+ vaStatus = psb_cmdbuf_create(obj_context, driver_data, (psb_cmdbuf_p)obj_context->cmdbuf_list[i]);
+ if (VA_STATUS_SUCCESS != vaStatus) {
+ free(obj_context->cmdbuf_list[i]);
+ DEBUG_FAILURE;
+ break;
+ }
+ }
#ifdef PSBVIDEO_MRFL_VPP
- else if (IS_MRFL(obj_context->driver_data))
- vaStatus = vsp_cmdbuf_create(obj_context, driver_data, (vsp_cmdbuf_p)cmdbuf);
+ else if (IS_MRFL(obj_context->driver_data)) {
+ vaStatus = vsp_cmdbuf_create(obj_context, driver_data, (vsp_cmdbuf_p)obj_context->vsp_cmdbuf_list[i]);
+ if (VA_STATUS_SUCCESS != vaStatus) {
+ free(obj_context->vsp_cmdbuf_list[i]);
+ DEBUG_FAILURE;
+ break;
+ }
+ }
#endif
- } else /* MSVDX decode context */
+ } else /* MSVDX decode context */ {
#endif
- vaStatus = psb_cmdbuf_create(obj_context, driver_data, (psb_cmdbuf_p)cmdbuf);
-
- if (VA_STATUS_SUCCESS != vaStatus) {
- free(cmdbuf);
- DEBUG_FAILURE;
- break;
+ vaStatus = psb_cmdbuf_create(obj_context, driver_data, (psb_cmdbuf_p)obj_context->cmdbuf_list[i]);
+ if (VA_STATUS_SUCCESS != vaStatus) {
+ free(obj_context->cmdbuf_list[i]);
+ DEBUG_FAILURE;
+ break;
+ }
}
#ifndef BAYTRAIL
if (encode) { /* Topaz encode context */
if (i >= LNC_MAX_CMDBUFS_ENCODE) {
- free(cmdbuf);
- DEBUG_FAILURE;
- break;
- }
-
#ifdef PSBVIDEO_MRFL
- if (IS_MRFL(obj_context->driver_data))
- obj_context->tng_cmdbuf_list[i] = (tng_cmdbuf_p)cmdbuf;
+ tng_cmdbuf_destroy((tng_cmdbuf_p)obj_context->tng_cmdbuf_list[i]);
+ free(obj_context->tng_cmdbuf_list[i]);
#endif
#ifdef PSBVIDEO_MFLD
- if (IS_MFLD(obj_context->driver_data))
- obj_context->pnw_cmdbuf_list[i] = (pnw_cmdbuf_p)cmdbuf;
-#endif
- } else if (proc) { /* VSP VPP context */
- if (driver_data->ved_vpp)
- obj_context->cmdbuf_list[i] = (psb_cmdbuf_p)cmdbuf;
-#ifdef PSBVIDEO_MRFL_VPP
- else if (IS_MRFL(obj_context->driver_data))
- obj_context->vsp_cmdbuf_list[i] = (vsp_cmdbuf_p)cmdbuf;
+ pnw_cmdbuf_destroy((pnw_cmdbuf_p)obj_context->pnw_cmdbuf_list[i]);
+ free(obj_context->pnw_cmdbuf_list[i]);
#endif
- } else /* MSVDX decode context */
+ DEBUG_FAILURE;
+ break;
+ }
+ }
#endif
- obj_context->cmdbuf_list[i] = (psb_cmdbuf_p)cmdbuf;
}
obj_context->cmdbuf_current = -1;
@@ -2756,6 +2809,8 @@ VAStatus psb_QuerySurfaceAttributes(VADriverContextP ctx,
if (i > *num_attribs) {
*num_attribs = i;
+ if (attribs != NULL)
+ free(attribs);
return VA_STATUS_ERROR_MAX_NUM_EXCEEDED;
}
diff --git a/src/tng_yuv_processor.c b/src/tng_yuv_processor.c
index 06c5b5e..8313bf3 100755
--- a/src/tng_yuv_processor.c
+++ b/src/tng_yuv_processor.c
@@ -73,7 +73,12 @@ static VAStatus tng_yuv_processor_CreateContext(
if (!dec_ctx) {
dec_ctx = (context_DEC_p) malloc(sizeof(struct context_DEC_s));
- CHECK_ALLOCATION(dec_ctx);
+ if(dec_ctx == NULL) {
+ free(ctx);
+ vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
+ drv_debug_msg(VIDEO_DEBUG_ERROR, "%s fails with '%d' at %s:%d\n", __FUNCTION__, vaStatus, __FILE__, __LINE__);
+ return vaStatus;
+ }
obj_context->format_data = (void *)dec_ctx;
ctx->has_dec_ctx = 1;
vaStatus = vld_dec_CreateContext(dec_ctx, obj_context);
diff --git a/src/vsp_VPP.c b/src/vsp_VPP.c
index b3706de..ba2596a 100644
--- a/src/vsp_VPP.c
+++ b/src/vsp_VPP.c
@@ -362,8 +362,12 @@ static VAStatus vsp_VPP_CreateContext(
out:
vsp_VPP_DestroyContext(obj_context);
- if (ctx)
- free(ctx);
+ if (ctx) {
+ if(ctx->intermediate_buf != NULL)
+ free(ctx->intermediate_buf);
+ free(ctx);
+ ctx = NULL;
+ }
return vaStatus;
}
diff --git a/src/vsp_vp8.c b/src/vsp_vp8.c
index 1e6bb9b..582032e 100644
--- a/src/vsp_vp8.c
+++ b/src/vsp_vp8.c
@@ -259,8 +259,12 @@ static VAStatus vsp_VP8_CreateContext(
out:
vsp_VP8_DestroyContext(obj_context);
- if (ctx)
+ if (ctx) {
+ if(ctx->context_buf != NULL)
+ free(ctx->context_buf);
free(ctx);
+ ctx = NULL;
+ }
return vaStatus;
}