MCPcopy Create free account
hub / github.com/WiVRn/WiVRn / select_encoder

Method select_encoder

server/encoder/encoder_settings.cpp:221–265  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

219 vk(vk), info(info), nvidia(is_nvidia(vk.physical_device)) {}
220
221 std::pair<std::string, video_codec> select_encoder(const configuration::encoder & config)
222 {
223 if (config.codec == video_codec::raw or config.name == encoder_raw)
224 return {encoder_raw, video_codec::raw};
225
226#if WIVRN_USE_NVENC
227 if ((nvidia and config.name.empty()) or config.name == encoder_nvenc)
228 {
229 for (auto codec: config.codec ? std::vector{*config.codec} : info.supported_codecs)
230 {
231 if (check_nvenc(codec))
232 return {encoder_nvenc, codec};
233 }
234 }
235#endif
236
237#if WIVRN_USE_VULKAN_ENCODE
238 if (config.name.empty() or config.name == encoder_vulkan)
239 {
240 for (auto codec: config.codec ? std::vector{*config.codec} : info.supported_codecs)
241 {
242 if (has_vk(codec))
243 return {encoder_vulkan, codec};
244 }
245 }
246#endif
247
248#if WIVRN_USE_VAAPI
249 if (config.name.empty() or config.name == encoder_vaapi)
250 {
251 for (auto codec: config.codec ? std::vector{*config.codec} : info.supported_codecs)
252 {
253 if (check_vaapi(codec))
254 return {encoder_vaapi, codec};
255 }
256 }
257#endif
258 U_LOG_W("No suitable hardware accelerated codec found");
259#if WIVRN_USE_X264
260 if (config.name.empty() or config.name == encoder_x264)
261 return {encoder_x264, video_codec::h264};
262#endif
263
264 throw std::runtime_error("Failed to find a suitable video encoder");
265 }
266};
267} // namespace
268

Callers 1

get_encoder_settingsFunction · 0.80

Calls 1

emptyMethod · 0.45

Tested by

no test coverage detected