diff options
author | Anton Khirnov <anton@khirnov.net> | 2016-05-19 19:08:06 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-05-26 15:40:34 +0200 |
commit | 9f7590f4e497c12693247d7f935a20d7773a64dd (patch) | |
tree | c28d4a0180b2079501a19dd75a4ff12d4df6ae4a /avconv_vaapi.c | |
parent | 18c506e9e6e8df8b1d496d093077b8240ea68c28 (diff) | |
download | ffmpeg-9f7590f4e497c12693247d7f935a20d7773a64dd.tar.gz |
avconv_vaapi: use the hwcontext device creation API
Diffstat (limited to 'avconv_vaapi.c')
-rw-r--r-- | avconv_vaapi.c | 96 |
1 files changed, 4 insertions, 92 deletions
diff --git a/avconv_vaapi.c b/avconv_vaapi.c index 36b34e8cda..ddee72c53f 100644 --- a/avconv_vaapi.c +++ b/avconv_vaapi.c @@ -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; } |