VCodecOneVpl C++ lib. Fast HEVC, H264 and JPEG encoding/decoding on Intel GPU

€1,500.00

VCodecOneVpl C++ library version 2.1.0 provides hardware video encoding/decoding (H264, HEVC and JPEG) for Intel HD Graphics based on oneVPL API.

We sell source code of this library as is, without future updates and technical support according to perpetual non-exclusive license. You pay once and can use this library in your software and hardware products without limits. Please read the license agreement before purchasing: LICENSE. You can buy technical support service for this product.

Add To Cart

VCodecOneVpl C++ library version 2.1.0 provides hardware video encoding/decoding (H264, HEVC and JPEG) for Intel HD Graphics based on oneVPL API.

We sell source code of this library as is, without future updates and technical support according to perpetual non-exclusive license. You pay once and can use this library in your software and hardware products without limits. Please read the license agreement before purchasing: LICENSE. You can buy technical support service for this product.

Technical support service
Options:

VCodecOneVpl C++ library version 2.1.0 provides hardware video encoding/decoding (H264, HEVC and JPEG) for Intel HD Graphics based on oneVPL API.

We sell source code of this library as is, without future updates and technical support according to perpetual non-exclusive license. You pay once and can use this library in your software and hardware products without limits. Please read the license agreement before purchasing: LICENSE. You can buy technical support service for this product.

Purchase options

You can buy the software by bank transfer. Bank transfer available only for companies. To buy software by bank transfer please send us request to info@constantrobotics.com. Also, you can buy technical support service for this product.

Downloads

Programmer’s manual: DOWNLOAD

Overview

VCodecOneVpl C++ library provides hardware video encoding / decoding (H264, HEVC and JPEG) for Intel HD Graphics based on oneVPL API. VCodecOneVpl class inherits interface and data structures from open source VCodec library (provides interface for video codecs, source code included, Apache 2.0 license) and also includes Logger open source library (provides functions to print logs, source code included, Apache 2.0 license). The library provides simple interface to be implemented in different C++ projects and compatible with Linux and Windows. It is written with C++17 standard. The library is supplied as source code only in form of CMake project.

Encoding time for 11th Gen Intel(R) Core(TM) i5-1145G7E on Ubuntu 22.04 LTS:

  • H264 codec, 2560x1440 - 11.6 msec, 1920x1080 - 8.6 msec, 1280x720 - 4.4 msec, 640x512 - 2.6 msec.

  • HEVC codec, 2560x1440 - 23.4 msec, 1920x1080 - 15.2 msec, 1280x720 - 9.3 msec, 640x512 - 5.2 msec.

  • JPEG codec, 2560x1440 - 8.2 msec, 1920x1080 - 4.8 msec, 1280x720 - 2.5 msec, 640x512 - 1.2 msec.

Decoding time for 11th Gen Intel(R) Core(TM) i5-1145G7E on Ubuntu 22.04 LTS:

  • H264 codec, 2560x1440 - 7.3 msec, 1920x1080 - 4.8 msec, 1280x720 - 2.5 msec, 640x512 - 1.3 msec.

  • HEVC codec, 2560x1440 - 7.4 msec, 1920x1080 - 4.3 msec, 1280x720 - 2.2 msec, 640x512 - 1.3 msec.

  • JPEG codec, 2560x1440 - 8.7 msec, 1920x1080 - 5.2 msec, 1280x720 - 2.6 msec, 640x512 - 1.3 msec.

Simple interface

namespace cr
{
namespace video
{
/**
 * @brief VCodecOneVpl class.
 */
class VCodecOneVplImpl : public VCodec
{
public:

    /// Class constructor.
    VCodecOneVplImpl();

    /// Class destructor.
    ~VCodecOneVplImpl();

    /// Set parameter value.
    bool setParam(VCodecParam id, float value) override;

    /// Get parameter value.
    float getParam(VCodecParam id) override;

    /// Encode/Decode video frame.
    bool transcode(Frame& src, Frame& dst) override;

    /// Execute command.
    bool executeCommand(VCodecCommand id) override;
};
}
}

Simple example

#include <iostream>
#include "VCodecOneVpl.h"

int main(void)
{
    // Set codec parameters.
    cr::video::VCodec* videoCodec = new cr::video::VCodecOneVpl();
    videoCodec->setParam(cr::video::VCodecParam::BITRATE_KBPS, 7500);
    videoCodec->setParam(cr::video::VCodecParam::GOP, 30);
    videoCodec->setParam(cr::video::VCodecParam::FPS, 30);

    // Create NV12 frame and fill color planes by random values.
    const int width = 1280;
    const int height = 720;
    cr::video::Frame frameNv12(width, height, cr::video::Fourcc::NV12);
    for (uint32_t i = 0; i < frameNv12.size; ++i)
        frameNv12.data[i] = (uint8_t)i;

    // Create output HEVC frame.
    cr::video::Frame frameHEVC(width, height, cr::video::Fourcc::HEVC);

    // Create output file.
    FILE *outputFile = fopen("out.hevc", "w+b");

    // Params for moving object.
    int objectWidth = 128;
    int objectHeight = 128;
    int directionX = 1;
    int directionY = 1;
    int objectX = width / 4;
    int objectY = height / 2;

    // Encode and record 200 frames.
    for (uint32_t n = 0; n < 200; ++n)
    {
        // Draw moving object.
        memset(frameNv12.data, 128, width * height);
        for (int y = objectY; y < objectY + objectHeight; ++y)
            for (int x = objectX; x < objectX + objectHeight; ++x)
                frameNv12.data[y * width + x] = 255;
        objectX += directionX;
        objectY += directionY;
        if (objectX >= width - objectWidth - 5 || objectX <= objectWidth + 5)
            directionX = -directionX;
        if (objectY >= height - objectHeight - 5 || objectY <= objectHeight + 5)
            directionY = -directionY;

        // Encode.
        if (!videoCodec->transcode(frameNv12, frameHEVC))
        {
            std::cout << "Can't encode frame" << std::endl;
            continue;
        }

        // Write to file.
        fwrite(frameHEVC.data, frameHEVC.size, 1, outputFile);  
    }

    // Close file.
    fclose(outputFile);

    return 1;
}
VCodecJetPack C++ lib. Fast video codec (H264, HEVC) for Nvidia Jetson platforms
€1,000.00
VCodecLibav C++ lib. Fast HEVC, H264 and JPEG encoding/decoding based on Libav
€1,500.00
VCodecImsdk C++ lib. Fast HEVC, H264 and JPEG encoding/decoding on Intel GPU (<= 11 gen)
€600.00
VCodecV4L2 C++ lib. Fast video codec (H264, JPEG) library for Raspberry PI4 and Zero 2
€1,500.00