diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2016-06-26 15:36:27 +0200 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2016-06-26 15:36:27 +0200 |
commit | 4e6f2dbcd3ca0cee45a174ed8e50038810f7177b (patch) | |
tree | a59c7c8573fe4b41e809197c0e4fdd91b33d78e9 | |
parent | 06a0e184359b75c3534bb88b08233efa53be8397 (diff) | |
parent | 9f7590f4e497c12693247d7f935a20d7773a64dd (diff) | |
download | ffmpeg-4e6f2dbcd3ca0cee45a174ed8e50038810f7177b.tar.gz |
Merge commit '9f7590f4e497c12693247d7f935a20d7773a64dd'
* commit '9f7590f4e497c12693247d7f935a20d7773a64dd':
avconv_vaapi: use the hwcontext device creation API
Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
-rw-r--r-- | ffmpeg_vaapi.c | 96 |
1 files changed, 4 insertions, 92 deletions
diff --git a/ffmpeg_vaapi.c b/ffmpeg_vaapi.c index d76c121f32..809059778d 100644 --- a/ffmpeg_vaapi.c +++ b/ffmpeg_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; } |