]> granicus.if.org Git - handbrake/commitdiff
opencl: Workaround broken drivers that crash when you call clGetPlatformIDs with...
authorScott <sr55@users.noreply.github.com>
Sun, 15 Jan 2017 14:25:55 +0000 (14:25 +0000)
committerGitHub <noreply@github.com>
Sun, 15 Jan 2017 14:25:55 +0000 (14:25 +0000)
libhb/hb.c
libhb/hb.h
libhb/scan.c

index 500af764e2906046dac0743fa10b659c00d92425..562f0dc7028797390b9d899edfd62cb61064f530 100644 (file)
@@ -65,6 +65,8 @@ struct hb_handle_s
 
     // power management opaque pointer
     void         * system_sleep_opaque;
+
+    int            enable_opencl;
 };
 
 hb_work_object_t * hb_objects = NULL;
@@ -141,6 +143,11 @@ int hb_avcodec_open(AVCodecContext *avctx, AVCodec *codec,
     return ret;
 }
 
+int hb_get_opencl_enabled(hb_handle_t *h)
+{
+    return h->enable_opencl;
+}
+
 int hb_avcodec_close(AVCodecContext *avctx)
 {
     int ret;
@@ -409,10 +416,17 @@ void hb_log_level_set(hb_handle_t *h, int level)
     global_verbosity_level = level;
 }
 
+/*
+ * Enable or disable support for OpenCL detection.
+ */
+void hb_opencl_set_enable(hb_handle_t *h, int enable_opencl)
+{
+    h->enable_opencl = enable_opencl;
+}
+
 /**
  * libhb initialization routine.
  * @param verbose HB_DEBUG_NONE or HB_DEBUG_ALL.
- * @param update_check signals libhb to check for updated version from HandBrake website.
  * @return Handle to hb_handle_t for use on all subsequent calls to libhb.
  */
 hb_handle_t * hb_init( int verbose )
@@ -629,7 +643,10 @@ void hb_scan( hb_handle_t * h, const char * path, int title_index,
     hb_log(" - logical processor count: %d", hb_get_cpu_count());
 
     /* Print OpenCL info here so that it's in all scan and encode logs */
-    hb_opencl_info_print();
+    if (hb_get_opencl_enabled(h))
+    {
+        hb_opencl_info_print();
+    }
 
 #ifdef USE_QSV
     /* Print QSV info here so that it's in all scan and encode logs */
index 3ad138e1eed8d23b31baf056d9c3c4650ded846f..86fed9bc0d48eea7a884460c3df3c5f3df48f605 100644 (file)
@@ -32,6 +32,7 @@ void          hb_register( hb_work_object_t * );
 void          hb_register_logger( void (*log_cb)(const char* message) );
 hb_handle_t * hb_init( int verbose );
 void          hb_log_level_set(hb_handle_t *h, int level);
+void          hb_opencl_set_enable(hb_handle_t *h, int enable_opencl);
 
 /* hb_get_version() */
 const char  * hb_get_full_description();
@@ -48,6 +49,8 @@ int           hb_check_update( hb_handle_t * h, char ** version );
 char *        hb_dvd_name( char * path );
 void          hb_dvd_set_dvdnav( int enable );
 
+int           hb_get_opencl_enabled(hb_handle_t *h);
+
 /* hb_scan()
    Scan the specified path. Can be a DVD device, a VIDEO_TS folder or
    a VOB file. If title_index is 0, scan all titles. */
index e612f2a98d6c9428e3f8026678d7d566ceda4b35..da7379c0f0318cc98ba48902ad1e99b751a604b6 100644 (file)
@@ -1021,8 +1021,12 @@ skip_preview:
         title->video_decode_support = vid_info.video_decode_support;
 
         // TODO: check video dimensions
-        title->opencl_support = !!hb_opencl_available();
-
+        hb_handle_t *hb_handle = (hb_handle_t *)data->h;
+        if (hb_get_opencl_enabled(hb_handle))
+        {
+             title->opencl_support = !!hb_opencl_available();
+        }
+        
         // compute the aspect ratio based on the storage dimensions and PAR.
         hb_reduce(&title->dar.num, &title->dar.den,
                   title->geometry.par.num * title->geometry.width,