diff options
author | Rohit Kulkarni <rkulkarn@codeaurora.org> | 2016-03-25 10:57:27 -0700 |
---|---|---|
committer | Rohit Kulkarni <rkulkarn@codeaurora.org> | 2016-03-28 12:31:08 -0700 |
commit | 538225bd4b8ceac011a27bf1a5fed3edf50080e7 (patch) | |
tree | 8167973e133019fb44a7ca84b3ce06a14be19404 | |
parent | c1c9a542c7d1e6a6069b0519c64fdce9314f8d2e (diff) | |
download | android_hardware_qcom_media-538225bd4b8ceac011a27bf1a5fed3edf50080e7.tar.gz android_hardware_qcom_media-538225bd4b8ceac011a27bf1a5fed3edf50080e7.tar.bz2 android_hardware_qcom_media-538225bd4b8ceac011a27bf1a5fed3edf50080e7.zip |
mm-video-v4l2: vdec: Malloc failure handling in memory prefetch
Gracefully handle memory allocation failures encountered during ioctl call
setup for secure memory prefetching.
Change-Id: Ic251962a1afe54797cdc4f37f4a196f5cb87d2c3
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index b44adb21..69eaf1c4 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -11863,7 +11863,7 @@ void omx_vdec::prefetchNewBuffers() { uint32_t prefetch_size; uint32_t want_size; uint32_t have_size; - int color_fmt; + int color_fmt, rc; uint32_t new_calculated_size; uint32_t new_buffer_size; uint32_t new_buffer_count; @@ -11902,13 +11902,6 @@ void omx_vdec::prefetchNewBuffers() { old_buffer_size = drv_ctx.op_buf.buffer_size; old_buffer_count = drv_ctx.op_buf.actualcount; - /* - if (new_buffer_count == old_buffer_count) { - prefetch_size = new_buffer_size - old_buffer_size; - DEBUG_PRINT_LOW("Got same count!"); - } else { - prefetch_size = (want_size - have_size) / prefetch_count; - }*/ new_buffer_count = old_buffer_count > new_buffer_count ? old_buffer_count : new_buffer_count; prefetch_count = new_buffer_count; @@ -11923,13 +11916,19 @@ void omx_vdec::prefetchNewBuffers() { int ion_fd = open(MEM_DEVICE, O_RDONLY); if (ion_fd < 0) { DEBUG_PRINT_ERROR("Ion fd open failed : %d\n", ion_fd); + return; } struct ion_custom_data *custom_data = (struct ion_custom_data*) malloc(sizeof(*custom_data)); struct ion_prefetch_data *prefetch_data = (struct ion_prefetch_data*) malloc(sizeof(*prefetch_data)); - struct ion_prefetch_regions *regions = (struct ion_prefetch_regions*) malloc(sizeof(*regions) * 1); + struct ion_prefetch_regions *regions = (struct ion_prefetch_regions*) malloc(sizeof(*regions)); size_t *sizes = (size_t*) malloc(sizeof(size_t) * prefetch_count); + if (custom_data == NULL || prefetch_data == NULL || regions == NULL || sizes == NULL) { + DEBUG_PRINT_ERROR("prefetch data allocation failed"); + goto prefetch_exit; + } + for (uint32_t i = 0; i < prefetch_count; i++) { sizes[i] = prefetch_size; } @@ -11945,11 +11944,12 @@ void omx_vdec::prefetchNewBuffers() { custom_data->cmd = ION_IOC_PREFETCH; custom_data->arg = (unsigned long )prefetch_data; - int rc = ioctl(ion_fd, ION_IOC_CUSTOM, custom_data); + rc = ioctl(ion_fd, ION_IOC_CUSTOM, custom_data); if (rc) { DEBUG_PRINT_ERROR("Custom prefetch ioctl failed rc : %d, errno : %d\n", rc, errno); } +prefetch_exit: close(ion_fd); free(sizes); free(regions); |