Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[vrcompositor]Tracked Camera: Failed to create static GPU resources. #1881

Open
fww0071215 opened this issue Jan 14, 2025 · 0 comments
Open

Comments

@fww0071215
Copy link

Greetings, I am presently engaged in the development of a VR driver operating in extended mode. I have successfully managed to display the VR imagery onto the correct monitor; however, I have encountered several issues whilst undertaking the development related to the camera functionalities.

My driver, referencing the implementation of openvr-customhmd, has incorporated the IVRCameraComponent. I have instrumented each interface with logging and set breakpoints, yet it seems that SteamVR has not invoked the IVRCameraComponent interface that I have implemented. Within the vrcompositor.txt, I discovered the following log entries:

Tue Jan 14 2025 14:30:16.273 [Info] - Initializing camera
Tue Jan 14 2025 14:30:16.273 [Info] - Creating static resources for tracked camera
Tue Jan 14 2025 14:30:16.274 [Info] - Tracked Camera: Failed to create static GPU resources.
Tue Jan 14 2025 14:30:16.274 [Info] - D3D11 Camera Initialization failure.
Is there something incorrect in my implementation? Below is the relevant portion of my code:

void* Cuco_TrackedDeviceServerDriver::GetComponent(const char* pchComponentNameAndVersion)
{
	if (strcmp(pchComponentNameAndVersion, vr::IVRDisplayComponent_Version) == 0)
	{
		return (vr::IVRDisplayComponent*)this;
	}
	if (strcmp(pchComponentNameAndVersion, vr::IVRCameraComponent_Version) == 0)
	{
		return (vr::IVRCameraComponent*)this;
	}
	return nullptr;
}
ret = vr::VRProperties()->SetBoolProperty(container, vr::Prop_CameraSupportsCompatibilityModes_Bool, false);
ret = vr::VRProperties()->SetInt32Property(container, vr::Prop_NumCameras_Int32, 1);
ret = vr::VRProperties()->SetInt32Property(container, vr::Prop_CameraCompatibilityMode_Int32, vr::CAMERA_COMPAT_MODE_ISO_30FPS);
ret = vr::VRProperties()->SetInt32Property(container, vr::Prop_CameraFirmwareVersion_Uint64, 20250114);
ret = vr::VRProperties()->SetInt32Property(container, vr::Prop_CameraFrameLayout_Int32, vr::EVRTrackedCameraFrameLayout_Mono);
ret = vr::VRProperties()->SetInt32Property(container, vr::Prop_CameraStreamFormat_Int32, vr::CVS_FORMAT_RGB24);
ret = vr::VRProperties()->SetInt32Property(container, vr::Prop_DisplayMCImageWidth_Int32, 1920);
ret = vr::VRProperties()->SetInt32Property(container, vr::Prop_DisplayMCImageHeight_Int32, 1080);
ret = vr::VRProperties()->SetInt32Property(container, vr::Prop_DisplayMCImageNumChannels_Int32, 3);
ret = vr::VRProperties()->SetStringProperty(container, vr::Prop_CameraFirmwareDescription_String, "camera--");
ret = vr::VRProperties()->SetFloatProperty(container, vr::Prop_CameraExposureTime_Float, 0.12);
ret = vr::VRProperties()->SetFloatProperty(container, vr::Prop_CameraGlobalGain_Float, 0.12);

auto cameraToHeadTransfor = vr::HmdMatrix34_t();
Quaternion::HmdMatrix_SetIdentity(&cameraToHeadTransfor);
ret = vr::VRProperties()->SetProperty(container, vr::Prop_CameraToHeadTransform_Matrix34, &cameraToHeadTransfor, sizeof(cameraToHeadTransfor), vr::k_unHmdMatrix34PropertyTag);
ret = vr::VRProperties()->SetProperty(container, vr::Prop_CameraToHeadTransforms_Matrix34_Array, &cameraToHeadTransfor, sizeof(cameraToHeadTransfor), vr::k_unHmdMatrix34PropertyTag);
int df = vr::VRDistortionFunctionType_FTheta;
ret = vr::VRProperties()->SetProperty(container, vr::Prop_CameraDistortionFunction_Int32_Array, &df, sizeof(df), vr::k_unInt32PropertyTag);
float dc = 1;
ret = vr::VRProperties()->SetProperty(container, vr::Prop_CameraDistortionCoefficients_Float_Array, &dc, sizeof(dc), vr::k_unFloatPropertyTag);
int wb[4] = { 1,1,1,1 };
ret = vr::VRProperties()->SetProperty(container, vr::Prop_CameraWhiteBalance_Vector4_Array, &wb[0], sizeof(wb), vr::k_unInt32PropertyTag);
ret = vr::VRProperties()->SetBoolProperty(container, vr::Prop_HasCamera_Bool, true);
ret = vr::VRProperties()->SetBoolProperty(container, vr::Prop_HasCameraComponent_Bool, true);

Please disregard my implementation of IVRCameraComponent for now; currently, I only wish to test the interface calls.

bool Cuco_TrackedDeviceServerDriver::GetCameraFrameBufferingRequirements(int* pDefaultFrameQueueSize, uint32_t* pFrameBufferDataSize)
{
	FCA_LOG(e_FCA_Log_Level_INFO, "GetCameraFrameDimensions");
	DriverLog(__FUNCTION__);
	*pDefaultFrameQueueSize = 1;
	*pFrameBufferDataSize = 16777216;
	return true;
}
bool Cuco_TrackedDeviceServerDriver::SetCameraFrameBuffering(int nFrameBufferCount, void** ppFrameBuffers, uint32_t nFrameBufferDataSize)
{
	FCA_LOG(e_FCA_Log_Level_INFO, "GetCameraFrameDimensions");
	DriverLog(__FUNCTION__);
	return true;
}
bool Cuco_TrackedDeviceServerDriver::SetCameraVideoStreamFormat(vr::ECameraVideoStreamFormat nVideoStreamFormat)
{
	FCA_LOG(e_FCA_Log_Level_INFO, "GetCameraFrameDimensions");
	DriverLog(__FUNCTION__);


	if (vr::CVS_FORMAT_RGB24 != nVideoStreamFormat)
		return false;
	return true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant