Repository: alvr-org/ALVR
Branch: master
Commit: 1a4194ff1379
Files: 495
Total size: 3.6 MB
Directory structure:
gitextract_unk25vpb/
├── .cargo/
│ └── config.toml
├── .clang-format
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── prepare-release.yml
│ ├── queue.yml
│ ├── rust.yml
│ ├── stale.yml
│ └── wiki.yml
├── .gitignore
├── .gitmodules
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── LICENSE
├── README.md
├── about.toml
├── alvr/
│ ├── adb/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── commands.rs
│ │ ├── lib.rs
│ │ └── parse.rs
│ ├── audio/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── linux.rs
│ │ └── windows.rs
│ ├── client_core/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── build.rs
│ │ ├── cbindgen.toml
│ │ └── src/
│ │ ├── audio.rs
│ │ ├── c_api.rs
│ │ ├── connection.rs
│ │ ├── lib.rs
│ │ ├── logging_backend.rs
│ │ ├── sockets.rs
│ │ ├── statistics.rs
│ │ ├── storage.rs
│ │ └── video_decoder/
│ │ ├── android.rs
│ │ └── mod.rs
│ ├── client_mock/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ └── main.rs
│ ├── client_openxr/
│ │ ├── Cargo.toml
│ │ ├── cbindgen.toml
│ │ ├── resources/
│ │ │ ├── drawable/
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ └── ic_launcher.xml
│ │ │ └── values/
│ │ │ └── ic_launcher_background.xml
│ │ └── src/
│ │ ├── c_api.rs
│ │ ├── extra_extensions/
│ │ │ ├── body_tracking_bd.rs
│ │ │ ├── body_tracking_fb.rs
│ │ │ ├── eye_gaze_interaction.rs
│ │ │ ├── eye_tracking_social.rs
│ │ │ ├── face_tracking2_fb.rs
│ │ │ ├── face_tracking_pico.rs
│ │ │ ├── facial_tracking_htc.rs
│ │ │ ├── mod.rs
│ │ │ ├── motion_tracking_bd.rs
│ │ │ ├── multimodal_input.rs
│ │ │ ├── passthrough_fb.rs
│ │ │ └── passthrough_htc.rs
│ │ ├── graphics.rs
│ │ ├── interaction.rs
│ │ ├── lib.rs
│ │ ├── lobby.rs
│ │ ├── passthrough.rs
│ │ └── stream.rs
│ ├── common/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── src/
│ │ ├── average.rs
│ │ ├── c_api.rs
│ │ ├── connection_result.rs
│ │ ├── inputs.rs
│ │ ├── lib.rs
│ │ ├── logging.rs
│ │ ├── primitives.rs
│ │ └── version.rs
│ ├── dashboard/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ ├── build.rs
│ │ └── src/
│ │ ├── dashboard/
│ │ │ ├── components/
│ │ │ │ ├── about.rs
│ │ │ │ ├── debug.rs
│ │ │ │ ├── devices.rs
│ │ │ │ ├── installation.rs
│ │ │ │ ├── logs.rs
│ │ │ │ ├── mod.rs
│ │ │ │ ├── new_version_popup.rs
│ │ │ │ ├── notifications.rs
│ │ │ │ ├── settings.rs
│ │ │ │ ├── settings_controls/
│ │ │ │ │ ├── array.rs
│ │ │ │ │ ├── boolean.rs
│ │ │ │ │ ├── choice.rs
│ │ │ │ │ ├── collapsible.rs
│ │ │ │ │ ├── dictionary.rs
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── notice.rs
│ │ │ │ │ ├── number.rs
│ │ │ │ │ ├── optional.rs
│ │ │ │ │ ├── presets/
│ │ │ │ │ │ ├── builtin_schema.rs
│ │ │ │ │ │ ├── higher_order_choice.rs
│ │ │ │ │ │ ├── mirror.rs
│ │ │ │ │ │ ├── mod.rs
│ │ │ │ │ │ └── schema.rs
│ │ │ │ │ ├── reset.rs
│ │ │ │ │ ├── section.rs
│ │ │ │ │ ├── switch.rs
│ │ │ │ │ ├── text.rs
│ │ │ │ │ ├── up_down.rs
│ │ │ │ │ └── vector.rs
│ │ │ │ ├── setup_wizard.rs
│ │ │ │ └── statistics.rs
│ │ │ └── mod.rs
│ │ ├── data_sources.rs
│ │ ├── data_sources_wasm.rs
│ │ ├── linux_checks.rs
│ │ ├── logging_backend.rs
│ │ ├── main.rs
│ │ └── steamvr_launcher/
│ │ ├── linux_steamvr.rs
│ │ ├── mod.rs
│ │ └── windows_steamvr.rs
│ ├── events/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ └── lib.rs
│ ├── filesystem/
│ │ ├── Cargo.toml
│ │ ├── build.rs
│ │ └── src/
│ │ └── lib.rs
│ ├── graphics/
│ │ ├── Cargo.toml
│ │ ├── resources/
│ │ │ ├── lobby_line.wgsl
│ │ │ ├── lobby_quad.wgsl
│ │ │ ├── staging_fragment.glsl
│ │ │ ├── staging_vertex.glsl
│ │ │ └── stream.wgsl
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── lobby.rs
│ │ ├── staging.rs
│ │ └── stream.rs
│ ├── gui_common/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── basic_components/
│ │ │ ├── button_group.rs
│ │ │ ├── mod.rs
│ │ │ ├── modal.rs
│ │ │ └── switch.rs
│ │ ├── lib.rs
│ │ └── theme.rs
│ ├── launcher/
│ │ ├── Cargo.toml
│ │ ├── build.rs
│ │ └── src/
│ │ ├── actions.rs
│ │ ├── main.rs
│ │ └── ui.rs
│ ├── packets/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ └── lib.rs
│ ├── server_core/
│ │ ├── Cargo.toml
│ │ ├── cbindgen.toml
│ │ └── src/
│ │ ├── bitrate.rs
│ │ ├── c_api.rs
│ │ ├── connection.rs
│ │ ├── hand_gestures.rs
│ │ ├── haptics.rs
│ │ ├── input_mapping.rs
│ │ ├── lib.rs
│ │ ├── logging_backend.rs
│ │ ├── sockets.rs
│ │ ├── statistics.rs
│ │ ├── tracking/
│ │ │ ├── body.rs
│ │ │ ├── face.rs
│ │ │ ├── mod.rs
│ │ │ └── vmc.rs
│ │ └── web_server.rs
│ ├── server_io/
│ │ ├── Cargo.toml
│ │ ├── README.md
│ │ └── src/
│ │ ├── firewall.rs
│ │ ├── lib.rs
│ │ ├── openvr_drivers.rs
│ │ └── openvrpaths.rs
│ ├── server_openvr/
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── LICENSE-Valve
│ │ ├── build.rs
│ │ ├── cpp/
│ │ │ ├── ALVR-common/
│ │ │ │ ├── common-utils.cpp
│ │ │ │ ├── common-utils.h
│ │ │ │ ├── exception.cpp
│ │ │ │ ├── exception.h
│ │ │ │ └── packet_types.h
│ │ │ ├── alvr_server/
│ │ │ │ ├── ChaperoneUpdater.cpp
│ │ │ │ ├── Controller.cpp
│ │ │ │ ├── Controller.h
│ │ │ │ ├── FakeViveTracker.cpp
│ │ │ │ ├── FakeViveTracker.h
│ │ │ │ ├── HMD.cpp
│ │ │ │ ├── HMD.h
│ │ │ │ ├── IDRScheduler.cpp
│ │ │ │ ├── IDRScheduler.h
│ │ │ │ ├── Logger.cpp
│ │ │ │ ├── Logger.h
│ │ │ │ ├── NalParsing.cpp
│ │ │ │ ├── Paths.cpp
│ │ │ │ ├── Paths.h
│ │ │ │ ├── PoseHistory.cpp
│ │ │ │ ├── PoseHistory.h
│ │ │ │ ├── Settings.cpp
│ │ │ │ ├── Settings.h
│ │ │ │ ├── TrackedDevice.cpp
│ │ │ │ ├── TrackedDevice.h
│ │ │ │ ├── Utils.h
│ │ │ │ ├── ViveTrackerProxy.cpp
│ │ │ │ ├── ViveTrackerProxy.h
│ │ │ │ ├── alvr_server.cpp
│ │ │ │ ├── bindings.h
│ │ │ │ ├── driverlog.cpp
│ │ │ │ ├── driverlog.h
│ │ │ │ ├── include/
│ │ │ │ │ ├── openvr_math.h
│ │ │ │ │ └── picojson.h
│ │ │ │ ├── nvEncodeAPI.h
│ │ │ │ ├── openvr_driver_wrap.h
│ │ │ │ └── shader/
│ │ │ │ ├── ColorCorrectionPixelShader.hlsl
│ │ │ │ ├── CompressAxisAlignedPixelShader.hlsl
│ │ │ │ ├── FoveatedRendering.hlsli
│ │ │ │ ├── FrameRender.fx
│ │ │ │ ├── FrameRenderPS.hlsl
│ │ │ │ ├── FrameRenderVS.hlsl
│ │ │ │ └── rgbtoyuv420.hlsl
│ │ │ ├── platform/
│ │ │ │ ├── linux/
│ │ │ │ │ ├── CEncoder.cpp
│ │ │ │ │ ├── CEncoder.h
│ │ │ │ │ ├── CrashHandler.cpp
│ │ │ │ │ ├── EncodePipeline.cpp
│ │ │ │ │ ├── EncodePipeline.h
│ │ │ │ │ ├── EncodePipelineNvEnc.cpp
│ │ │ │ │ ├── EncodePipelineNvEnc.h
│ │ │ │ │ ├── EncodePipelineSW.cpp
│ │ │ │ │ ├── EncodePipelineSW.h
│ │ │ │ │ ├── EncodePipelineVAAPI.cpp
│ │ │ │ │ ├── EncodePipelineVAAPI.h
│ │ │ │ │ ├── FormatConverter.cpp
│ │ │ │ │ ├── FormatConverter.h
│ │ │ │ │ ├── FrameRender.cpp
│ │ │ │ │ ├── FrameRender.h
│ │ │ │ │ ├── Renderer.cpp
│ │ │ │ │ ├── Renderer.h
│ │ │ │ │ ├── ffmpeg_helper.cpp
│ │ │ │ │ ├── ffmpeg_helper.h
│ │ │ │ │ ├── protocol.h
│ │ │ │ │ └── shader/
│ │ │ │ │ ├── color.comp
│ │ │ │ │ ├── color.comp.spv
│ │ │ │ │ ├── ffr.comp
│ │ │ │ │ ├── ffr.comp.spv
│ │ │ │ │ ├── quad.comp
│ │ │ │ │ ├── quad.comp.spv
│ │ │ │ │ ├── rgbtoyuv420.comp
│ │ │ │ │ └── rgbtoyuv420.comp.spv
│ │ │ │ ├── macos/
│ │ │ │ │ ├── CEncoder.h
│ │ │ │ │ └── CrashHandler.cpp
│ │ │ │ └── win32/
│ │ │ │ ├── CEncoder.cpp
│ │ │ │ ├── CEncoder.h
│ │ │ │ ├── ColorCorrectionPixelShader.cso
│ │ │ │ ├── CompressAxisAlignedPixelShader.cso
│ │ │ │ ├── CrashHandler.cpp
│ │ │ │ ├── FFR.cpp
│ │ │ │ ├── FFR.h
│ │ │ │ ├── FrameRender.cpp
│ │ │ │ ├── FrameRender.h
│ │ │ │ ├── FrameRenderPS.cso
│ │ │ │ ├── FrameRenderVS.cso
│ │ │ │ ├── NvCodecUtils.h
│ │ │ │ ├── NvEncoder.cpp
│ │ │ │ ├── NvEncoder.h
│ │ │ │ ├── NvEncoderD3D11.cpp
│ │ │ │ ├── NvEncoderD3D11.h
│ │ │ │ ├── OvrDirectModeComponent.cpp
│ │ │ │ ├── OvrDirectModeComponent.h
│ │ │ │ ├── QuadVertexShader.cso
│ │ │ │ ├── VideoEncoder.cpp
│ │ │ │ ├── VideoEncoder.h
│ │ │ │ ├── VideoEncoderAMF.cpp
│ │ │ │ ├── VideoEncoderAMF.h
│ │ │ │ ├── VideoEncoderNVENC.cpp
│ │ │ │ ├── VideoEncoderNVENC.h
│ │ │ │ ├── VideoEncoderSW.cpp
│ │ │ │ ├── VideoEncoderSW.h
│ │ │ │ ├── VideoEncoderVPL.cpp
│ │ │ │ ├── VideoEncoderVPL.h
│ │ │ │ ├── d3d-render-utils/
│ │ │ │ │ ├── QuadVertexShader.hlsl
│ │ │ │ │ ├── RenderPipeline.cpp
│ │ │ │ │ ├── RenderPipeline.h
│ │ │ │ │ ├── RenderPipelineYUV.cpp
│ │ │ │ │ ├── RenderPipelineYUV.h
│ │ │ │ │ ├── RenderUtils.cpp
│ │ │ │ │ └── RenderUtils.h
│ │ │ │ ├── rgbtoyuv420.cso
│ │ │ │ └── shared/
│ │ │ │ ├── d3drender.cpp
│ │ │ │ └── d3drender.h
│ │ │ └── shared/
│ │ │ ├── amf/
│ │ │ │ └── public/
│ │ │ │ ├── common/
│ │ │ │ │ ├── AMFFactory.cpp
│ │ │ │ │ ├── AMFFactory.h
│ │ │ │ │ ├── AMFMath.h
│ │ │ │ │ ├── AMFSTL.cpp
│ │ │ │ │ ├── AMFSTL.h
│ │ │ │ │ ├── ByteArray.h
│ │ │ │ │ ├── CPUCaps.h
│ │ │ │ │ ├── CurrentTimeImpl.cpp
│ │ │ │ │ ├── CurrentTimeImpl.h
│ │ │ │ │ ├── DataStream.h
│ │ │ │ │ ├── DataStreamFactory.cpp
│ │ │ │ │ ├── DataStreamFile.cpp
│ │ │ │ │ ├── DataStreamFile.h
│ │ │ │ │ ├── DataStreamMemory.cpp
│ │ │ │ │ ├── DataStreamMemory.h
│ │ │ │ │ ├── IOCapsImpl.cpp
│ │ │ │ │ ├── IOCapsImpl.h
│ │ │ │ │ ├── InterfaceImpl.h
│ │ │ │ │ ├── ObservableImpl.h
│ │ │ │ │ ├── PropertyStorageExImpl.cpp
│ │ │ │ │ ├── PropertyStorageExImpl.h
│ │ │ │ │ ├── PropertyStorageImpl.h
│ │ │ │ │ ├── Thread.cpp
│ │ │ │ │ ├── Thread.h
│ │ │ │ │ ├── TraceAdapter.cpp
│ │ │ │ │ ├── TraceAdapter.h
│ │ │ │ │ └── Windows/
│ │ │ │ │ └── ThreadWindows.cpp
│ │ │ │ └── include/
│ │ │ │ ├── components/
│ │ │ │ │ ├── Ambisonic2SRenderer.h
│ │ │ │ │ ├── AudioCapture.h
│ │ │ │ │ ├── Capture.h
│ │ │ │ │ ├── ChromaKey.h
│ │ │ │ │ ├── ColorSpace.h
│ │ │ │ │ ├── Component.h
│ │ │ │ │ ├── ComponentCaps.h
│ │ │ │ │ ├── CursorCapture.h
│ │ │ │ │ ├── DisplayCapture.h
│ │ │ │ │ ├── FFMPEGAudioConverter.h
│ │ │ │ │ ├── FFMPEGAudioDecoder.h
│ │ │ │ │ ├── FFMPEGAudioEncoder.h
│ │ │ │ │ ├── FFMPEGComponents.h
│ │ │ │ │ ├── FFMPEGEncoderAV1.h
│ │ │ │ │ ├── FFMPEGEncoderH264.h
│ │ │ │ │ ├── FFMPEGEncoderHEVC.h
│ │ │ │ │ ├── FFMPEGFileDemuxer.h
│ │ │ │ │ ├── FFMPEGFileMuxer.h
│ │ │ │ │ ├── FFMPEGVideoDecoder.h
│ │ │ │ │ ├── FRC.h
│ │ │ │ │ ├── HQScaler.h
│ │ │ │ │ ├── MediaSource.h
│ │ │ │ │ ├── PreAnalysis.h
│ │ │ │ │ ├── PreProcessing.h
│ │ │ │ │ ├── SupportedCodecs.h
│ │ │ │ │ ├── VQEnhancer.h
│ │ │ │ │ ├── VideoCapture.h
│ │ │ │ │ ├── VideoConverter.h
│ │ │ │ │ ├── VideoDecoderUVD.h
│ │ │ │ │ ├── VideoEncoderAV1.h
│ │ │ │ │ ├── VideoEncoderHEVC.h
│ │ │ │ │ ├── VideoEncoderVCE.h
│ │ │ │ │ ├── VideoStitch.h
│ │ │ │ │ └── ZCamLiveStream.h
│ │ │ │ └── core/
│ │ │ │ ├── AudioBuffer.h
│ │ │ │ ├── Buffer.h
│ │ │ │ ├── Compute.h
│ │ │ │ ├── ComputeFactory.h
│ │ │ │ ├── Context.h
│ │ │ │ ├── CurrentTime.h
│ │ │ │ ├── D3D12AMF.h
│ │ │ │ ├── Data.h
│ │ │ │ ├── Debug.h
│ │ │ │ ├── Dump.h
│ │ │ │ ├── Factory.h
│ │ │ │ ├── Interface.h
│ │ │ │ ├── Plane.h
│ │ │ │ ├── Platform.h
│ │ │ │ ├── PropertyStorage.h
│ │ │ │ ├── PropertyStorageEx.h
│ │ │ │ ├── Result.h
│ │ │ │ ├── Surface.h
│ │ │ │ ├── Trace.h
│ │ │ │ ├── Variant.h
│ │ │ │ ├── Version.h
│ │ │ │ └── VulkanAMF.h
│ │ │ ├── backward.cpp
│ │ │ ├── backward.hpp
│ │ │ ├── threadtools.cpp
│ │ │ └── threadtools.h
│ │ └── src/
│ │ ├── graphics.rs
│ │ ├── lib.rs
│ │ ├── props.rs
│ │ └── tracking.rs
│ ├── session/
│ │ ├── Cargo.toml
│ │ ├── build.rs
│ │ └── src/
│ │ ├── lib.rs
│ │ └── settings.rs
│ ├── sockets/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── control_socket.rs
│ │ ├── lib.rs
│ │ └── stream_socket/
│ │ ├── mod.rs
│ │ ├── tcp.rs
│ │ └── udp.rs
│ ├── system_info/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── android.rs
│ │ └── lib.rs
│ ├── vrcompositor_wrapper/
│ │ ├── Cargo.toml
│ │ ├── build.rs
│ │ ├── drm-lease-shim.cpp
│ │ └── src/
│ │ └── main.rs
│ ├── vulkan_layer/
│ │ ├── .gitignore
│ │ ├── Cargo.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── build.rs
│ │ ├── layer/
│ │ │ ├── alvr_x86_64.json
│ │ │ ├── device_api.cpp
│ │ │ ├── device_api.hpp
│ │ │ ├── layer.cpp
│ │ │ ├── layer.h
│ │ │ ├── private_data.cpp
│ │ │ ├── private_data.hpp
│ │ │ ├── settings.cpp
│ │ │ ├── settings.h
│ │ │ ├── surface_api.cpp
│ │ │ ├── surface_api.hpp
│ │ │ ├── swapchain_api.cpp
│ │ │ └── swapchain_api.hpp
│ │ ├── src/
│ │ │ └── lib.rs
│ │ ├── util/
│ │ │ ├── custom_allocator.cpp
│ │ │ ├── custom_allocator.hpp
│ │ │ ├── extension_list.cpp
│ │ │ ├── extension_list.hpp
│ │ │ ├── logger.cpp
│ │ │ ├── logger.h
│ │ │ ├── platform_set.hpp
│ │ │ ├── pose.cpp
│ │ │ ├── pose.hpp
│ │ │ ├── timed_semaphore.cpp
│ │ │ └── timed_semaphore.hpp
│ │ └── wsi/
│ │ ├── display.cpp
│ │ ├── display.hpp
│ │ ├── headless/
│ │ │ ├── surface_properties.cpp
│ │ │ ├── surface_properties.hpp
│ │ │ ├── swapchain.cpp
│ │ │ └── swapchain.hpp
│ │ ├── surface_properties.hpp
│ │ ├── swapchain_base.cpp
│ │ ├── swapchain_base.hpp
│ │ ├── wsi_factory.cpp
│ │ └── wsi_factory.hpp
│ └── xtask/
│ ├── Cargo.toml
│ ├── LICENSE
│ ├── README.md
│ ├── build.rs
│ ├── firewall/
│ │ ├── alvr-firewalld.xml
│ │ ├── alvr_fw_config.sh
│ │ └── ufw-alvr
│ ├── flatpak/
│ │ ├── README.md
│ │ ├── build_and_install.sh
│ │ ├── com.valvesoftware.Steam.Utility.alvr.desktop
│ │ ├── com.valvesoftware.Steam.Utility.alvr.json
│ │ ├── run_with_adb_keys.sh
│ │ └── setup_xdg_shortcut.sh
│ ├── licenses_template.hbs
│ ├── patches/
│ │ ├── 0001-Add-AV_VAAPI_DRIVER_QUIRK_HEVC_ENCODER_ALIGN_64_16-f.patch
│ │ ├── 0001-av1-encode-backport.patch
│ │ ├── 0001-clip-constants-used-with-shift-instr.patch
│ │ ├── 0001-guid-conftest.patch
│ │ ├── 0001-lavu-hwcontext_vulkan-Fix-importing-RGBx-frames-to-C.patch
│ │ ├── 0001-update-rc-modes.patch
│ │ ├── 0001-vaapi_encode-Add-filler_data-option.patch
│ │ ├── 0001-vaapi_encode-Allow-to-dynamically-change-bitrate-and.patch
│ │ ├── 0001-vaapi_encode-Enable-global-header.patch
│ │ └── 0001-vaapi_encode_h265-Set-vui_parameters_present_flag.patch
│ ├── resources/
│ │ ├── alvr.desktop
│ │ └── driver.vrdrivermanifest
│ └── src/
│ ├── build.rs
│ ├── ci.rs
│ ├── command.rs
│ ├── dependencies.rs
│ ├── format.rs
│ ├── main.rs
│ ├── packaging.rs
│ └── version.rs
└── wiki/
├── ALVR-Checklist.md
├── ALVR-wired-setup-(ALVR-over-USB).md
├── Building-From-Source.md
├── Controller-latency.md
├── FFmpeg-Hardware-Encoding-Testing.md
├── Fixed-Foveated-Rendering-(FFR).md
├── Hand-tracking-controller-bindings.md
├── Headset-and-ALVR-streamer-on-separate-networks.md
├── Home.md
├── How-ALVR-works.md
├── Information-and-Recommendations.md
├── Installation-guide.md
├── Installing-ALVR-and-using-SteamVR-on-Linux-through-Flatpak.md
├── Linux-Troubleshooting.md
├── My-game-is-not-working-properly!-Help!.md
├── Other-resources.md
├── Real-time-video-upscaling-experiments.md
├── Roadmap.md
├── Settings-tutorial.md
├── Troubleshooting.md
└── _Sidebar.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .cargo/config.toml
================================================
[alias]
xtask = "run -p alvr_xtask --"
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]
================================================
FILE: .clang-format
================================================
BasedOnStyle: WebKit
IndentWidth: 4
ColumnLimit: 100
BinPackArguments: false
BinPackParameters: false
AlignAfterOpenBracket: BlockIndent
BreakBeforeBraces: Attach
InsertNewlineAtEOF: true
================================================
FILE: .editorconfig
================================================
# Editor configuration, see https://editorconfig.org
[*.{c,cpp,h,hpp}]
indent_style = space
indent_size = 4
tab_width = 4
max_line_length = 100
end_of_line = lf
insert_final_newline = true
[.editorconfig]
indent_style = space
indent_size = 4
tab_width = 4
end_of_line = lf
insert_final_newline = true
================================================
FILE: .gitattributes
================================================
* text=auto eol=lf
alvr/server_openvr/cpp/alvr_server/include/** linguist-vendored
alvr/server_openvr/cpp/alvr_server/nvEncodeAPI.h linguist-vendored
alvr/server_openvr/cpp/platform/win32/NvCodecUtils.h linguist-vendored
alvr/server_openvr/cpp/platform/win32/NvEncoder.cpp linguist-vendored
alvr/server_openvr/cpp/platform/win32/NvEncoder.h linguist-vendored
alvr/server_openvr/cpp/shared/** linguist-vendored
# note: some of these folders contain ALVR code, but only a minor amount
alvr/vulkan_layer/layer/** linguist-vendored
alvr/vulkan_layer/util/** linguist-vendored
alvr/vulkan_layer/wsi/** linguist-vendored
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: alvr
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug Report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
## Description
## General Troubleshooting
- [ ] I carefully followed the instructions in the [README](https://github.com/alvr-org/ALVR/blob/master/README.md) and successfully completed the setup wizard
- [ ] I read the [ALVR GitHub Wiki](https://github.com/alvr-org/ALVR/wiki)
## Environment
### Hardware
**Note**: for Linux, an upload to the [`hw-probe`](https://linux-hardware.org/) database is preferred: `hw-probe -all -upload`
**CPU**:
**GPU**:
**GPU Driver Version**:
**Audio**:
### Installation
**ALVR Version**:
**ALVR Settings File**:
**SteamVR Version**:
**Install Type**:
- [ ] Packaged (`exe`, `deb`, `rpm`, etc)
- [ ] Portable (`zip`)
- [ ] Source
**OS Name and Version** (`winver` on Windows or `grep PRETTY_NAME /etc/os-release` on most Linux distributions):
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "cargo" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "monthly"
ignore:
- dependency-name: "*"
update-types: [ "version-update:semver-minor","version-update:semver-patch" ]
================================================
FILE: .github/workflows/prepare-release.yml
================================================
name: Create release
env:
CARGO_TERM_COLOR: always
on:
workflow_dispatch:
inputs:
version:
description: "Version"
required: false
default: ""
jobs:
prepare_release:
runs-on: windows-2022
outputs:
release_ref: ${{ steps.output_ref.outputs.release_ref }}
upload_url: ${{ steps.create_release.outputs.upload_url }}
release_id: ${{ steps.create_release.outputs.id }}
steps:
- name: Configure git
run: git config --global core.autocrlf false
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Bump version
id: bump_version
env:
RUST_BACKTRACE: 1
run: |
$versionarg = "${{ github.event.inputs.version }}"
$versionarg = If ($versionarg.Length -gt 0) { "--version $versionarg" } else { "" }
$out = cargo xtask bump $versionarg.split()
echo $out
cargo update -p alvr_common
echo "::set-output name=version_tag::$(echo $out | sls -CaseSensitive -Pattern '^v.*$')"
- name: Push changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: "[Auto] Bump version"
- name: Output ref for later checkouts
id: output_ref
run: echo "::set-output name=release_ref::$(git rev-parse HEAD)"
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.bump_version.outputs.version_tag }}
release_name: ALVR ${{ steps.bump_version.outputs.version_tag }}
draft: true
prerelease: false
commitish: ${{ steps.output_ref.outputs.release_ref }}
build_windows_streamer:
runs-on: windows-2022
needs: [prepare_release]
steps:
- uses: actions/checkout@v2
with:
ref: ${{ needs.prepare_release.outputs.release_ref }}
submodules: true
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: crazy-max/ghaction-chocolatey@v1
with:
args: install zip unzip pkgconfiglite wixtoolset
- name: Build and package ALVR
id: build
env:
RUST_BACKTRACE: 1
run: |
cargo xtask package-streamer --gpl --ci
cargo xtask package-launcher --ci
- name: Upload streamer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.prepare_release.outputs.upload_url }}
asset_path: ./build/alvr_streamer_windows.zip
asset_name: alvr_streamer_windows.zip
asset_content_type: application/zip
- name: Upload launcher
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.prepare_release.outputs.upload_url }}
asset_path: ./build/alvr_launcher_windows.zip
asset_name: alvr_launcher_windows.zip
asset_content_type: application/zip
build_linux_streamer:
runs-on: ubuntu-22.04
needs: [prepare_release]
steps:
- uses: actions/checkout@v2
with:
ref: ${{ needs.prepare_release.outputs.release_ref }}
submodules: true
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Build and install dependencies
env:
RUST_BACKTRACE: 1
run: |
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 25088A0359807596
echo "deb http://ppa.launchpad.net/pipewire-debian/pipewire-upstream/ubuntu $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/pipewire-upstream.list
sudo apt-get update
sudo apt-get install libfuse2 build-essential pkg-config nasm libva-dev libdrm-dev libvulkan-dev libx264-dev libx265-dev cmake libasound2-dev libjack-jackd2-dev libxrandr-dev libunwind-dev libgtk-3-dev libpipewire-0.3-dev libspa-0.2-dev
- name: Build and package ALVR (.tar.gz)
id: build
env:
RUST_BACKTRACE: 1
run: |
cargo xtask package-streamer --gpl --ci
cargo xtask package-launcher --ci
- name: Upload streamer (tar.gz)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.prepare_release.outputs.upload_url }}
asset_path: ./build/alvr_streamer_linux.tar.gz
asset_name: alvr_streamer_linux.tar.gz
asset_content_type: application/gzip
- name: Upload launcher
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.prepare_release.outputs.upload_url }}
asset_path: ./build/alvr_launcher_linux.tar.gz
asset_name: alvr_launcher_linux.tar.gz
asset_content_type: application/gzip
build_flatpak_bundle:
runs-on: ubuntu-latest
needs: [prepare_release]
steps:
- uses: actions/checkout@v2
with:
ref: ${{ needs.prepare_release.outputs.release_ref }}
submodules: true
- name: Build and install dependencies
env:
RUST_BACKTRACE: 1
run: |
sudo apt-get update
sudo apt-get install flatpak flatpak-builder
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
- name: Build and package ALVR flatpak (.flatpak)
id: build_flatpak
run: |
sudo flatpak-builder --repo=.flatpak-repo --install-deps-from=flathub --force-clean --default-branch=stable --arch=x86_64 .flatpak-build-dir alvr/xtask/flatpak/com.valvesoftware.Steam.Utility.alvr.json
flatpak build-bundle .flatpak-repo com.valvesoftware.Steam.Utility.alvr.flatpak com.valvesoftware.Steam.Utility.alvr stable --runtime
- name: Upload flatpak streamer for Linux
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.prepare_release.outputs.upload_url }}
asset_path: com.valvesoftware.Steam.Utility.alvr.flatpak
asset_name: com.valvesoftware.Steam.Utility.alvr.flatpak
asset_content_type: application/octet-stream
build_android_client:
runs-on: ubuntu-latest
needs: [prepare_release]
steps:
- uses: actions/checkout@v2
with:
ref: ${{ needs.prepare_release.outputs.release_ref }}
submodules: true
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: aarch64-linux-android
override: true
- uses: actions/setup-java@v2
with:
distribution: "temurin"
java-version: "17"
- uses: android-actions/setup-android@v3
with:
packages: "platforms;android-32"
- uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r26b
- name: Build and package ALVR
id: build
env:
RUST_BACKTRACE: 1
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
run: cargo xtask package-client --ci
- name: Sign APK
uses: ilharp/sign-android-release@v1
id: sign_apk
with:
releaseDir: build/alvr_client_android
signingKey: ${{ secrets.SIGNING_KEY }}
keyAlias: ${{ secrets.KEY_ALIAS }}
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
keyPassword: ${{ secrets.KEY_PASSWORD }}
buildToolsVersion: 34.0.0
- name: Upload APK
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.prepare_release.outputs.upload_url }}
asset_path: ${{ steps.sign_apk.outputs.signedFile }}
asset_name: alvr_client_android.apk
asset_content_type: application/vnd.android.package-archive
================================================
FILE: .github/workflows/queue.yml
================================================
name: Merge queue only checks
# Merge queue checks need to be selected as required for prs to actually run, so simply skip them on prs
on:
pull_request:
merge_group:
env:
CARGO_TERM_COLOR: always
jobs:
check-linux-old:
if: github.event_name == 'merge_group'
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- name: Install dependencies
run: |
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 25088A0359807596
echo "deb http://ppa.launchpad.net/pipewire-debian/pipewire-upstream/ubuntu $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/pipewire-upstream.list
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install libfuse2 build-essential pkg-config nasm libva-dev libdrm-dev libvulkan-dev libx264-dev libx265-dev cmake libasound2-dev libjack-jackd2-dev libxrandr-dev libunwind-dev libgtk-3-dev libpipewire-0.3-dev libspa-0.2-dev
- name: Prepare deps
env:
RUST_BACKTRACE: 1
run: cargo xtask prepare-deps --platform linux --no-nvidia
- run: cargo clippy
check-msrv-windows:
if: github.event_name == 'merge_group'
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
# Fix actions rust install and msrv both being stupid
- run: rustup update
- name: Prepare deps
env:
RUST_BACKTRACE: 1
run: cargo xtask prepare-deps --platform windows
- run: cargo xtask check-msrv
check-msrv-linux:
if: github.event_name == 'merge_group'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install dependencies
run: |
sudo apt update
sudo apt install build-essential pkg-config nasm libva-dev libdrm-dev libvulkan-dev libx264-dev libasound2-dev libxrandr-dev libunwind-dev libgtk-3-dev libpipewire-0.3-dev libspa-0.2-dev
- name: Prepare deps
env:
RUST_BACKTRACE: 1
run: cargo xtask prepare-deps --platform linux --no-nvidia
- run: cargo xtask check-msrv
check-licenses:
if: github.event_name == 'merge_group'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo xtask check-licenses
================================================
FILE: .github/workflows/rust.yml
================================================
name: Rust
on:
pull_request:
branches: [master]
merge_group:
env:
CARGO_TERM_COLOR: always
jobs:
check-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- name: Prepare deps
env:
RUST_BACKTRACE: 1
run: cargo xtask prepare-deps --platform windows
- run: cargo xtask clippy --ci
check-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- name: Install dependencies
run: |
sudo apt update
sudo apt install build-essential pkg-config nasm libva-dev libdrm-dev libvulkan-dev libx264-dev libasound2-dev libxrandr-dev libunwind-dev libgtk-3-dev libpipewire-0.3-dev libspa-0.2-dev
- name: Prepare deps
env:
RUST_BACKTRACE: 1
run: cargo xtask prepare-deps --platform linux --no-nvidia
- run: cargo xtask clippy --ci
check-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
# This step currently does nothing on macos, but might in the future
# - run: cargo xtask prepare-deps --platform macos
- run: cargo clippy
build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-linux-android
- uses: Swatinem/rust-cache@v2
- uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '17'
- uses: android-actions/setup-android@v3
with:
packages: 'platforms;android-32'
- uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r26b
- name: Install deps
run: cargo install cargo-apk
# Create folder without content to make the build succeed
- run: mkdir -p deps/android_openxr/arm64-v8a
- name: Build client
env:
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
working-directory: ./alvr/client_openxr
run: cargo xtask build-client
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Run tests
run: cargo test -p alvr_session
check-format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo xtask check-format
================================================
FILE: .github/workflows/stale.yml
================================================
name: 'Close stale issues'
on:
schedule:
- cron: '0 0 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
exempt-issue-labels: 'bug,documentation,enhancement,good-first-issue,hep-wanted,needs-testing,release'
exempt-draft-pr: true
================================================
FILE: .github/workflows/wiki.yml
================================================
name: Publish to GitHub Wiki
on:
push:
branches: [master]
workflow_dispatch:
jobs:
wiki:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Publish to wiki
uses: cmbrose/github-docs-to-wiki@v0.24
with:
githubToken: ${{ secrets.GH_PAT }}
rootDocsFolder: "wiki"
================================================
FILE: .gitignore
================================================
Debug
Release
*.opensdf
*.sdf
*.suo
*.filters
*.user
*.dll
*.exe
*.mexw64
*.aps
# editor
.vs/
.idea/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
release-files/
# Ignore generated file with harvested file paths for WiX
wix/harvested.wxs
# Other WiX files
*.wixobj
*.wixpdb
*.msi
# Generated by Cargo
# will have compiled files and executables
/target/
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
#Cargo.lock
# These are backup files generated by rustfmt
**/*.rs.bk
# build result
/build/
dist
.vscode/
.DS_Store
.ccls-cache
# dependencies installed by xtask
deps
# dependencies installed by node
node_modules
# The .gitignore for android is project folder.
# flatpak
.flatpak*
ALVR-Launcher
#allows adding CMake files for some IDEs to parse C++ files correctly
CMakeLists.txt
cmake-build-debug/
*.jks
================================================
FILE: .gitmodules
================================================
[submodule "openvr"]
path = openvr
url = https://github.com/ValveSoftware/openvr.git
shallow = true
================================================
FILE: CHANGELOG.md
================================================
# Changelog
## v20.11.0
* Add flatpak launcher (by @failboat78 #2207)
* Fix Linux/Nvenc error popups (by @failboat78 #2338)
* Add debug groups (by @zarik5 #2332)
* Fix black screen on Focus 3 (by @zarik5 #2346)
* Fix launcher installation popup (by @zarik5 #2356)
* Fix crash on invalid haptics (by @zarik5 #2355)
* Rework logging (by @zarik5 #2351)
* Disable "Adapt to framerate" by default (by @zarik5)
* Show body skeleton in lobby (by @zarik5 #2366)
* Add multimodal input (by @zarik5 #2367)
* Fix high CPU usage on Linux (by @The-personified-devil #2372 #2375)
* Fix stream being half width resolution (by @zarik5 #2378)
## v20.10.0
* Internal refactors of the client graphics (wgpu) and server code architecture (by @zarik5)
* Fix Quest 3 not supporting 120Hz (by @The-personified-devil)
* Tracking timing jitter (by @zarik5 #2285)
* Support VRChat hand tracking (by @ReinaS-64892 @AdalynBlack @zarik5 #2295, @zarik5 #2313 #2323)
* Fix crash with some games (by @szneqz #2309)
* Fix crash when shutting down launcher (by @zarik5 #2320)
* Fix crash with vibration on Focus 3 (by @zarik5 #2324)
### v20.9.1 (2024-07-06)
* Fix performance issues on lobby room.
## v20.9.0 (2024-07-06)
* Display license inside the dashboard (by @zarik5 #2117)
* Add GPU checks for Linux (by @Meister1593 #2110)
* Reorder settings (by @zarik5 #2119)
* Shallow rename "client" -> "device" (by @zarik5 #2120)
* Update manifest for AppLab (by @zarik5 #2146)
* Allow recentering in the lobby (by @zarik5 #2155)
* Tweak graph labels and colors (by @zarik5 #2176)
* Fix controller detection on Pico Neo 3 Link (by @HoLo85 #2192)
* Loosen restrictions on device selection with VoiceMeeter (by @xuan25 #2209)
* Fix HEVC black screen on Linux/VAAPI (by @Nibor62 #2203)
* Show hands and controllers in the lobby (by @zarik5 #2218)
* Add PipeWire support on Linux (by @Meister1593 #1973)
### v20.8.1 (2024-05-08)
* Fix crash on Linux (by @SniperJoe #2108)
## v20.8.0 (2024-05-04)
* Bring back settings tabs (by @Meister1593 #2076)
* Make FFE shader much lighter (by @yoyobuae #2083)
* Improve firewall rules on Linux (by @Meister1593 #2078)
* Fix error message not displaying correctly on Linux sometimes (by @SniperJoe #2088)
* Fix Nvidia encoder on some Linux systems (by @Xaphiosis @nowrep #2074)
* Fix client warmstart crash (by @ShootingKing-AM #2084)
* Fix segfault on Linux (by @SniperJoe #2090)
* Fix protocol break in v20.7.0 (by @zarik5 2098)
### v20.7.1 (2024-04-11)
* Fix colors on Pico (by @shinyquagsire23 and @zarik5)
* Fix joystick gesture offset on right hand (by @jarettmillard #2065)
## v20.7.0 (2024-04-06)
* Add AV1 support on Windows/AMD (by @barnabwhy #1967)
* Add AV1 support on Linux/Nvidia (by @wsippel #1975, @Vixea #1994)
* Add HDR support on Windows (by @shinyquagsire23 #2030)
* Add full range encoding support (by @shinyquagsire23 #2011, @Vixea #1971)
* Fix VAAPI encoder on Intel GPUs (by @nowrep #1981)
* Add Pre-Analysis support on Windows/AMD (by @barnabwhy #1985)
* Add linux hardware encoding checks (by @Meister1593 #2042 #2055)
* Add full body tracking support on Quest (by @barnabwhy #1979, @galister #1984)
* Fix aux-bones in SteamVR (by @shinyquagsire23 #2009)
* Make USB connection work when WiFi is disabled (by @Meister1593 #1962)
* Add mDNS discovery on the server (by @zarik5 #1978)
* Fix audio when disconnecting headphones in headset (by @Okabintaro #2025 #2040)
* Add compatibility layer for surround audio devices (by @barnabwhy #2026)
* Fix black screen on Vive Focus 3, XR Elite (by @zarik5)
* Fix stuttering on Linux after recentering (by @galister #2017)
* Fixes for Flatpak (by @jkcdarunday #1980, @Meister1593 #2039 #2044)
* Change colors of lobby room (by @barnabwhy #1968)
* Remove WIX installer (by @zarik5)
* Remove AppImage (by @Meister1593 #2056)
### v20.6.1 (2024-01-26)
* Add AV1 support, only for Linux/VAAPI, with 10bits support (by @wsippel #1955 #1964)
* Fix image corruption on h264/VAAPI (by @galister / @nowrep #1956)
## v20.6.0 (2024-01-10)
* Add tongue tracking for Quest Pro (by @zarik5)
* This is a breaking change in the protocol, but only affects Quest Pro users.
* Only VRCFT ALVR module v1.2.0 and up is supported
* Add Quest 3 emulation mode + icons for SteamVR HUD (by @Goodguy140 #1926)
* Add Type of Service (ToS) socket settings, tested only on Linux (by @Vixea #1946)
* Add software decoding option and fallback (by @20kdc #1933)
* Add Baseline encoding option for h264 (by @20kdc #1932)
* Fix ADB connection (by @The-personified-devil #1942)
* Fix rare bug preventing reconnections on wifi (by @zarik5)
## v20.5.0 (2023-12-05)
* Fix Vulkan layer GPU loading (by @nairaner #1847)
* Fix dynamic bitrate for VAAPI (by @nowrep #1863)
* Add notification tips (by @zarik5 #1865)
* Fix hand tracking for Lynx R1 (by @technobaboo #1874)
* Various wiki updates
* Fix battery update during streming (by @zarik5)
* Fix playspace recentering delay (by @zarik5)
* Support eye tracking for Pico 4 Pro (by @zarik5 @Meister1593 #1897)
* Add desktop file for Flatpak (by @Vixea #1906)
* Install audio dependencies from the setup wizard (by @Meister1593 #1893, @zarik5)
* Significantly reduce latency with NVENC on Linux (by @nowrep @Xaphiosis #1911)
* Fix SteamVR hanging when restarting on Linux (by @Vixea @zarik5)
* Other dashboard updates
### v20.4.3 (2023-10-06)
* Fix dashboard crash on Windows
* Fix settings reset bug when upgrading (session extrapolation failed)
### v20.4.2 (2023-09-22)
* Fix YVR crash because of invalid controller bindings
### v20.4.1 (2023-09-19)
* Fix inverted `Enable skeleton` switch
* Add `Only touch` gestures option
## v20.4.0 (2023-09-15)
* Full hand tracking gestures support, with joystick (by @barnabwhy #1794)
* Fully remappable controller buttons (by @zarik5 #1817)
* Custom controller profile (by @zarik5)
* Fix Nvidia support on Linux (by @Killrmemz #1830)
### v20.3.1 (2023-09-11)
* Fix some controller buttons not working
* Fix changing controller emulation profile not triggering a SteamVR restart
* Add back Rift S controller emulation profile
## v20.3.0 (2023-09-08)
* Add Lynx R1 headset support (by @zarik5 #1823)
* Currently there is an issue with hand tracking which is being investigated
* Make settings sections collapsible (by @zarik5)
* Other UI tweaks (by @zarik5)
* *Actually* fix controller freeze (by @zarik5)
* Fix Pico controller buttons (by @zarik5 @galister @Meister1593 #1820)
* Fix bitrate hikes when "Adapt to framerate" is enabled (by @zarik5)
* Fix Nvenc encoder on Linux (by @Killrmemz #1824)
* Timeout connection if lingering (by @zarik5)
* Fix warmstart crash on client (by @ShootingKing-AM #1813)
### v20.2.1 (2023-08-27)
* Fix VRCFaceTracking mode panicing.
* (Potential) Fix for dashboard crash on Wayland.
## v20.2.0 (2023-08-26)
* Add Flatpak build (by @CharlieQLe #1683 #1724 #1735 #1742, @Meister1593 #1769)
* Finish VRCFaceTracking support (by @zarik5)
* You can download the ALVR Module from the VRCFaceTracking app itself.
* Only supports the Quest Pro at the moment.
* New more performant sockets implementation (by @zarik5)
* Zero copy + zero allocations, and provides better packet prioritization.
* Avoid controller freezing during high latency (by @zarik5)
* Add message popups on Linux (disabled on the appimage build) (by @zarik5 #1711)
* Show backtrace on unhandled exceptions (Windows only) (by @zarik5)
* Previously these would make SteamVR hard crash without any useful log
* Optionally show full backtraces for logs (by @zarik5)
* Add option to select client log level (by zarik5)
* Make Log tab stick to bottom (by @zarik5)
* Encoder fixes on Linux (by @nowrep #1751 #1753 #1767 #1768 #1796, @Vixea #1805)
* Use Constant bitrate mode by default
* Support rolling video recording (by @zarik5)
* Fix OpenGL crash on the client (by @ShootingKing-AM #1801)
* Fix white dashboard bug on Linux (by @zarik5)
## v20.1.0 (2023-06-20)
* Fix firewall rules on Windows (by @zarik5)
* Fix firewall rules on linux for the tar.gz (by @Vixea #1675)
* Add bitrate graph (by @zarik5 #1689)
* Add encoder latency limiter (by @zarik5 #1678)
* Fix network latency limiter (by @zarik5)
* Fix image corruption on AMD (by @zarik5 #1681)
* Fix dashboard audio dropdowns on Linux (by @zarik5)
* Add connection status for clients (by @zarik5 #1688)
* Fix HMD plugged status (by @zarik5)
* Fix crash on some Unreal Engine 5 games (by @deiteris #1685)
* Add option to disable game render optimization (by @zarik5)
* Add separate history size for bitrate (by @zarik5)
# v20.0.0 (2023-06-02)
* New OpenXR-based client, add support for Vive Focus 3/XR Elite, Pico 4/Neo 3 and YVR 1/2. Worked on by:
* @zarik5 #1321
* @galister #1321, #1442
* @deiteris #1434, #1439, #1445
* New egui (OpenGL) dashboard
* The launcher is replaced by the new dashboard executable.
* by @Kirottu #1247 #1274, @zarik5, @m00nwtchr #1292, @TheComputerNerd88 #1574 #1575 #1576 1582
* Add position and rotation recentering modes (by @zarik5 #1321)
* Defaults to local floor and local yaw.
* Add support for eye and face tracking (by @zarik5 #1577)
* Currently supporting VRChat Eye OSC, VRCFaceTracking support coming soon
* Reduce game rendering latency (by @zarik5)
* Apply some settings in real-time (by @zarik5 #1635)
* New more consistent controller prediction algorithm (by @zarik5 #1561)
* Controller input fixes (by @zarik5 #1560)
* Soft-toggle controllers at runtime (by @galister #1600)
* New wiki hosted in the main git tree (by @m00nwtchr #1309)
* Send client log to streamer (by @zarik5)
* Encoder improvements (by @nowrep #1562 #1565 #1568, @deiteris #1403 #1422 #1400 #1402, @zarik5 #1564)
* Remove Forward Error Correction (by @zarik5: #1384, #1389; @deiteris: #1386, #1387, #1390)
* Unified code for NAL parsing (by @deiteris #1403, #1422, #1400, #1402)
* Some tweaks for alvr_client_core compatibility (by @ShootingKing-AM #1580 #1578 #1586 #1624 #1621)
* Fix server build with clang (by @nowrep)
### v19.1.1 (2023-03-03)
* Relax discovery protocol for future ALVR versions
## v19.1.0 (2023-02-14)
* Encoder improvements and new Linux server compositor:
* @deiteris #1227, #1252, #1281, #1287, #1302, #1304, #1318, #1331, #1336, #1368, #1393, #1367, #1397
* @Vixea #1227, #1254, #1412
* @nowrep #1251, #1261, #1253, #1267, #1264, #1266, #1273, #1272, #1277, #1280, #1279, #1278, #1282, #1265, #1294, #1295, #1312, #1314, #1316, #1325, #1328, #1326, #1330, #1334, #1338, #1329, #1346, #1350, #1357, #1352, #1348, #1365, #1349, #1361, #1370, #1372, #1393
* @m00nwtchr #1347
* @galister #1428, #1429
* Controller fixes (by @Timocop #1236 #1241)
* Vulkan layer fixes (by @nowrep #1291, #1293, #1324, #1339, #1376)
* Show client IP in the headset and dashboard (by @zarik5)
* Disable Wi-Fi scans (by @zarik5)
* Reduce lag after loading screens (by @zarik5)
* Fix server debug builds (by @nowrep #1288)
* Add trigger/grip threshold (by @sctanf)
* Don't spam stdout on Linux (by @nowrep #1317)
* Fix recentering on Linux (by @nowrep #1353)
================================================
FILE: CONTRIBUTING.md
================================================
# Style
Checklist for code style. This is on top of common Rust styling rules. These rules are not mandatory but I might point them out if not respected in PRs :) -zarik
## Naming
- Respect Rust naming conventions (not respecting this will cause a warning).
- Add useful information in the name, with the exception of indices for iterating.
- Do not put type or scope information in the name.
- Avoid abbreviations.
- Avoid prefixes and suffixes.
- if necessary prefer suffixes rather than prefixes.
- `_ref` or `_mut` suffixes are accepted when you want to put emphasis on that the variable is a mutable reference, and so assigning values has side effects, even if not consumed later. Suffixes are not needed if the variable is only mutable or instead a immutable reference.
- Use `maybe_` prefix if the variable is an `Option` or `Result`. Omit if it's clear from the context. Never use it for parameter or field definitions.
- Shadowing is encouraged.
- If shadowing cannot be used and two variables have similar meaning but different types, suffix the variable with the least useful or least specialized type with its type. Example:
```rust
let myfile_string = "./file.txt";
let myfile = Path::new(my_file_string);
```
- If both directory and file paths are used in the same context, suffix directories with `_dir` and files with `_path`. Suffix file names with `_fname`.
## Top level definitions
- For each file, define in order: private imports, public imports, ffi bindings import, private constants, public constants, private structs, public structs, private top level functions, public top level functions.
### Imports
- Do not leave spaces between imports, only between the private and public import blocks.
- Define imports in alphabetical order (use cargo fmt).
- Group imports using braces when there are common parts of the path.
### Structs
- Prefer adding trait bounds to the impl type parameters instead of struct type parameters
- Define in order: struct, Default impl, custom impl, Drop impl, all in the same module. Do not split the custom impl.
## Spacing
Smartly use empty newlines between blocks of code to improve legibility
- Rust recommends not to specify the return keyword when returning at the end of a function. To put emphasis on the return expression, isolate it with a empty new line just before.
- Inside each block (function, if/else/while/for etc or just braces) make so that there are roughly 2 to 6 blocks of code separated by empty lines for the amount of code that fits in a single screen (long functions that span multiple screens can have way more than 6 block). Check existing codebase for an example.
- Spaces between groups of statements should be done so the groups are similar is size and that each achieves a specific purpose. You should be able to easily describe what the group does in few words, even if you don't comment it (because the meaning should be self evident).
- Do not define variables at the start of the function/block, but do define them at the start of the functional group delimited by spaces.
## Comments
- It's important to use comments when the meaning or inner workings of a piece of code is not clear from the context. Well-named symbols (variables and functions) are often enough. In doubt do use comments.
- Do not add comments about how certain parts of the language/std library work, unless it's about quirks of features.
## Panicking and error handling
- Use of `panic!()` is discouraged
- When matching exhaustively, prefer `unreachable!()` over `panic!()` for certain branches.
- `unwrap()` is discouraged, but prefer `unwrap()` over `expect()` (bubble up the error instead).
- Prefer `.get()` to index a collection rather than `[]`, unless extremely certain it will never index out of bounds.
- Add a `// # Safety` comment before a statement that contains a `unwrap()` or raw indexing, explaining why it should never crash.
- Use `todo!()` to mark unfinished code (it returns `!` and so it helps with the missing return statement).
## Code repetition and maintainability
- Lean towards the DRY rule, without overdoing it.
- Extract a piece of code (in a function or lambda) only when it is used two or more times and it doesn't depend on many parameters.
- Always extract constants for "arbitrary" values (literals) which are chosen with no absolute rule and makes sense to change in the future. Example: time interval between resending discovery packet. Opposite example: number of eyes on a human head (it's always going to be 2, no need to use a constant to change its value in the future :) ).
- Prefer defining constants at the start of the file, even if used locally in a single function.
- Prefer using "complex" types for constants, if the std library allows it. Example: prefer using `Duration` instead of an integer type if the constant represents a time duration. Same with `Path` vs string.
## Structural soundness
- Try to avoid invalid states in the data, using Rust enums. Example: do not use `resumed` + `streaming` boolean variables if the state `resumed == false` + `streaming == true` is invalid. Instead use `enum State { Paused, Resumed, Streaming }`.
- Make full use of pattern matching with `if let` and `while let`, this reduces the use of `unwrap()`.
================================================
FILE: Cargo.toml
================================================
[workspace]
resolver = "2"
members = ["alvr/*"]
[workspace.package]
version = "21.0.0-dev12"
edition = "2024"
rust-version = "1.88"
authors = ["alvr-org"]
license = "MIT"
[workspace.dependencies]
alvr_adb = { path = "alvr/adb" }
alvr_audio = { path = "alvr/audio" }
alvr_client_core = { path = "alvr/client_core" }
alvr_common = { path = "alvr/common" }
alvr_events = { path = "alvr/events" }
alvr_filesystem = { path = "alvr/filesystem" }
alvr_graphics = { path = "alvr/graphics" }
alvr_gui_common = { path = "alvr/gui_common" }
alvr_packets = { path = "alvr/packets" }
alvr_server_core = { path = "alvr/server_core"}
alvr_server_io = { path = "alvr/server_io" }
alvr_session = { path = "alvr/session" }
alvr_sockets = { path = "alvr/sockets" }
alvr_system_info = { path = "alvr/system_info" }
[profile.release]
debug = "limited"
strip = false
[profile.distribution]
inherits = "release"
lto = true
================================================
FILE: LICENSE
================================================
Copyright (c) 2018-2019 polygraphene
Copyright (c) 2020-2024 alvr-org
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: README.md
================================================
# ALVR - Air Light VR
[![badge-discord][]][link-discord] [![badge-matrix][]][link-matrix] [![badge-opencollective][]][link-opencollective]
Stream VR games from your PC to your headset over Wi-Fi.
This is a fork of [ALVR](https://github.com/polygraphene/ALVR).
### Direct download (latest version):
### [Windows Launcher](https://github.com/alvr-org/ALVR/releases/latest/download/alvr_launcher_windows.zip) | [Linux Launcher](https://github.com/alvr-org/ALVR/releases/latest/download/alvr_launcher_linux.tar.gz)
## Compatibility
| VR Headset | Support |
| :--------------------------: | :------------------------------------------------------------------------------------: |
| Apple Vision Pro | :heavy_check_mark: ([store link](https://apps.apple.com/app/alvr/id6479728026)) |
| Quest 1/2/3/3S/Pro | :heavy_check_mark: ([store link](https://www.meta.com/experiences/7674846229245715) *) |
| Pico Neo 3/4/4 Ultra | :heavy_check_mark: |
| Play For Dream YVR 1/2/MR | :heavy_check_mark: |
| Vive Focus 3/Vision/XR Elite | :heavy_check_mark: |
| Lynx R1 | :heavy_check_mark: |
| PhoneVR (smartphone) | :heavy_check_mark: ** ([repo](https://github.com/PhoneVR-Developers/PhoneVR)) |
| Android/Monado | :warning: ** |
| Oculus Go | :x: ([old repo](https://github.com/polygraphene/ALVR)) |
\* ALVR for Quest 1 is not available through the Meta store.
\** Works on some smartphones, but has not been extensively tested.
| PC OS | Support |
| :------------: | :---------------------------------------------------------------------------: |
| Windows 10/11 | :heavy_check_mark: ([store link](https://store.steampowered.com/app/3312710)) |
| Windows XP/7/8 | :x: |
| Linux | :heavy_check_mark:*** |
| macOS | :x: |
\*** Please check the wiki for detailed compatibility information.
### Requirements
- A supported standalone VR headset (see compatibility table above).
- SteamVR.
- A high-end gaming PC:
- See the OS compatibility table above.
- NVIDIA GPU with NVENC support (GTX 1000 series or newer), an AMD GPU with AMF VCE support, or an INTEL GPU with VPL support (Arc, Tiger Lake or newer), with the latest drivers.
- On laptops with both an integrated GPU (Intel HD, AMD iGPU) and a dedicated GPU (NVIDIA GTX/RTX, AMD HD/R5/R7), make sure to assign the dedicated GPU (or "high performance graphics adapter") to ALVR and SteamVR for the best performance and compatibility.
(NVIDIA: Nvidia Control Panel → 3D Settings → Application Settings; AMD: similar method)
- Network:
- 802.11ac 5 GHz Wi-Fi for the headset, and wired Ethernet for the PC is recommended.
- The PC and the headset must be connected to the same router (or use a routed connection as described [here](https://github.com/alvr-org/ALVR/wiki/ALVR-v14-and-Above)).
## Installation
Follow the [installation guide](https://github.com/alvr-org/ALVR/wiki/Installation-guide).
## Troubleshooting
- See the [Troubleshooting](https://github.com/alvr-org/ALVR/wiki/Troubleshooting) page, and [Linux Troubleshooting](https://github.com/alvr-org/ALVR/wiki/Linux-Troubleshooting) if applicable.
- Configuration recommendations and additional information can be found [here](https://github.com/alvr-org/ALVR/wiki/Information-and-Recommendations).
## Uninstallation
Open `ALVR Dashboard.exe`, go to the `Installation` tab, then press `Remove firewall rules`.
Close the ALVR window and delete the ALVR folder.
## Build from Source
Follow the [build guide](https://github.com/alvr-org/ALVR/wiki/Building-From-Source).
## License
ALVR is licensed under the [MIT License](LICENSE).
## Privacy Policy
ALVR apps do not directly collect any personal data.
## Donate
If you would like to support this project, you can donate through our [Open Source Collective account](https://opencollective.com/alvr).
[badge-discord]: https://img.shields.io/discord/720612397580025886?style=for-the-badge&logo=discord&color=5865F2 "Join us on Discord"
[link-discord]: https://discord.gg/ALVR
[badge-matrix]: https://img.shields.io/static/v1?label=chat&message=%23alvr&style=for-the-badge&logo=matrix&color=blueviolet "Join us on Matrix"
[link-matrix]: https://matrix.to/#/#alvr:ckie.dev?via=ckie.dev
[badge-opencollective]: https://img.shields.io/opencollective/all/alvr?style=for-the-badge&logo=opencollective&color=79a3e6 "Donate"
[link-opencollective]: https://opencollective.com/alvr
================================================
FILE: about.toml
================================================
accepted = [
"MIT",
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"BSD-2-Clause",
"BSD-3-Clause",
"BSL-1.0",
"bzip2-1.0.6",
"CC0-1.0",
"CDLA-Permissive-2.0",
"ISC",
"LicenseRef-UFL-1.0",
"MPL-2.0",
"OFL-1.1",
"OpenSSL",
"Ubuntu-font-1.0",
"Unicode-DFS-2016",
"Unicode-3.0",
"Unlicense",
"Zlib",
"zlib-acknowledgement",
]
targets = [
"x86_64-pc-windows-msvc",
"x86_64-unknown-linux-gnu",
"aarch64-linux-android",
"wasm32-unknown-unknown",
]
workarounds = ["ring"]
filter-noassertion = true
================================================
FILE: alvr/adb/Cargo.toml
================================================
[package]
name = "alvr_adb"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
authors.workspace = true
license.workspace = true
[dependencies]
alvr_common.workspace = true
alvr_filesystem.workspace = true
alvr_system_info.workspace = true
alvr_session.workspace = true
anyhow = "1"
ureq = "3"
zip = "4"
================================================
FILE: alvr/adb/src/commands.rs
================================================
// https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/main/docs/user/adb.1.md
use crate::parse::{self, Device, ForwardedPorts};
use alvr_filesystem as afs;
use anyhow::{Context, Result, anyhow};
use std::{
collections::HashSet,
io::{Cursor, Read},
process::Command,
str::FromStr,
time::Duration,
};
use zip::ZipArchive;
#[cfg(windows)]
use std::os::windows::process::CommandExt;
// https://developer.android.com/tools/releases/platform-tools#revisions
// NOTE: At the time of writing this comment, the revisions section above
// shows the latest version as 35.0.2, but the latest that can be downloaded
// by specifying a version is 35.0.0
const PLATFORM_TOOLS_VERSION: &str = "-latest"; // E.g. "_r35.0.0"
#[cfg(target_os = "linux")]
const PLATFORM_TOOLS_OS: &str = "linux";
#[cfg(target_os = "macos")]
const PLATFORM_TOOLS_OS: &str = "darwin";
#[cfg(windows)]
const PLATFORM_TOOLS_OS: &str = "windows";
const REQUEST_TIMEOUT: Duration = Duration::from_secs(5);
fn get_command(adb_path: &str, args: &[&str]) -> Command {
let mut command = Command::new(adb_path);
command.args(args);
#[cfg(windows)]
command.creation_flags(0x08000000); // CREATE_NO_WINDOW
command
}
pub fn download(url: &str, progress_callback: impl Fn(usize, Option)) -> Result> {
let agent: ureq::Agent = ureq::Agent::config_builder()
.timeout_global(Some(REQUEST_TIMEOUT))
.build()
.into();
let response = agent.get(url).call()?;
let maybe_expected_size = response
.headers()
.get("Content-Length")
.and_then(|v| v.to_str().ok()?.parse::().ok());
let mut result = maybe_expected_size
.map(Vec::with_capacity)
.unwrap_or_default();
let mut reader = response.into_body().into_reader();
let mut buffer = vec![0; 65535];
loop {
let read_count: usize = reader.read(&mut buffer)?;
if read_count == 0 {
break;
}
result.extend_from_slice(&buffer[..read_count]);
let current_size = result.len();
(progress_callback)(current_size, maybe_expected_size);
}
Ok(result)
}
///////////
// Activity
pub fn get_process_id(
adb_path: &str,
device_serial: &str,
process_name: &str,
) -> Result