SOLVED: Windows Advanced SDK Examples\C++\NDIlib_Recv_GPUDecode does not decode

swooby

New member
I am trying to learn how to decode NDI frames on a GPU and render the result fullscreen.
My end-goal target device right now is either a Raspberry Pi 4B, or a Nvidia Jetson Nano 2GB.
I am struggling learning how to get the "Linux/ARM Advanced NDI SDK" to work on those, but I am also trying the more capable "Windows Advanced NDI SDK" on my more comfortable platform of Windows.

I am surprised there is no code example for a basic hello world software decoding NDI viewer app.

The `NDIlib_Recv_GPUDecode` example gave me some hope, but after a few tweaks to get it to build and run, the code just keeps reporting `Frame received with no decoder.`

I have my local Windows 10 PC running NDI Screen Capture (non HX).
NDI Monitor on my local PC or another other PC on the network and can see my screen's video.

I run my compiled `NDIlib_Recv_GPUDecode` binary and it sees the same source but reports `Frame received with no decoder.`

The `video_decoder` method's `video_frame.FourCC` switch was just returning, so I tweaked it a tiny bit to print out the FourCC:
Code:
switch (video_frame.FourCC)
    {    case NDIlib_compressed_FourCC_type_H264:
                    m_source_format = MFVideoFormat_H264;
                    break;


        case NDIlib_compressed_FourCC_type_HEVC:
                    m_source_format = MFVideoFormat_H264;
                    break;


        default:
            printf("Unsupported FourCC %u 0x%0X", video_frame.FourCC, video_frame.FourCC); // added
            return;
    }

What I get is:
Code:
Unsupported FourCC 810633299 0x30514853

Why is this example code not able to decode the video TXed by the NDI Screen Capture app?

Thanks
 

Jarno

Post-LW Engineer
That FourCC is a SpeedHQ codec (SHQ0 specifically in this instance), which is what you'll get when using a non-HX source. The GPU decode example is meant to show GPU decoding of HX (H264/HEVC) streams.

---JvdL---
 

swooby

New member
That FourCC is a SpeedHQ codec (SHQ0 specifically in this instance), which is what you'll get when using a non-HX source. The GPU decode example is meant to show GPU decoding of HX (H264/HEVC) streams.

---JvdL---
Thanks!
I printed the first 4 bytes of that FourCC and saw it was "SHQ".

I was biting my tongue not asking the obvious "Why is Examples\C++\NDIlib_Recv_GPUDecode not in Examples\C++ (HX2)".
I figured since there was a HX2 folder, then anything in the non-HX2 folder is non-HX.

I closed "NDI Screen Capture" and started "NDI Screen Capture HX" and the example code worked fine!
 
Top Bottom