Media (Intel® Video Processing Library, Intel Media SDK)
Access community support with transcoding, decoding, and encoding in applications using media tools like Intel® oneAPI Video Processing Library and Intel® Media SDK
Announcements
The Intel Media SDK project is no longer active. For continued support and access to new features, Intel Media SDK users are encouraged to read the transition guide on upgrading from Intel® Media SDK to Intel® Video Processing Library (VPL), and to move to VPL as soon as possible.
For more information, see the VPL website.

Intel media sdk H.264 decoder handle leak

Kazuya_K_
Beginner
502 Views

I think bug in MediaSDK.

OS : Windows7 (x64)
SDK:API version 1.11

1. Create instance and initialize.

2. Execute decode operation.

3. Close operation.(reference to the sample code)

When performing the above operation, handle count increases one.
If does not execute decode, handle count does not increase.(create instance -> initialize -> close)

I think the wait handle that was created in asynchronous decoding has not been released.
If this is a bug, I hope to be fixed in the next release.

(Sorry, I'm using the online translation services.)

0 Kudos
7 Replies
Harshdeep_B_Intel
500 Views

Hi,

We have new MSDK API release version 1.13 . Please run sample application again from the new version and send me logs. Also send me logs from System analyzer to know about HW configuration, with information of which MSDK sample you are using.

Thanks, 

0 Kudos
Kazuya_K_
Beginner
500 Views

thank you for reply.

I have updated the SDK to version 1.13.
And rebuild the code, but did not improve.

My application was created in reference to the "intel_media_sdk_tutorial_041813 (simple_2_decode d3d)".

System Analyzer Log(HW configuration)

Intel Media SDK System Analyzer (64 bit)

The following versions of Media SDK API are supported by platform/driver:

    Version    Target    Supported    Dec    Enc
    1.0    HW    Yes        X    X
    1.0    SW    Yes        X    X
    1.1    HW    Yes        X    X
    1.1    SW    Yes        X    X
    1.3    HW    Yes        X    X
    1.3    SW    Yes        X    X
    1.4    HW    Yes        X    X
    1.4    SW    Yes        X    X
    1.5    HW    Yes        X    X
    1.5    SW    Yes        X    X
    1.6    HW    Yes        X    X
    1.6    SW    Yes        X    X
    1.7    HW    Yes        X    X
    1.7    SW    Yes        X    X
    1.8    HW    Yes        X    X
    1.8    SW    Yes        X    X


Graphics Devices:
    Name                                         Version             State
    Intel(R) HD Graphics 4000                    10.18.10.4061       Active

System info:
    CPU:    Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
    OS:    Microsoft Windows 7 Professional 
    Arch:    64 

Installed Media SDK DirectShow filters:

Installed Intel Media Foundation Transforms:
  Intelョ Hardware M-JPEG Decoder MFT : {00C69F81-0524-48C0-A353-4DD9D54F9A6E}
  Intelョ Hardware VC-1 Decoder MFT : {059A5BAE-5D7A-4C5E-8F7A-BFD57D1D6AAA}
  Intelョ Hardware H.264 Decoder MFT : {45E5CE07-5AC7-4509-94E9-62DB27CF8F96}
  Intelョ Hardware MPEG-2 Decoder MFT : {CD5BA7FF-9071-40E9-A462-8DC5152B1776}
  Intelョ Quick Sync Video H.264 Encoder MFT : {4BE8D3C0-0515-4A37-AD55-E4BAE19AF471}
  Intelョ Hardware Preprocessing MFT : {EE69B504-1CBF-4EA6-8137-BB10F806B014}

0 Kudos
Harshdeep_B_Intel
500 Views

Hi,

I see that you are creating your own application using a tutorial. I highly suggest to use the our Samples as reference as they are regularly updated and we can look into further if you see the similar issue with the samples. Also, update the graphic driver to the latest from: https://downloadcenter.intel.com/ ;

0 Kudos
Kazuya_K_
Beginner
500 Views

Driver version is the latest way.(10.18.10.4061)

Change "Intel Media Samples 6.0.0.98947 \ sample_decode" as shown below

#if defined(_WIN32) || defined(_WIN64)
int _tmain(int argc, TCHAR *argv[])
#else
int main(int argc, char *argv[])
#endif
{
	CDecodingPipeline*   Pipeline; // pipeline for decoding, includes input file reader, decoder and output file writer
	
	for(int count=0; count < 1000; count++)
	{
		sInputParams        Params;   // input parameters from command line
		//CDecodingPipeline   Pipeline; // pipeline for decoding, includes input file reader, decoder and output file writer
		Pipeline = new CDecodingPipeline();
		
		mfxStatus sts = MFX_ERR_NONE; // return value check

		sts = ParseInputString(argv, (mfxU8)argc, &Params);
		MSDK_CHECK_PARSE_RESULT(sts, MFX_ERR_NONE, 1);

		if (Params.bIsMVC)
			Pipeline->SetMultiView();//Pipeline.SetMultiView();

		sts = Pipeline->Init(&Params);//sts = Pipeline.Init(&Params);
		MSDK_CHECK_RESULT(sts, MFX_ERR_NONE, 1);

		// print stream info
		Pipeline->PrintInfo();//Pipeline.PrintInfo();

		msdk_printf(MSDK_STRING("Decoding started\n"));

		for (;;)
		{
			sts = Pipeline->RunDecoding();//sts = Pipeline.RunDecoding();

			if (MFX_ERR_INCOMPATIBLE_VIDEO_PARAM == sts || MFX_ERR_DEVICE_LOST == sts || MFX_ERR_DEVICE_FAILED == sts)
			{
				if (MFX_ERR_INCOMPATIBLE_VIDEO_PARAM == sts)
				{
					msdk_printf(MSDK_STRING("\nERROR: Incompatible video parameters detected. Recovering...\n"));
				}
				else
				{
					msdk_printf(MSDK_STRING("\nERROR: Hardware device was lost or returned unexpected error. Recovering...\n"));
					sts = Pipeline->ResetDevice();//sts = Pipeline.ResetDevice();
					MSDK_CHECK_RESULT(sts, MFX_ERR_NONE, 1);
				}

				sts = Pipeline->ResetDecoder(&Params);//sts = Pipeline.ResetDecoder(&Params);
				MSDK_CHECK_RESULT(sts, MFX_ERR_NONE, 1);
				continue;
			}
			else
			{
				MSDK_CHECK_RESULT(sts, MFX_ERR_NONE, 1);
				break;
			}
		}
		msdk_printf(MSDK_STRING("\nDecoding finished\n"));
		delete Pipeline;
		Pipeline = NULL;
	}

    return 0;
}

Other parts are not changed.

When you compile and run this code, also an increase in handle count is seen.
(Command line arguments: h264 -d3d -hw -i test.h264)

0 Kudos
Harshdeep_B_Intel
500 Views

Hi,

The operation you are performing  in the For loop where  you are creating a pipeline in the beginning and deleting it in the end of every run. On next run, when pipeline is created, it is not completely Null. So basically the operation you are trying to run by just modifying  the sample to work will not work as it was never  designed to handle the pipeline loop in the way you are making calls. But, I will send this information to the team and update.

0 Kudos
Laurent_M_
Beginner
500 Views

Hi,

I have also an handle leak with H264 decoder.

I use some tools to detect where the problem occurs.

I think the problem is in the function MFXVideoDECODE_DecodeFrameAsync. This function call CreateEvent but event isn't close.

I work with IPP for 10 years. When we discovered a bug in IPP sample, it's possible to fix it, but unfortunately we haven't source code with IMS.

How to resolve this issue?

Do I need a driver update?

 

Edit: The problem depends of hardware/driver version

System 1: HANDLE LEAK

CPU : Intel i7-3770K

Motherboard : Intel DZ77BH-55K

GPU : Intel HD 4000 version 10.18.10.4061

OS : Windows 7 64bits

Software : x86 or x64

 

System 2: NO HANDLE LEAK

CPU : Intel i5-4250U

NUC D54250WYK 

GPU : Intel HD 5000 version 10.18.14.4080

OS : WES 7 64bits

Software : x86

 

Regards

Laurent

 

0 Kudos
Harshdeep_B_Intel
500 Views

Hi Laurent,

Please create a new thread with the issue you are facing with logs from System analyzer and information about the sample you are seeing this issue. This will help us better track the issues separately and avoid confusion.

Thanks,

0 Kudos
Reply