1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright © 2016 Red Hat. 3*61046927SAndroid Build Coastguard Worker * Copyright © 2016 Bas Nieuwenhuizen 4*61046927SAndroid Build Coastguard Worker * 5*61046927SAndroid Build Coastguard Worker * based in part on anv driver which is: 6*61046927SAndroid Build Coastguard Worker * Copyright © 2015 Intel Corporation 7*61046927SAndroid Build Coastguard Worker * 8*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 9*61046927SAndroid Build Coastguard Worker */ 10*61046927SAndroid Build Coastguard Worker 11*61046927SAndroid Build Coastguard Worker #ifndef RADV_VIDEO_H 12*61046927SAndroid Build Coastguard Worker #define RADV_VIDEO_H 13*61046927SAndroid Build Coastguard Worker 14*61046927SAndroid Build Coastguard Worker #include "vk_video.h" 15*61046927SAndroid Build Coastguard Worker #include "radv_event.h" 16*61046927SAndroid Build Coastguard Worker 17*61046927SAndroid Build Coastguard Worker #include "ac_vcn.h" 18*61046927SAndroid Build Coastguard Worker 19*61046927SAndroid Build Coastguard Worker #define VL_MACROBLOCK_WIDTH 16 20*61046927SAndroid Build Coastguard Worker #define VL_MACROBLOCK_HEIGHT 16 21*61046927SAndroid Build Coastguard Worker 22*61046927SAndroid Build Coastguard Worker struct radv_physical_device; 23*61046927SAndroid Build Coastguard Worker struct rvcn_sq_var; 24*61046927SAndroid Build Coastguard Worker struct radv_cmd_buffer; 25*61046927SAndroid Build Coastguard Worker 26*61046927SAndroid Build Coastguard Worker #define RADV_ENC_MAX_RATE_LAYER 4 27*61046927SAndroid Build Coastguard Worker 28*61046927SAndroid Build Coastguard Worker struct radv_vid_mem { 29*61046927SAndroid Build Coastguard Worker struct radv_device_memory *mem; 30*61046927SAndroid Build Coastguard Worker VkDeviceSize offset; 31*61046927SAndroid Build Coastguard Worker VkDeviceSize size; 32*61046927SAndroid Build Coastguard Worker }; 33*61046927SAndroid Build Coastguard Worker 34*61046927SAndroid Build Coastguard Worker struct radv_video_session { 35*61046927SAndroid Build Coastguard Worker struct vk_video_session vk; 36*61046927SAndroid Build Coastguard Worker 37*61046927SAndroid Build Coastguard Worker uint32_t stream_handle; 38*61046927SAndroid Build Coastguard Worker unsigned stream_type; 39*61046927SAndroid Build Coastguard Worker bool interlaced; 40*61046927SAndroid Build Coastguard Worker bool encode; 41*61046927SAndroid Build Coastguard Worker enum { DPB_MAX_RES = 0, DPB_DYNAMIC_TIER_1, DPB_DYNAMIC_TIER_2 } dpb_type; 42*61046927SAndroid Build Coastguard Worker unsigned db_alignment; 43*61046927SAndroid Build Coastguard Worker 44*61046927SAndroid Build Coastguard Worker struct radv_vid_mem sessionctx; 45*61046927SAndroid Build Coastguard Worker struct radv_vid_mem ctx; 46*61046927SAndroid Build Coastguard Worker 47*61046927SAndroid Build Coastguard Worker unsigned dbg_frame_cnt; 48*61046927SAndroid Build Coastguard Worker rvcn_enc_session_init_t enc_session; 49*61046927SAndroid Build Coastguard Worker rvcn_enc_layer_control_t rc_layer_control; 50*61046927SAndroid Build Coastguard Worker rvcn_enc_rate_ctl_layer_init_t rc_layer_init[RADV_ENC_MAX_RATE_LAYER]; 51*61046927SAndroid Build Coastguard Worker rvcn_enc_rate_ctl_per_picture_t rc_per_pic[RADV_ENC_MAX_RATE_LAYER]; 52*61046927SAndroid Build Coastguard Worker uint32_t enc_preset_mode; 53*61046927SAndroid Build Coastguard Worker uint32_t enc_rate_control_method; 54*61046927SAndroid Build Coastguard Worker uint32_t enc_vbv_buffer_level; 55*61046927SAndroid Build Coastguard Worker bool enc_rate_control_default; 56*61046927SAndroid Build Coastguard Worker bool enc_need_begin; 57*61046927SAndroid Build Coastguard Worker bool enc_need_rate_control; 58*61046927SAndroid Build Coastguard Worker }; 59*61046927SAndroid Build Coastguard Worker 60*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(radv_video_session, vk.base, VkVideoSessionKHR, VK_OBJECT_TYPE_VIDEO_SESSION_KHR) 61*61046927SAndroid Build Coastguard Worker 62*61046927SAndroid Build Coastguard Worker struct radv_video_session_params { 63*61046927SAndroid Build Coastguard Worker struct vk_video_session_parameters vk; 64*61046927SAndroid Build Coastguard Worker }; 65*61046927SAndroid Build Coastguard Worker 66*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(radv_video_session_params, vk.base, VkVideoSessionParametersKHR, 67*61046927SAndroid Build Coastguard Worker VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR) 68*61046927SAndroid Build Coastguard Worker 69*61046927SAndroid Build Coastguard Worker void radv_init_physical_device_decoder(struct radv_physical_device *pdev); 70*61046927SAndroid Build Coastguard Worker 71*61046927SAndroid Build Coastguard Worker void radv_video_get_profile_alignments(struct radv_physical_device *pdev, const VkVideoProfileListInfoKHR *profile_list, 72*61046927SAndroid Build Coastguard Worker uint32_t *width_align_out, uint32_t *height_align_out); 73*61046927SAndroid Build Coastguard Worker 74*61046927SAndroid Build Coastguard Worker void radv_vcn_sq_header(struct radeon_cmdbuf *cs, struct rvcn_sq_var *sq, unsigned type); 75*61046927SAndroid Build Coastguard Worker 76*61046927SAndroid Build Coastguard Worker void radv_vcn_sq_tail(struct radeon_cmdbuf *cs, struct rvcn_sq_var *sq); 77*61046927SAndroid Build Coastguard Worker void radv_vcn_write_event(struct radv_cmd_buffer *cmd_buffer, struct radv_event *event, unsigned value); 78*61046927SAndroid Build Coastguard Worker 79*61046927SAndroid Build Coastguard Worker void radv_init_physical_device_encoder(struct radv_physical_device *pdevice); 80*61046927SAndroid Build Coastguard Worker void radv_probe_video_decode(struct radv_physical_device *pdev); 81*61046927SAndroid Build Coastguard Worker void radv_probe_video_encode(struct radv_physical_device *pdev); 82*61046927SAndroid Build Coastguard Worker void radv_video_enc_begin_coding(struct radv_cmd_buffer *cmd_buffer); 83*61046927SAndroid Build Coastguard Worker void radv_video_enc_end_coding(struct radv_cmd_buffer *cmd_buffer); 84*61046927SAndroid Build Coastguard Worker void radv_video_enc_control_video_coding(struct radv_cmd_buffer *cmd_buffer, 85*61046927SAndroid Build Coastguard Worker const VkVideoCodingControlInfoKHR *pCodingControlInfo); 86*61046927SAndroid Build Coastguard Worker VkResult radv_video_get_encode_session_memory_requirements(struct radv_device *device, struct radv_video_session *vid, 87*61046927SAndroid Build Coastguard Worker uint32_t *pMemoryRequirementsCount, 88*61046927SAndroid Build Coastguard Worker VkVideoSessionMemoryRequirementsKHR *pMemoryRequirements); 89*61046927SAndroid Build Coastguard Worker void radv_video_patch_encode_session_parameters(struct vk_video_session_parameters *params); 90*61046927SAndroid Build Coastguard Worker 91*61046927SAndroid Build Coastguard Worker #endif /* RADV_VIDEO_H */ 92