Decode MVC using CUDA

Hi, there.

I’ve been searching this forum a while now and could not find many topics referring to MVC 3D decoding/encoding - and the handful that does, are unresolved threads without (useful) reponses.

Using the Video Codec SDK 7.0, I’m trying to decode (later encode) an MVC stream.
But I couldn’t find a single example or any documentation on this.

Decoding MPEG2, AVC and VC-1 all worked pretty much right out of the box, but I didn’t get a single step further toward decoding MVC.

The SDK comes with a few flags and structures that hint on the existence of MVC (like cudaVideoCodec_H264_MVC), but completely lacks any documentation on it.

Is there anyone here who can show me the first steps?

My general setup so far is to use

cuvidCreateVideoParser(…)

initialize the parser with cudaVideoCodec_H264_MVC and then feed encoded left and right eye stream (pairwise).
The parser calls back on pfnSequenceCallback, but with the Codec set to plain cudaVideoCodec_H264 and continues decoding only one eye.
When I force the codec back to cudaVideoCodec_H264_MVC there, a call to cuvidCreateDecoder results in CUDA_ERROR_NO_DEVICE.

This again, lead me to suspect, that my graphics adapter (GT740) doesn’t support MVC.
But searching the internet for any way to determine whether MVC should be supported or not lead to nothing at all.
If it’s just the lack of MVC support on my hardware, I’m happy to buy and install a more recent GPU, but I wouldn’t even know, if that wll make the difference.

So… does anyone know anything about this?

Oh, btw, decoding the same stream works fine using the Intel Media SDK (though that comes with its own difficulties), so the stream itself should be fine.

I’m just trying to add support for nVidia cards as well.

Nothing?

Is MVC decoding a too exotic thing to do?
I find this hard to believe…

What’s MVC?

It’s “Multiview Video Coding”, an extension to AVC for stereoscopic (3D) video.

Basically plain AVC plus an extension containing the second eye (referencing the first eye, for better compression).

Mostly known from 3D Blu-ray Discs.

Ok, so at this point, I’m going to assume, that nobody ever attempted to decode 3D AVC video using CUDA…

I believe that MVC or HEVC-MVC is not supported in the HW decoders at all. Seems like these extensions are not even implemented in other widely used frameworks like ffmpeg (asked here and here). Please correct me if there is a GPU support for this but I doubt that there ever will be.

In my opinion, most folks who are interested in using a NVIDIA GPU for video decode (or encode) are not actually interested in “using CUDA” for the encode/decode operation. A modern NVIDIA GPU includes separate HW engines to do video encode and decode, and these don’t “use CUDA”. Yes, one of the possible methods to present data to/from these hardware engines is to use CUDA constructs/buffers, but that’s where it ends.

The functionality to do encode/decode using these hardware engines uses something called the NVIDIA Video Codec SDK, and this is not formally a part of CUDA. The supported formats and capabilities have a summary landing page here.

Questions pertaining to the use of the NVIDIA Video Codec SDK have their own forum, and I don’t think you’re going to find many experts on that technology here on this forum.

If you are actually asking how to do the full video encode or decode pipeline purely using CUDA (it is possible, of course), then feel free to ask questions like that here, although you may get crickets. As a practical matter, I don’t know of anyone who does that (a full video encode or decode pipeline using CUDA). NVIDIA used to have a library that did this many years ago, it’s long ago been obsoleted, and it was never open-source.

Whether MVC is supported or not, I don’t know. But if it were me, I would ask that question on the Video Codec SDK forum, not here. Unless you are planning to roll your own in CUDA, in which case the question (“support”) doesn’t make sense to me, but feel free to ask it here.

1 Like