On 3/11/2021 7:09 PM, suji.velupil...@broadcom.com wrote:
From: Suji Velupillai <suji.velupil...@broadcom.com>

Initial commit to add VKAPI hardware accelerator implementation.
The depedency component vkil source code can be obtained from github
https://github.com/Broadcom/vkil

Signed-off-by: Suji Velupillai <suji.velupil...@broadcom.com>
---
  configure                      |   8 +-
  doc/APIchanges                 |   4 +
  libavutil/Makefile             |   2 +
  libavutil/hwcontext.c          |   4 +
  libavutil/hwcontext.h          |   1 +
  libavutil/hwcontext_internal.h |   1 +
  libavutil/hwcontext_vkapi.c    | 522 +++++++++++++++++++++++++++++++++
  libavutil/hwcontext_vkapi.h    | 104 +++++++
  libavutil/pixdesc.c            |   4 +
  libavutil/pixfmt.h             |   6 +
  10 files changed, 655 insertions(+), 1 deletion(-)
  create mode 100644 libavutil/hwcontext_vkapi.c
  create mode 100644 libavutil/hwcontext_vkapi.h

[...]

diff --git a/doc/APIchanges b/doc/APIchanges
index 13350c0db0..ccab2e6465 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,10 @@ libavutil:     2017-10-21
API changes, most recent first: +2021-03-11 - xxxxxxxxxx - lavu yy.yy.yyy - hwcontext.h
+  Add AV_PIX_FMT_VKAPI
+  Add AV_HWDEVICE_TYPE_VKAPI and implementation.

Should ideally also mention the structs in hwcontext_vkapi.h in some form.

+
  2021-03-10 - xxxxxxxxxx - lavf 58.72.100 - avformat.h
    Change AVBufferRef related AVStream function and struct size
    parameter and fields type to size_t at next major bump.
diff --git a/libavutil/Makefile b/libavutil/Makefile
index 27bafe9e12..4044b133a3 100644
--- a/libavutil/Makefile
+++ b/libavutil/Makefile
@@ -45,6 +45,7 @@ HEADERS = adler32.h                                           
          \
            hwcontext_vaapi.h                                             \
            hwcontext_videotoolbox.h                                      \
            hwcontext_vdpau.h                                             \
+          hwcontext_vkapi.h                                             \

Add this header to the SKIPHEADERS list below in this file.

            hwcontext_vulkan.h                                            \
            imgutils.h                                                    \
            intfloat.h                                                    \
@@ -185,6 +186,7 @@ OBJS-$(CONFIG_QSV)                      += hwcontext_qsv.o
  OBJS-$(CONFIG_VAAPI)                    += hwcontext_vaapi.o
  OBJS-$(CONFIG_VIDEOTOOLBOX)             += hwcontext_videotoolbox.o
  OBJS-$(CONFIG_VDPAU)                    += hwcontext_vdpau.o
+OBJS-$(CONFIG_VKAPI)                    += hwcontext_vkapi.o
  OBJS-$(CONFIG_VULKAN)                   += hwcontext_vulkan.o
OBJS += $(COMPAT_OBJS:%=../compat/%)

[...]

diff --git a/libavutil/hwcontext_vkapi.h b/libavutil/hwcontext_vkapi.h
new file mode 100644
index 0000000000..096602b42e
--- /dev/null
+++ b/libavutil/hwcontext_vkapi.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2018 Broadcom
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVUTIL_HWCONTEXT_VKAPI_H
+#define AVUTIL_HWCONTEXT_VKAPI_H
+
+#include <vkil_api.h>
+
+#define VKAPI_METADATA_PLANE 4
+
+/**
+ * @file
+ * API-specific header for AV_HWDEVICE_TYPE_VKAPI.
+ */
+
+/**
+ * Allocated as AVHWDeviceContext.hwctx
+ */
+typedef struct VKAPIDeviceContext {

As this is an installed header, all structs and defines must have the AV prefix.

+    /**
+     * Holds pointers to hardware specific functions
+     */
+    vkil_api *ilapi;
+    /**
+     * Internal functions definitions
+     */
+    /**
+     * Get the hwprops reference from the AVFrame:data[3]
+     */
+    int (*frame_ref_hwprops)(const AVFrame *frame, void *phw_surface_desc);
+    /**
+     * Set the hwprops into AVFrame:data[3]
+     */
+    int (*frame_set_hwprops)(AVFrame *frame, const vkil_buffer_surface 
*hw_surface_desc);
+    /**
+     * Get the hwprops from AVFrame:data[3]
+     */
+    int (*frame_get_hwprops)(const AVFrame *frame, vkil_buffer_surface 
*hw_surface_desc);
+    /**
+     * Check if format is in an array
+     */
+    int (*fmt_is_in)(int fmt, const int *fmts);
+    /**
+     * Convert AVPixelFormat to VKAPI equivalent pixel format
+     */
+    int (*av2vk_fmt)(enum AVPixelFormat pixel_format);
+    /**
+     * Get no of buffer count reference in the hardware pool
+     */
+    int (*get_pool_occupancy)(AVHWFramesContext *ctx);
+} VKAPIDeviceContext;
+
+/**
+ * Contains color information for hardware
+ */
+typedef struct VKAPIColorContext {
+    enum AVColorRange range;
+    enum AVColorPrimaries primaries;
+    enum AVColorTransferCharacteristic trc;
+    enum AVColorSpace space;
+    enum AVChromaLocation chroma_location;
+} VKAPIColorContext;
+
+/**
+ * Allocated as AVHWFramesContext.hwctx
+ */
+typedef struct VKAPIFramesContext {
+    /**
+     * Handle to a hardware frame context
+     */
+    uint32_t handle;
+    /**
+     * Hardware component port associated to the frame context
+     */
+    uint32_t port_id;
+    uint32_t extra_port_id;
+    /**
+     * Color information
+     */
+    VKAPIColorContext color;
+    /**
+     * ilcontext associated to the frame context
+     */
+    vkil_context *ilctx;
+} VKAPIFramesContext;
+
+#endif /* AVUTIL_HWCONTEXT_VKAPI_H */
diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
index 2a919461a5..1d2f242e57 100644
--- a/libavutil/pixdesc.c
+++ b/libavutil/pixdesc.c
@@ -2391,6 +2391,10 @@ static const AVPixFmtDescriptor 
av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
          },
          .flags = AV_PIX_FMT_FLAG_PLANAR,
      },
+    [AV_PIX_FMT_VKAPI] = {
+        .name = "vkapi",
+        .flags = AV_PIX_FMT_FLAG_HWACCEL,
+    },
      [AV_PIX_FMT_VULKAN] = {
          .name = "vulkan",
          .flags = AV_PIX_FMT_FLAG_HWACCEL,
diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
index 46ef211add..3ae607a3d6 100644
--- a/libavutil/pixfmt.h
+++ b/libavutil/pixfmt.h
@@ -348,6 +348,12 @@ enum AVPixelFormat {
      AV_PIX_FMT_NV24,      ///< planar YUV 4:4:4, 24bpp, 1 plane for Y and 1 
plane for the UV components, which are interleaved (first byte U and the following 
byte V)
      AV_PIX_FMT_NV42,      ///< as above, but U and V bytes are swapped
+ /**
+     * VKAPI hardware acceleration.
+     * data[3] contains a pointer to the vkil_buffer_surface structure
+     */
+    AV_PIX_FMT_VKAPI,

New values must always be added at the end, right before AV_PIX_FMT_NB, to not break ABI.

+
      /**
       * Vulkan hardware images.
       *


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to