From patchwork Wed Dec 30 21:23:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 24692 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id ED23644B607 for ; Wed, 30 Dec 2020 23:23:27 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BAD8A68A0D0; Wed, 30 Dec 2020 23:23:27 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from w4.tutanota.de (w4.tutanota.de [81.3.6.165]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DE3EE68804C for ; Wed, 30 Dec 2020 23:23:21 +0200 (EET) Received: from w3.tutanota.de (unknown [192.168.1.164]) by w4.tutanota.de (Postfix) with ESMTP id 2A85C106025B for ; Wed, 30 Dec 2020 21:23:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1609363400; s=s1; d=lynne.ee; h=From:From:To:To:Subject:Subject:Content-Description:Content-ID:Content-Type:Content-Type:Content-Transfer-Encoding:Cc:Date:Date:In-Reply-To:MIME-Version:MIME-Version:Message-ID:Message-ID:Reply-To:References:Sender; bh=L3/Y9jaGNkzl+W0gjiIZ9SWEIi+xOs0yr2NHRj341dY=; b=rukaKwTjUzqAs/YpQbCT7DRK5PH/AFeCa2U4J0PHqk6kveAPQ489SeKoPTwouNB4 5qqshoI80prpUS0IfZdZPaRfOH/1mGXqB+bKW4MyEDJ+LlslRL5n0Rb/2XWAFh4Mnqa yLy/JEbbKmJxTBOskUmBsb0snAORJpCQ6DEaG1KUglWRM1Lt7bXkJ1aZ1H91vk2hbeD 8nhCReoy+5NjfvyjPLndFSq8XwYUKWvxCUOQWd8rEj5U6vkEbD+PDC1u7hRq6P19Pg8 QFfcEVBR/YjTYcUc00Qbo3DoBJr+l6fRxqgP6hgukJe72LqcDi7IkRWtEd+kUdTbYM2 7jL7SMwjIg== Date: Wed, 30 Dec 2020 22:23:20 +0100 (CET) From: Lynne To: Ffmpeg Devel Message-ID: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] hwcontext_drm: make dependency on Linux kernel headers optional X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This was introduced sometimes in between 4.4 and 4.15. And may not exist at all without an optional package. So to prevent a hard dependency on needing the Linux kernel headers to compile, make this optional. Patch attached. Subject: [PATCH] hwcontext_drm: make dependency on Linux kernel headers optional This was introduced sometimes in between 4.4 and 4.15. And may not exist at all without an optional package. So to prevent a hard dependency on needing the Linux kernel headers to compile, make this optional. --- configure | 2 ++ libavutil/hwcontext_drm.c | 34 ++++++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/configure b/configure index 90914752f1..5e2559ef2a 100755 --- a/configure +++ b/configure @@ -2125,6 +2125,7 @@ HEADERS_LIST=" ES2_gl_h gsm_h io_h + linux_dma_buf_h linux_perf_event_h machine_ioctl_bt848_h machine_ioctl_meteor_h @@ -6151,6 +6152,7 @@ check_headers dxgidebug.h check_headers dxva.h check_headers dxva2api.h -D_WIN32_WINNT=0x0600 check_headers io.h +check_headers linux/dma-buf.h check_headers linux/perf_event.h check_headers libcrystalhd/libcrystalhd_if.h check_headers malloc.h diff --git a/libavutil/hwcontext_drm.c b/libavutil/hwcontext_drm.c index ceacf683a0..aadbd0dc72 100644 --- a/libavutil/hwcontext_drm.c +++ b/libavutil/hwcontext_drm.c @@ -19,8 +19,15 @@ #include #include #include + +/* This was introduced sometimes in between 4.4 and 4.15. And may not exist + * at all without an optional package. So to prevent a hard dependency + * on needing the Linux kernel headers to compile, make this optional. */ +#include "config.h" +#if HAVE_LINUX_DMA_BUF_H #include #include +#endif #include #include @@ -97,14 +104,15 @@ static void drm_unmap_frame(AVHWFramesContext *hwfc, HWMapDescriptor *hwmap) { DRMMapping *map = hwmap->priv; - struct dma_buf_sync sync = { .flags = DMA_BUF_SYNC_END | map->sync_flags }; - int i, ret; - for (i = 0; i < map->nb_regions; i++) { - ret = ioctl(map->object[i], DMA_BUF_IOCTL_SYNC, &sync); + for (int i = 0; i < map->nb_regions; i++) { +#if HAVE_LINUX_DMA_BUF_H + struct dma_buf_sync sync = { .flags = DMA_BUF_SYNC_END | map->sync_flags }; + int ret = ioctl(map->object[i], DMA_BUF_IOCTL_SYNC, &sync); if (ret) av_log(hwfc, AV_LOG_ERROR, "Failed to issue ioctl sync to DRM object " "%d: %d.\n", map->object[i], errno); +#endif munmap(map->address[i], map->length[i]); } @@ -115,7 +123,9 @@ static int drm_map_frame(AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src, int flags) { const AVDRMFrameDescriptor *desc = (AVDRMFrameDescriptor*)src->data[0]; +#if HAVE_LINUX_DMA_BUF_H struct dma_buf_sync sync_start = { 0 }; +#endif DRMMapping *map; int err, i, p, plane; int mmap_prot; @@ -126,16 +136,18 @@ static int drm_map_frame(AVHWFramesContext *hwfc, return AVERROR(ENOMEM); mmap_prot = 0; - if (flags & AV_HWFRAME_MAP_READ) { + if (flags & AV_HWFRAME_MAP_READ) mmap_prot |= PROT_READ; - map->sync_flags |= DMA_BUF_SYNC_READ; - } - if (flags & AV_HWFRAME_MAP_WRITE) { + if (flags & AV_HWFRAME_MAP_WRITE) mmap_prot |= PROT_WRITE; - map->sync_flags |= DMA_BUF_SYNC_WRITE; - } +#if HAVE_LINUX_DMA_BUF_H + if (flags & AV_HWFRAME_MAP_READ) + map->sync_flags |= DMA_BUF_SYNC_READ; + if (flags & AV_HWFRAME_MAP_WRITE) + map->sync_flags |= DMA_BUF_SYNC_WRITE; sync_start.flags = DMA_BUF_SYNC_START | map->sync_flags; +#endif av_assert0(desc->nb_objects <= AV_DRM_MAX_PLANES); for (i = 0; i < desc->nb_objects; i++) { @@ -152,6 +164,7 @@ static int drm_map_frame(AVHWFramesContext *hwfc, map->length[i] = desc->objects[i].size; map->object[i] = desc->objects[i].fd; +#if HAVE_LINUX_DMA_BUF_H err = ioctl(desc->objects[i].fd, DMA_BUF_IOCTL_SYNC, &sync_start); if (err) { err = AVERROR(errno); @@ -159,6 +172,7 @@ static int drm_map_frame(AVHWFramesContext *hwfc, "%d: %d.\n", desc->objects[i].fd, errno); goto fail; } +#endif } map->nb_regions = i;