I am evaluating Geforce GTX 280 to implement the H.264 video encoder based on CUDA architecture. In the installation package of Cuda2.3, I guess that the encoder may have been implemented in nvcuenc.dll. could you confirm this? If yes, How to get the related documents and APIs to support my further working?
Where did yo usee a h.264 video encoder based on CUDA?
The only one that is known is BADABOOM, and it’s mainly know for it’s low-quality and under-performing compared to CPU x264 with same quality-level…
Badaboom underperforms? Can some1 shed more light on this? Is using GPU for video encoding, a bad idea?
CUDA doesn’t provide APIs for H.264 encoding, just for decoding… You’ll have to either implement it yourself or use a third-party CUDA based video encoder.
Badaboom underperforms not in the sense that it’s maximum encoding speed is bad, it run really fast.
It underperforms in the sense that with SAME QUALITY LEVEL (including video stream bandwidth and visual quality level), it run usually slower than x264 software encoder on quad-core or 8-core intel CPU, depending on the GPU.
It also underperforms in the sense that it could not reach the same quality-level than the best quality offers by major software H.264 encoders (including the excellent open-source x264).
Their server software is interesting to consider if you plan to do massive video encoding (or re-encoding) using a server with TESLA’s cards, but it,s expensive, and from my point of view, I prefer using inexpensive 1U servers box with NEHALEM 4-core/8-threads CPU that performs incredibly well for this kind of tasks, while offering better price/performance ratio (always refering to same visual quality-level and video stream bandwidth occupation).
But still, BADABOOM showed that it’s possible, and regret that x264 teams didn’t try harder to use CUDA, and switched to hardware-encoders optimisations for servers.
Badaboom underperforms not in the sense that it’s maximum encoding speed is bad, it run really fast.
It underperforms in the sense that with SAME QUALITY LEVEL (including video stream bandwidth and visual quality level), it run usually slower than x264 software encoder on quad-core or 8-core intel CPU, depending on the GPU.
It also underperforms in the sense that it could not reach the same quality-level than the best quality offers by major software H.264 encoders (including the excellent open-source x264).
Their server software is interesting to consider if you plan to do massive video encoding (or re-encoding) using a server with TESLA’s cards, but it,s expensive, and from my point of view, I prefer using inexpensive 1U servers box with NEHALEM 4-core/8-threads CPU that performs incredibly well for this kind of tasks, while offering better price/performance ratio (always refering to same visual quality-level and video stream bandwidth occupation).
But still, BADABOOM showed that it’s possible, and regret that x264 teams didn’t try harder to use CUDA, and switched to hardware-encoders optimisations for servers.
Wendy,
You might have well been right. 3.2RC carries the encoding libraries and the API. Check out the windows version of the RC
Wendy,
You might have well been right. 3.2RC carries the encoding libraries and the API. Check out the windows version of the RC
In the Win32 installation of the toolkit the documentation is named NVIDIA_CUDA_VideoEncoder.pdf.
The C API encoder is combined with the DirectShow filter in nvcuvenc.dll which is part of the driver and located in c:\windows\system32.
For programming using the C API you need: NVEncoderAPI.h, NVEncodeDataTypes.h, nvcuvenc.lib
For using the DirectShow filter you need additionally: INvTranscodeFilterGUIDs.h, INVVESetting.h
I was successfull using the C API. I failed using the DirectShow filter correctly until that time.
A small hint: using SetDefaultParam() was not enough, I had to set a lot of the parameters manually, then it worked.
In the Win32 installation of the toolkit the documentation is named NVIDIA_CUDA_VideoEncoder.pdf.
The C API encoder is combined with the DirectShow filter in nvcuvenc.dll which is part of the driver and located in c:\windows\system32.
For programming using the C API you need: NVEncoderAPI.h, NVEncodeDataTypes.h, nvcuvenc.lib
For using the DirectShow filter you need additionally: INvTranscodeFilterGUIDs.h, INVVESetting.h
I was successfull using the C API. I failed using the DirectShow filter correctly until that time.
A small hint: using SetDefaultParam() was not enough, I had to set a lot of the parameters manually, then it worked.