]> granicus.if.org Git - handbrake/commitdiff
[merge] libhb: re-work OpenCL cleanup a bit.
authorRodeo <tdskywalker@gmail.com>
Sat, 4 Jul 2015 23:16:50 +0000 (23:16 +0000)
committerRodeo <tdskywalker@gmail.com>
Sat, 4 Jul 2015 23:16:50 +0000 (23:16 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/branches/0.10.x@7344 b64f7644-9d1e-0410-96f1-a4d463321fa5

libhb/hb.c
libhb/work.c

index dd2aa78672d2ddcf7f2dd1e46538dfb1a082426e..bc289dbb76d8f946e9a79ef3ea484ebbfff38c59 100644 (file)
@@ -1744,6 +1744,9 @@ void hb_global_close()
     char dirname[1024];
     DIR * dir;
     struct dirent * entry;
+
+    /* OpenCL library (dynamically loaded) */
+    hb_ocl_close();
     
     /* Find and remove temp folder */
     memset( dirname, 0, 1024 );
index 596912feb7ea7bae84ee853751eeee94a902c269..c889f14ad1981e5e4ca82639fc39b0561e28690a 100644 (file)
@@ -564,12 +564,23 @@ static void do_job(hb_job_t *job)
 
     job->list_work = hb_list_init();
 
-    /* OpenCL */
+    /*
+     * OpenCL
+     *
+     * Note: we delay hb_ocl_init until here, since they're no point it loading
+     * the library if we aren't going to use it. But we only call hb_ocl_close
+     * in hb_global_close, since un/reloading the library each run is wasteful.
+     */
     if (job->use_opencl && (hb_ocl_init() || hb_init_opencl_run_env(0, NULL, "-I.")))
     {
         hb_log("work: failed to initialize OpenCL environment, using fallback");
+        hb_release_opencl_run_env();
         job->use_opencl = 0;
-        hb_ocl_close();
+    }
+    else
+    {
+        // we're not (re-)using OpenCL here, we can release the environment
+        hb_release_opencl_run_env();
     }
 
     hb_log( "starting job" );
@@ -1652,12 +1663,6 @@ cleanup:
     }
 
     hb_buffer_pool_free();
-          
-    /* OpenCL: must be closed *after* freeing the buffer pool */
-    if (job->use_opencl)
-    {
-        hb_ocl_close();
-    }
     
     hb_job_close( &job );
 }