| 139 | } |
| 140 | |
| 141 | static int vulkan_encode_issue(AVCodecContext *avctx, |
| 142 | FFHWBaseEncodePicture *base_pic) |
| 143 | { |
| 144 | FFVulkanEncodeContext *ctx = avctx->priv_data; |
| 145 | FFVulkanFunctions *vk = &ctx->s.vkfn; |
| 146 | |
| 147 | const size_t size_align = ctx->caps.minBitstreamBufferSizeAlignment; |
| 148 | |
| 149 | FFVulkanEncodePicture *vp = base_pic->priv; |
| 150 | AVFrame *src = (AVFrame *)base_pic->input_image; |
| 151 | AVVkFrame *vkf = (AVVkFrame *)src->data[0]; |
| 152 | |
| 153 | int err, max_pkt_size; |
| 154 | |
| 155 | FFVkBuffer *sd_buf; |
| 156 | |
| 157 | int slot_index = -1; |
| 158 | FFVkExecContext *exec; |
| 159 | VkCommandBuffer cmd_buf; |
| 160 | VkImageMemoryBarrier2 img_bar[37]; |
| 161 | int nb_img_bar = 0; |
| 162 | |
| 163 | /* Coding start/end */ |
| 164 | VkVideoBeginCodingInfoKHR encode_start; |
| 165 | VkVideoEndCodingInfoKHR encode_end = { |
| 166 | .sType = VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR, |
| 167 | }; |
| 168 | |
| 169 | VkVideoEncodeRateControlLayerInfoKHR rc_layer; |
| 170 | VkVideoEncodeRateControlInfoKHR rc_info; |
| 171 | VkVideoEncodeQualityLevelInfoKHR q_info; |
| 172 | VkVideoCodingControlInfoKHR encode_ctrl; |
| 173 | |
| 174 | VkVideoReferenceSlotInfoKHR ref_slot[37]; |
| 175 | VkVideoEncodeInfoKHR encode_info; |
| 176 | |
| 177 | /* Create packet data buffer */ |
| 178 | max_pkt_size = FFALIGN(3 * ctx->base.surface_width * ctx->base.surface_height + (1 << 16), |
| 179 | ctx->caps.minBitstreamBufferSizeAlignment); |
| 180 | |
| 181 | err = ff_vk_get_pooled_buffer(&ctx->s, &ctx->buf_pool, &vp->pkt_buf, |
| 182 | VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, |
| 183 | &ctx->profile_list, max_pkt_size, |
| 184 | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | |
| 185 | ctx->s.host_cached_flag); |
| 186 | if (err < 0) |
| 187 | return err; |
| 188 | |
| 189 | sd_buf = (FFVkBuffer *)vp->pkt_buf->data; |
| 190 | |
| 191 | /* Setup rate control */ |
| 192 | err = init_pic_rc(avctx, base_pic, &rc_info, &rc_layer); |
| 193 | if (err < 0) |
| 194 | return err; |
| 195 | |
| 196 | q_info = (VkVideoEncodeQualityLevelInfoKHR) { |
| 197 | .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR, |
| 198 | .pNext = &rc_info, |
nothing calls this directly
no test coverage detected