Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Pascal_Binggeli
Beginner
78 Views

IPP/UMC: Crash in H.264 encoder when resizing output

Hello

I'm experiencing a crash when resizing video from 1920x1080 to 640x480 in the H.264 video encoder. There is nocrash when not resizing the output.

The exception is throw in the VideoProcessing::GetFrame. From the debugging information, I've guessed that the plane informationis incorrectly initializedusing the input information (i.e. 1920x1080) and not from the output information, causing the access violation writing location exception later in the video processing part.

The call stack at exception time is

>df_MPEGEncoderFilters.dll!UMC::VideoProcessing::GetFrame(UMC::MediaData * input=0x1551f6d4, UMC::MediaData * output=0x0ec50f60) Line 238 + 0x25 bytesC++
df_MPEGEncoderFilters.dll!VideoProcessing_GetFrame(void * p=0x1551eca4, UMC::MediaData * input=0x1551f6d4, UMC::MediaData * output=0x0ec50f60) Line 69 + 0x1b bytesC++
df_MPEGEncoderFilters.dll!UMC_H264_ENCODER::H264EncoderFrameList_InsertFrame_8u16s(UMC_H264_ENCODER::sH264EncoderFrameList_8u16s * state=0x0ec41320, UMC::VideoData * rFrame=0x1551f6d4, UMC_H264_ENCODER::EnumPicCodType ePictureType=INTRAPIC, int isRef=0, int num_slices=1, const IppiSize & padded_size={...}, int alpha=0) Line 1271 + 0x14 bytesC++
df_MPEGEncoderFilters.dll!UMC_H264_ENCODER::H264CoreEncoder_Encode_8u16s(void * state=0x0ec411c0, UMC::VideoData * src=0x1551f6d4, UMC::MediaData * dst=0x1551f35c, const unsigned int flags=0, unsigned int & notes=0) Line 355 + 0x4c bytesC++
df_MPEGEncoderFilters.dll!UMC_H264_ENCODER::H264CoreEncoder_GetFrame_8u16s(void * state=0x0ec411c0, UMC::MediaData * in=0x1551f6d4, UMC::MediaData * out=0x1551f35c) Line 1932 + 0x25 bytesC++
df_MPEGEncoderFilters.dll!UMC::H264VideoEncoder::GetFrame(UMC::MediaData * in=0x1551f6d4, UMC::MediaData * out=0x1551f35c) Line 109 + 0x14 bytesC++




I've found the workaround to initialize the structure as follow:

- In umc_h264_enc_cpb_tmpl.cpp.h, line 120, replace:

if (downScale)
{
state->uWidth = in->GetWidth() >> 1;
state->uHeight = in->GetHeight() >> 1;
}
else
{
state->uWidth = in->GetWidth();
state->uHeight = in->GetHeight();
}

with

if (downScale)
{
...
}
else
{
state->uWidth = paddedSize.width;
state->uHeight = paddedSize.height;
}


This error occurs with Ipp UMC version 6.1.5

Thanks for your time,
Pascal

0 Kudos
1 Reply
Pascal_Binggeli
Beginner
78 Views

Eventually, I've moved the deinterlacing/resizing as a preprocessing step of the encoding (using the UMC::VideoProcessing class.)

Cheers,
Pascal
Reply