summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2016-06-26 15:36:27 +0200
committerHendrik Leppkes <h.leppkes@gmail.com>2016-06-26 15:36:27 +0200
commit4e6f2dbcd3ca0cee45a174ed8e50038810f7177b (patch)
treea59c7c8573fe4b41e809197c0e4fdd91b33d78e9
parent06a0e184359b75c3534bb88b08233efa53be8397 (diff)
parent9f7590f4e497c12693247d7f935a20d7773a64dd (diff)
downloadffmpeg-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.c96
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;
}