diff --git a/ffmpeg_vaapi.c b/ffmpeg_vaapi.c index d76c121f32d1a..809059778df47 100644 --- a/ffmpeg_vaapi.c +++ b/ffmpeg_vaapi.c @@ -523,102 +523,14 @@ int vaapi_decode_init(AVCodecContext *avctx) 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; }