]> git.sesse.net Git - ffmpeg/commitdiff
avconv_vaapi: use the hwcontext device creation API
authorAnton Khirnov <anton@khirnov.net>
Thu, 19 May 2016 17:08:06 +0000 (19:08 +0200)
committerAnton Khirnov <anton@khirnov.net>
Thu, 26 May 2016 13:40:34 +0000 (15:40 +0200)
avconv_vaapi.c

index 36b34e8cdaff2706b6825dafd12193d19761bd82..ddee72c53f3c6188b0497c0abd8acfe6765ad904 100644 (file)
@@ -523,102 +523,14 @@ fail:
 
 static AVClass *vaapi_log = &vaapi_class;
 
-static av_cold void vaapi_device_uninit(AVHWDeviceContext *hwdev)
-{
-    AVVAAPIDeviceContext *hwctx = hwdev->hwctx;
-    av_log(&vaapi_log, AV_LOG_VERBOSE, "Terminating VAAPI connection.\n");
-    vaTerminate(hwctx->display);
-}
-
 av_cold int vaapi_device_init(const char *device)
 {
-    AVHWDeviceContext    *hwdev;
-    AVVAAPIDeviceContext *hwctx;
-    VADisplay display;
-    VAStatus vas;
-    int major, minor, err;
-
-    display = 0;
-
-#if HAVE_VAAPI_X11
-    if (!display) {
-        Display *x11_display;
-
-        // Try to open the device as an X11 display.
-        x11_display = XOpenDisplay(device);
-        if (!x11_display) {
-            av_log(&vaapi_log, AV_LOG_WARNING, "Cannot open X11 display "
-                   "%s.\n", XDisplayName(device));
-        } else {
-            display = vaGetDisplay(x11_display);
-            if (!display) {
-                av_log(&vaapi_log, AV_LOG_WARNING, "Cannot open a VA display "
-                       "from X11 display %s.\n", XDisplayName(device));
-                XCloseDisplay(x11_display);
-            } else {
-                av_log(&vaapi_log, AV_LOG_VERBOSE, "Opened VA display via "
-                       "X11 display %s.\n", XDisplayName(device));
-            }
-        }
-    }
-#endif
-
-#if HAVE_VAAPI_DRM
-    if (!display && device) {
-        int drm_fd;
-
-        // Try to open the device as a DRM path.
-        drm_fd = open(device, O_RDWR);
-        if (drm_fd < 0) {
-            av_log(&vaapi_log, AV_LOG_WARNING, "Cannot open DRM device %s.\n",
-                   device);
-        } else {
-            display = vaGetDisplayDRM(drm_fd);
-            if (!display) {
-                av_log(&vaapi_log, AV_LOG_WARNING, "Cannot open a VA display "
-                       "from DRM device %s.\n", device);
-                close(drm_fd);
-            } else {
-                av_log(&vaapi_log, AV_LOG_VERBOSE, "Opened VA display via "
-                       "DRM device %s.\n", device);
-            }
-        }
-    }
-#endif
-
-    if (!display) {
-        av_log(&vaapi_log, AV_LOG_ERROR, "No VA display found for "
-               "device %s.\n", device);
-        return AVERROR(EINVAL);
-    }
-
-    vas = vaInitialize(display, &major, &minor);
-    if (vas != VA_STATUS_SUCCESS) {
-        av_log(&vaapi_log, AV_LOG_ERROR, "Failed to initialise VAAPI "
-               "connection: %d (%s).\n", vas, vaErrorStr(vas));
-        return AVERROR(EIO);
-    }
-    av_log(&vaapi_log, AV_LOG_VERBOSE, "Initialised VAAPI connection: "
-           "version %d.%d\n", major, minor);
-
-    hw_device_ctx = av_hwdevice_ctx_alloc(AV_HWDEVICE_TYPE_VAAPI);
-    if (!hw_device_ctx) {
-        av_log(&vaapi_log, AV_LOG_ERROR, "Failed to create VAAPI "
-               "hardware context.\n");
-        vaTerminate(display);
-        return AVERROR(ENOMEM);
-    }
-
-    hwdev = (AVHWDeviceContext*)hw_device_ctx->data;
-    hwdev->free = &vaapi_device_uninit;
-
-    hwctx = hwdev->hwctx;
-    hwctx->display = display;
+    int err;
 
-    err = av_hwdevice_ctx_init(hw_device_ctx);
+    err = av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_VAAPI,
+                                 device, NULL, 0);
     if (err < 0) {
-        av_log(&vaapi_log, AV_LOG_ERROR, "Failed to initialise VAAPI "
-               "hardware context: %d\n", err);
+        av_log(&vaapi_log, AV_LOG_ERROR, "Failed to create a VAAPI device\n");
         return err;
     }