Search code examples
videodelayhdmihdcp

Compute screen delay through HDMI


When playing a video file on a computer, HD television (LED, Plasma or whatever...), there is a delay between the displayed video and the audio out of the computer.

I heard that blueray player can extract this information from the HDMI connector to delay the audio output accordingly. Is it true? Is it possible to extract this information programmaticaly?


Solution

  • HDMI devices communicate much information among themselves. Some examples:

    • What video timing(s) are supported
    • Video formats supported
    • What kind of audio (device) is supported/used
    • EDID information

      From hdmi.org: "The EDID PROM contains information about the sink(display device) that it resides in. Its job is to communicate the preferred (or supported) video and audio formats and resolutions to the originating source"

    • What other HDMI devices are hooked up(daisy-chained) and their video/audio formats

    In delay, there can be variable delay time while the devices sync with each other. However, in regards to a proper timing of video/audio, later compliant HDMI devices should synchronize automatically. From "Why is Lip Sync important":

    "HDMI 1.3 provides a method whereby the audio processing times in devices can be automatically adjusted to remove lip sync errors."

    To access the information programmatically, I believe you need a Intel licensed HDMI device(see HDCP in Wikipedia) that would be able to send/receive the encrypted HDMI stream from the other device(s). This would be an HDMI device complete with a device driver whose API's you can call from your program.

    In your case you mention playing a video file. To fix the audio/video synchronization, you likely have to find the option in your media player program to either delay or speed up the audio start rather than access and change something on the HDMI device.