I would like to use some c++ framework to decode, encode and manipulate video. There are numerous frameworks based on different technologies available, Intel Media SDK, NVIDIA VIDEO CODEC SDK, AMD Media SDK to name a few. These are HW vendor specific. I'm looking for something that would give me the abstraction layer which hides HW specific implementation, moreover I would like to use a library that can use all available HW acceleration options, typically when using Gen6 Intel with NVidia card, Intel SDK could be used for Intel integrated GPU, CUDA for NVidia and OpenCL for the CPU. Sounds like a holy grail, but there is such a library available? OpenCV looks like a good candidate, but can it use all available HW accelerators simultaneously?


I would definitely recommend using FFMPEG libraries.

They are open-source and are capable of processing a great variety of formats. You can find some tutorials here and there.

It also has hardware acceleration capabilities.

  • I was thinking of it too, but isn't it an overkill? FFMPEG is a huge library and I would use only tiny fraction of it... – kreuzerkrieg Feb 13 '17 at 12:53
  • 1
    If you want to manipulate many kinds of video streams, I don't see anything better... had the same concern in the past over the "overkill" part of it, but still stuck to it for its wide spectrum of supported formats and codecs. – Mathieu Rodic Feb 13 '17 at 12:58
  • That's it, I use only elementary streams as input, and very limited set of codecs which we support (and parse) in our code, so the hypothetical library would just get a frame to decode, no need to deal with files or streams. On the other hand I need processing of the decoded frame such as deinterlacing, cropping and dewarping. Since no crossplatform lib is needed I was thinking if the DirectX VA is the answer... – kreuzerkrieg Feb 14 '17 at 8:21
  • Without cross-platform need, DirectX can be a good option :) – Mathieu Rodic Feb 14 '17 at 9:42
  • 1
    I didn't work with DirectX VA, but DirectX 12, FFmpeg, and OpenCV. OpenCV uses FFmpeg (and so does VLC); FFmpeg is a lot more simpler than DirectX (11 too). So I would recommend FFmpeg if you're looking for results with less code. DirectX (12 especially) is interesting if you're looking for super high performance results (low latency etc) involving both strong processing and display, but that's really a piece of work. – Soleil Oct 21 '20 at 0:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.