diff mbox series

[FFmpeg-devel,v5,1/5] avutil/hwcontext: add a function to get the AVHWDeviceType

Message ID 20230425072620.512-1-tong1.wu@intel.com
State New
Headers show
Series [FFmpeg-devel,v5,1/5] avutil/hwcontext: add a function to get the AVHWDeviceType | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Wu, Tong1 April 25, 2023, 7:26 a.m. UTC
Add a function to get the corresponding AVHWDeviceType from a given
hardware pixel format.

Signed-off-by: Tong Wu <tong1.wu@intel.com>
---
 libavutil/hwcontext.c | 11 +++++++++++
 libavutil/hwcontext.h | 12 ++++++++++++
 2 files changed, 23 insertions(+)
diff mbox series

Patch

diff --git a/libavutil/hwcontext.c b/libavutil/hwcontext.c
index 3396598269..3042bf9af0 100644
--- a/libavutil/hwcontext.c
+++ b/libavutil/hwcontext.c
@@ -80,6 +80,17 @@  static const char *const hw_type_names[] = {
     [AV_HWDEVICE_TYPE_VULKAN] = "vulkan",
 };
 
+enum AVHWDeviceType av_hwdevice_get_type_by_pix_fmt(enum AVPixelFormat fmt)
+{
+    for (int i = 0; hw_table[i]; i++) {
+        for (int j = 0; hw_table[i]->pix_fmts[j] != AV_PIX_FMT_NONE; j++) {
+            if (hw_table[i]->pix_fmts[j] == fmt)
+                return hw_table[i]->type;
+        }
+    }
+    return AV_HWDEVICE_TYPE_NONE;
+}
+
 enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name)
 {
     int type;
diff --git a/libavutil/hwcontext.h b/libavutil/hwcontext.h
index 7ff08c8608..940c7a6a46 100644
--- a/libavutil/hwcontext.h
+++ b/libavutil/hwcontext.h
@@ -229,6 +229,18 @@  typedef struct AVHWFramesContext {
     int width, height;
 } AVHWFramesContext;
 
+/**
+ * Get the device type by a given pixel format.
+ *
+ * This function only returns a preferred device type which supports the given
+ * pixel format. There is no guarantee that the device type is unique.
+ *
+ * @param fmt Pixel format from enum AVPixelFormat.
+ * @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if
+ *         not found.
+ */
+enum AVHWDeviceType av_hwdevice_get_type_by_pix_fmt(enum AVPixelFormat fmt);
+
 /**
  * Look up an AVHWDeviceType by name.
  *