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?

1 Answer 1


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... Commented Feb 13, 2017 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. Commented Feb 13, 2017 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... Commented Feb 14, 2017 at 8:21
  • Without cross-platform need, DirectX can be a good option :) Commented Feb 14, 2017 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
    Commented Oct 21, 2020 at 0:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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