Mesa (main): gallium/video: Add video post processing interface

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jul 21 23:05:21 UTC 2022


Module: Mesa
Branch: main
Commit: d09cf4333ceae649a17ecb2559fdef7803da3213
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d09cf4333ceae649a17ecb2559fdef7803da3213

Author: Sil Vilerino <sivileri at microsoft.com>
Date:   Thu Jul 21 12:34:55 2022 -0400

gallium/video: Add video post processing interface

Add process_frame to pipe_video codec
Add new structures/caps for video post-processing with rotation,
flip, alpha blending, crop, and scaling, via the video engine.

Reviewed-by: Jesse Natalie <jenatali at microsoft.com>
Reviewed-by: Ruijing Dong <ruijing.dong at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17557>

---

 src/gallium/include/pipe/p_video_codec.h |  7 +++++++
 src/gallium/include/pipe/p_video_enums.h | 29 +++++++++++++++++++++++++++++
 src/gallium/include/pipe/p_video_state.h | 17 +++++++++++++++++
 3 files changed, 53 insertions(+)

diff --git a/src/gallium/include/pipe/p_video_codec.h b/src/gallium/include/pipe/p_video_codec.h
index 5ca587a6eb0..3a8a9604b09 100644
--- a/src/gallium/include/pipe/p_video_codec.h
+++ b/src/gallium/include/pipe/p_video_codec.h
@@ -95,6 +95,13 @@ struct pipe_video_codec
                             struct pipe_resource *destination,
                             void **feedback);
 
+   /**
+    * Perform post-process effect
+    */
+   void (*process_frame)(struct pipe_video_codec *codec,
+                         struct pipe_video_buffer *source,
+                         const struct pipe_vpp_desc *process_properties);
+
    /**
     * end decoding of the current frame
     */
diff --git a/src/gallium/include/pipe/p_video_enums.h b/src/gallium/include/pipe/p_video_enums.h
index e7cd4fef860..7d157364479 100644
--- a/src/gallium/include/pipe/p_video_enums.h
+++ b/src/gallium/include/pipe/p_video_enums.h
@@ -95,8 +95,37 @@ enum pipe_video_cap
    PIPE_VIDEO_CAP_ENC_MAX_SLICES_PER_FRAME = 13,
    PIPE_VIDEO_CAP_ENC_SLICES_STRUCTURE = 14,
    PIPE_VIDEO_CAP_ENC_MAX_REFERENCES_PER_FRAME = 15,
+   PIPE_VIDEO_CAP_VPP_ORIENTATION_MODES = 16,
+   PIPE_VIDEO_CAP_VPP_BLEND_MODES = 17,
+   PIPE_VIDEO_CAP_VPP_MAX_INPUT_WIDTH = 18,
+   PIPE_VIDEO_CAP_VPP_MAX_INPUT_HEIGHT = 19,
+   PIPE_VIDEO_CAP_VPP_MIN_INPUT_WIDTH = 20,
+   PIPE_VIDEO_CAP_VPP_MIN_INPUT_HEIGHT = 21,
+   PIPE_VIDEO_CAP_VPP_MAX_OUTPUT_WIDTH = 22,
+   PIPE_VIDEO_CAP_VPP_MAX_OUTPUT_HEIGHT = 23,
+   PIPE_VIDEO_CAP_VPP_MIN_OUTPUT_WIDTH = 24,
+   PIPE_VIDEO_CAP_VPP_MIN_OUTPUT_HEIGHT = 25,
 };
 
+/* To be used with PIPE_VIDEO_CAP_VPP_ORIENTATION_MODES and for VPP state*/
+enum pipe_video_vpp_orientation
+{
+   PIPE_VIDEO_VPP_ORIENTATION_DEFAULT = 0x0,
+   PIPE_VIDEO_VPP_ROTATION_90 = 0x01,
+   PIPE_VIDEO_VPP_ROTATION_180 = 0x02,
+   PIPE_VIDEO_VPP_ROTATION_270 = 0x04,
+   PIPE_VIDEO_VPP_FLIP_HORIZONTAL = 0x08,
+   PIPE_VIDEO_VPP_FLIP_VERTICAL = 0x10,
+};
+
+/* To be used with PIPE_VIDEO_CAP_VPP_BLEND_MODES and for VPP state*/
+enum pipe_video_vpp_blend_mode
+{
+   PIPE_VIDEO_VPP_BLEND_MODE_NONE = 0x0,
+   PIPE_VIDEO_VPP_BLEND_MODE_GLOBAL_ALPHA = 0x1,
+};
+
+
 /* To be used with cap PIPE_VIDEO_CAP_ENC_SLICES_STRUCTURE*/
 /**
  * pipe_video_cap_slice_structure
diff --git a/src/gallium/include/pipe/p_video_state.h b/src/gallium/include/pipe/p_video_state.h
index 9221fc69c70..4d0495c715b 100755
--- a/src/gallium/include/pipe/p_video_state.h
+++ b/src/gallium/include/pipe/p_video_state.h
@@ -34,6 +34,7 @@
 #include "pipe/p_screen.h"
 #include "util/u_hash_table.h"
 #include "util/u_inlines.h"
+#include "util/u_rect.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -963,6 +964,22 @@ struct pipe_av1_picture_desc
    } slice_parameter;
 };
 
+struct pipe_vpp_blend
+{
+   enum pipe_video_vpp_blend_mode mode;
+   /* To be used with PIPE_VIDEO_VPP_BLEND_MODE_GLOBAL_ALPHA */
+   float global_alpha;
+};
+
+struct pipe_vpp_desc
+{
+   struct pipe_picture_desc base;
+   struct u_rect src_region;
+   struct u_rect dst_region;
+   enum pipe_video_vpp_orientation orientation;
+   struct pipe_vpp_blend blend;
+};
+
 #ifdef __cplusplus
 }
 #endif



More information about the mesa-commit mailing list