fixed coverity issues 70/172670/1
authorSejun Park <sejun79.park@samsung.com>
Thu, 15 Mar 2018 06:07:08 +0000 (15:07 +0900)
committerSejun Park <sejun79.park@samsung.com>
Thu, 15 Mar 2018 06:07:08 +0000 (15:07 +0900)
Change-Id: I564f3d25eaa051c5792e7f9afb7fd61683950523

src/media_codec.c
src/media_codec_port_gst.c

index 88784ba..445b069 100644 (file)
@@ -363,6 +363,7 @@ int mediacodec_unprepare(mediacodec_h mediacodec)
 {
        MEDIACODEC_INSTANCE_CHECK(mediacodec);
        mediacodec_s *handle = (mediacodec_s *)mediacodec;
+       int rm_ret = MM_RESOURCE_MANAGER_ERROR_NONE;
 
        int ret = mc_unprepare(handle->mc_handle);
 
@@ -373,7 +374,16 @@ int mediacodec_unprepare(mediacodec_h mediacodec)
                        mm_resource_manager_mark_for_release(resource_manager,
                                        handle->codec_resource);
                        handle->codec_resource = NULL;
-                       mm_resource_manager_commit(resource_manager);
+                       rm_ret = mm_resource_manager_commit(resource_manager);
+                       if (rm_ret != MM_RESOURCE_MANAGER_ERROR_NONE) {
+                               mm_resource_manager_mark_for_release(resource_manager, resource);
+                               switch (rm_ret) {
+                               case MM_RESOURCE_MANAGER_ERROR_LOW_PRIORITY:
+                                       return MEDIACODEC_ERROR_RESOURCE_OVERLOADED;
+                               default:
+                                       return MEDIACODEC_ERROR_INTERNAL;
+                               }
+                       }
                } else {
                        LOGD("No codec resource to release. Probably resource release cb called\n");
                }
@@ -713,8 +723,12 @@ static int __mediacodec_resource_release_cb(mm_resource_manager_h rm,
 static void __mediacodec_init_lib()
 {
        mediacodec_handles = g_ptr_array_sized_new(MC_PREALLOCATED_HANDLE_ARRAY_SIZE);
-       mm_resource_manager_create(MM_RESOURCE_MANAGER_APP_CLASS_MEDIA,
-                       __mediacodec_resource_release_cb, NULL, &resource_manager);
+
+       if (MM_RESOURCE_MANAGER_ERROR_NONE != mm_resource_manager_create(MM_RESOURCE_MANAGER_APP_CLASS_MEDIA,
+                       __mediacodec_resource_release_cb, NULL, &resource_manager)) {
+               LOGE("Failed to initialize resource manager");
+               g_ptr_array_unref(mediacodec_handles);
+       }
 }
 
 static void __mediacodec_deinit_lib()
index 5bf33cf..c787b0c 100644 (file)
@@ -2582,6 +2582,8 @@ static MMVideoBuffer *__mc_gst_make_tbm_buffer(mc_gst_core_t *core, media_packet
 {
        gint i;
        gint num_bos;
+       gint err;
+       int ret = MEDIA_PACKET_ERROR_NONE;
        tbm_surface_h surface = NULL;
        tbm_surface_info_s surface_info;
        tbm_bo_handle handle_bo;
@@ -2599,9 +2601,15 @@ static MMVideoBuffer *__mc_gst_make_tbm_buffer(mc_gst_core_t *core, media_packet
        }
        memset(mm_vbuffer, 0x00, sizeof(MMVideoBuffer));
 
-       media_packet_get_tbm_surface(packet, &surface);
+       ret = media_packet_get_tbm_surface(packet, &surface);
+       if (ret != MEDIA_PACKET_ERROR_NONE) {
+               LOGE("Failed to get tbm surface");
+               free(mm_vbuffer);
+               return NULL;
+       }
+
        num_bos = tbm_surface_internal_get_num_bos(surface);
-       gint err = tbm_surface_get_info((tbm_surface_h)surface, &surface_info);
+       err = tbm_surface_get_info((tbm_surface_h)surface, &surface_info);
        if (err != TBM_SURFACE_ERROR_NONE) {
                LOGE("get tbm surface is failed");
                free(mm_vbuffer);