cancel
Showing results for 
Search instead for 
Did you mean: 

How to get rift show HDMI video feed bare metal

OhioIon
Honored Guest
Hi,

I want to view the output of my video processing board (Xilinx Zynq SoC or 7-series FPGA) on the rift. I power the rift with a power bank and send the OU stereo video feed directly via HDMI to the VR headset. So I'm not actually using any of the motion or head tracking stuff. There is also only the rift involved so no PC, Oculus home, SDK, whatsoever. I only want display HDMI feed and maybe also use the headphones by encoding audio in HDMI signal.

My problem is that once I put on the headset the rift won't activate the screens.

Is there any special resolution or data encoding format or refresh rate required on the HDMI connection in order to accept my feed?

Is there some initialization sequence necessary via USB to activate the displays within rift?

Regards,

Ion
2 REPLIES 2

OhioIon
Honored Guest
I checked the CV1 EDID. Looks like timing of the HDMI signal needs to be this:

// Detailed Timing Descriptor //
Pixel Clock: 296.75MHz 
Horizontal Active: 2160 
Horizontal Blanking: 80 
Vertical Active: 1200 
Vertical Blanking: 272 
Horizontal Sync Offset: 8 
Horizontal Sync Pulse: 32 
Vertical Sync Offset: 50 
Vertical Sync Pulse: 2 
Horizontal Display Size: 119 
Vertical Display Size: 66 
Horizontal Border: 0 
Vertical Border: 0 
Interlaced: false 
Stereo Mode: 0 
Sync Type: 3 

That are 3.297.280 pixel @ 296.75 MHz which gives the 90 Hz refresh rate advertised by Oculus.

Seems like the mode is Side-By-Side now with CV1 as the horizontal active width is now twice the size of the single eye resolution.

Does someone know if it will also work with e.g. 75 Hz refresh rate?
The Zynq is limited to 250 MHz pixel clock.

Or will it work with less blanking?
The following settings would give me 90 Hz as well but drastically reduce the vertical blanking interval:
Pixel Clock: 246.96MHz 
Horizontal Active: 2160 
Horizontal Blanking: 80 
Vertical Active: 1200 
Vertical Blanking: 25
Horizontal Sync Offset: 8 
Horizontal Sync Pulse: 32 
Vertical Sync Offset: 12 
Vertical Sync Pulse: 2 

According to the CV1 teardown the HDMI to DSI bridge (TC358870XBG) is capable of RGB888 but also YCbCr422. Would chroma subsampling work with the CV1?

I also noticed that there is a orange LED inside the CV1 which goes white in case Oculus app has connection to both HDMI and USB. Only then the screens will enable on proximity.

Think I need to have a look at the USB protocol as well.... 

Regards,

Ion

OhioIon
Honored Guest
Okay now finally got it running with Raspberry Pi 4. Here's what I've found out:

- The LED will only turn from orange to white in case the Rift is seeing some HDMI signal and the screens are activated and keept alive with USB HID commands (see e.g. openHMD library)

- Even in case you see the white LED, screens will still stay dark if the HDMI is not exactly at 269.75 MHz pixel clock. This is quite unfortunate cause the cheaper Zynqs can't be used then.

- Rift CV1 does accept some other blanking and you can play around with it but basically the best and flicker-free results are achieved using exactly the detailed timing specification as given in the EDID.

- I did not extensive testing but it seems like reducing active resolution while keeping the pixel clock constant does not work either.  (e.g. 1080p timings but with increased pixel clock and fps) . So basically it needs to be the native 2160x1200 which kind of makes sense for an HMD.

Regards,

Ion