427 {
428 auto extrinsicsToHvt = [](Extrinsics ex){
431 .x = ex.position.x,
432 .y = ex.position.y,
433 .z = ex.position.z
434 },
436 .yaw = ex.rotation.x,
437 .pitch = ex.rotation.y,
438 .roll = ex.rotation.z
439 }
440 };
441 };
442
443
444 currentSyncSlot = (currentSyncSlot+1) % syncInfos.size();
445 auto& currentSync = syncInfos.at(currentSyncSlot);
446
447
448 std::vector<HvtStreamFrameInfo> hvtFrameInfos(outFrameInfos.size());
451 .frameInfoCount = (uint32_t)hvtFrameInfos.size(),
452 .pStreamFrameInfos = hvtFrameInfos.data(),
453 .signalSemaphore = currentSync.acquireHvt
454 };
455 hvtCheck(hvt.acquireStreamsFrames, context, &ainfos);
456
457
458
459 for(int i = 0; i < outFrameInfos.size(); i++) {
460 const auto& hfi = hvtFrameInfos.at(i);
461 auto& fi = outFrameInfos[i];
462
463 auto ext = hfi.extrinsics;
464 auto intr = hfi.intrinsics;
465
466 if (cachedStreamParameters.at(i).projectionType == ProjectionType::PROJECTION_PERSPECTIVE) {
467 fi = StreamFrameInfo{
468 .imageIndex = hfi.imageIndex,
469 .extrinsics = Extrinsics{
470 .position = {ext.position.x,ext.position.y,ext.position.z},
471 .rotation = {ext.rotation.yaw, ext.rotation.pitch, ext.rotation.roll}
472 },
474 PerspectiveIntrinsics{
475 .focals = {hfi.intrinsics.perspective.focalX, hfi.intrinsics.perspective.focalY},
476 .principle = {hfi.intrinsics.perspective.principlePointX, hfi.intrinsics.perspective.principlePointY}
477 }
478 }
479 };
480 }
481 else if(cachedStreamParameters.at(i).projectionType == ProjectionType::PROJECTION_EQUIRECTANGULAR) {
482 fi = StreamFrameInfo{
483 .imageIndex = hfi.imageIndex,
484 .extrinsics = Extrinsics{
485 .position = {ext.position.x,ext.position.y,ext.position.z},
486 .rotation = {ext.rotation.yaw, ext.rotation.pitch, ext.rotation.roll}
487 },
489 EquirectangularIntrinsics{
490 .verticalRange = {hfi.intrinsics.equirectangular.verticalRange[0], hfi.intrinsics.equirectangular.verticalRange[1]},
491 .horizontalRange = {hfi.intrinsics.equirectangular.horizontalRange[0], hfi.intrinsics.equirectangular.horizontalRange[1]}
492 }
493 }
494 };
495 }
496 else {
497 throw std::runtime_error("Invalid projection type !");
498 }
499 }
500
501
502 vk::PipelineStageFlags waitStage = vk::PipelineStageFlagBits::eTopOfPipe;
504 vk::SubmitInfo(*currentSync.acquireSemaphore, waitStage));
505}
Parameters for query of the current frames infos.
HvtExtrinsics viewerExtrinsics