VP8 encoding support on windows?

VP8 encoding support on windows?

Hello Experts!, 

I am working on a project which follows following steps: input feed is taken from camera, encoding (vp8 encoder used) is done, transferring over web, decoding feed (vp8 decoder used) and stream it on a web browser. 

I wish to use hardware accelerated vp8 encoder and decoder for this purpose along with gstreamer-1.0 framework. As a result, I installed Intel media SDK 2018 R2.

Can anyone please help me to know whether media SDK supports hardware acceleration for VP8 encoder on windows?

Hardware Specifications:
1) MIO-2360N-S2A1E
2) Intel Pentium N4200 CPU (Kaby Lake)
    -4c/4t @1.1GHz-2.5GHz
    -Intel HD Graphics 505 (Apollo Lake) - 18 execution units
3) 8GB RAM

 

Thanks and Regards,
Saurabh Bora

12 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Hi Saurabh,

I think we support VP8 encode. A easy way to check is to run "simple_7_codec" in your platform.

This program is part of the tutorial package, you can download it from the following page:

https://software.intel.com/en-us/media-sdk/training

Let me know if you have any questions.

Mark

Unfortunately simple_7_codec sample does not have VPx encoder related code:

//The task list for the encoder checking
CodecTask enc_tasks[] = {
    { fillH264EncodeParams, false, false }, //Set "attach_option" to true to attached the extCodingOption2 parameters.
    { fillHEVCEncodeParams, true, false }, //H.265 plugin must be loaded during the runtime.
    { fillHEVC10EncodeParams, true, false }, //H.265 plugin must be loaded during the runtime.
    { fillMPEG2EncodeParams, false, false },
    { fillMJPEGEncodeParams, false, false }
};

It also looks like VPx encoder implementation is moved to a plugin. 

Hi Roman,

You can extend the tutorial code with VP8 and run the code again, it should be not very difficult. Did you try it?

I am also checking the document we had before, following old release notes has a table of the codec we support but it is on Linux and should be updated, so I am checking it internally now.

https://software.intel.com/sites/default/files/managed/cf/4d/media_serve...

When you mentioned "looks like VPx encoder implementation is moved to a plugin", how did you get the conclusion?

Mark

Quote:

Liu, Mark (Intel) (Intel) wrote:
When you mentioned "looks like VPx encoder implementation is moved to a plugin", how did you get the conclusion?

I supposed that after looking into sample_common\src\plugin_utils.cpp code:

mfxStatus ConvertStringToGuid(const msdk_string & strGuid, mfxPluginUID & mfxGuid)
{
    mfxStatus sts = MFX_ERR_NONE;

    // Check if symbolic GUID value
    std::map<msdk_string, mfxPluginUID> uid;
    uid[MSDK_STRING("hevcd_sw")] = MFX_PLUGINID_HEVCD_SW;
    uid[MSDK_STRING("hevcd_hw")] = MFX_PLUGINID_HEVCD_HW;

    uid[MSDK_STRING("hevce_sw")] = MFX_PLUGINID_HEVCE_SW;
    uid[MSDK_STRING("hevce_gacc")] = MFX_PLUGINID_HEVCE_GACC;
    uid[MSDK_STRING("hevce_hw")] = MFX_PLUGINID_HEVCE_HW;

    uid[MSDK_STRING("vp8d_hw")] = MFX_PLUGINID_VP8D_HW;
    uid[MSDK_STRING("vp8e_hw")] = MFX_PLUGINID_VP8E_HW; // <<--------

    uid[MSDK_STRING("vp9d_hw")] = MFX_PLUGINID_VP9D_HW;
    uid[MSDK_STRING("vp9e_hw")] = MFX_PLUGINID_VP9E_HW;

 

Hi Roman and Liu, 

Thanks for your suggestions.

I have extended the tutorial simple_7_codec sample code in following manner:

1) Appended { fillVP8EncodeParams, true, false } to the CodecTask enc_tasks[] array

2) Provided definition for fillVP8EncodeParams as following:

char* fillVP8EncodeParams(mfxVideoParam *param, void* extOpts) {
    static char strRet[] = "Encoder VP8 with resolution(1920x1080)";

    memset(param, 0, sizeof(*param));

    param->IOPattern = MFX_IOPATTERN_IN_SYSTEM_MEMORY;
    param->mfx.CodecId = MFX_CODEC_VP8;
    param->mfx.CodecProfile = MFX_PROFILE_VP8_3;

    // - Width and height of buffer must be aligned, a multiple of 32
    // - Frame surface array keeps pointers all surface planes and general frame info
    param->mfx.FrameInfo.Width = MSDK_ALIGN16(1920);
    param->mfx.FrameInfo.Height = MSDK_ALIGN16(1080);
    param->mfx.FrameInfo.FourCC = MFX_FOURCC_NV12;
    param->mfx.FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE;
    param->mfx.FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420;

    return strRet;
}

3) Added following case(please look at italic one) in a function called msdkGetPluginUID present in common_utils.cpp

        case MSDK_VENCODE:
            switch (uCodecid)
            {
            case MFX_CODEC_HEVC:
                return MFX_PLUGINID_HEVCE_HW;
            case MFX_CODEC_VP8:
                return MFX_PLUGINID_VP8E_HW;

            }

After building the modified sample code, I am getting below output for VP8 encoder on console:

Check Encoder VP8 with resolution(1920x1080)
Loading Encoder VP8 with resolution(1920x1080) plugin failed
The encoder wasn't closed successfully.

Please guide me if I have missed anything in the code? OR 

Can we conclude that VP8 encoder is not supported?

 

Thanks and Regards, 

Saurabh Bora

Hi Saurabha and Roman,

Really apologized for the late response and might mis-guide you to check the runtime codec, I just confirmed with our development: we don't support hardware VP8 encoder.

This should apply both Windows and Linux platform.

Let me know if you have any request on this issue.

Mark

Hi Liu, 

Thanks! for your prompt response.

If you could you please highlight whether it is part of development in near future, it would be great help.

 

Thanks and Regards,

Saurabh Bora

Hi Saurabh,

As far as I know, there is no plan to develop support VP8 encoder although we may have a plan for VP9. 

As you know, with AV1 is coming, both VP8 and VP9 is getting obsoleted, is any special reason to use VP8 encoder?

Mark

Hi Saurabh,

There is a news this week about our software encoder to support AV1, here is the detail:

Intel announced SVT-AV1 this week with Netflix. This is a software encoder on Xeon D/scalable processors. You can check https://01.org/svt for details but in general, this encoder supports HEVC, VP9 and AV1.

Let me know if you have any questions.

Mark

Hi Mark,

By http://github.com/intel/media-driver#supported-codecs, Intel is support vp8 after KBL.

What is difference? Thanks for  your reply

Guan-Lin

 

 

 

Thanks,

This is a good catch and I do notice the following difference:

I don't know what's the difference but it should be clear VP8 is not support for Open Source project like Media SDK. Not clear to me is the Windows platform.

Mark

Leave a Comment

Please sign in to add a comment. Not a member? Join today