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