Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

H264 encoding

alex78
New Contributor I
358 Views
Dear all,

two questions regarding H264 decoding.

1. We are testing a h264 decoder that we originally took from IPP 6.0 (including sample code) and it works very well. Now I came accross this article http://software.intel.com/en-us/articles/intel-ipp-library-61-fixes-list/ with the issue DPD200134487 described as UMC H264 parser memory leak. Does it mean, that every h264 decoder based on Ipp 6.0 is leaking memory? We have not observed this behaviour so far,where can we find more information about this issue?

2. Question to Vladimir. There is an old thread http://software.intel.com/en-us/forums/showthread.php?t=63540&o=a&s=lr regarding an issue we had in the past with H264 decoding whichwas finally tracked down by an intel expert to a corrupted h264 stream. We inspected the attached H264 frame (attached to the original thread) but could not find any problem with the stream (SPS header and VUI). Is it possible to describe in more detail what exactly is corrupted in the stream?

Thanks very much in advance

Best regards
Alex
0 Kudos
3 Replies
PaulF_IntelCorp
Employee
358 Views
Hello Alex,

In reply to your question #1 regarding DPD200134487, details below.

Regards,

Paul

- - - - DPD200134487 detailed description - - - -

This bug was identified in IPP 6.0 and corrected in the initial release of IPP 6.1.

There is a memory leak in the UMC H264 parser implementation. The parsing structures overwrite their std::vector's base class with zeros, thus preventing std::vector from freeing its memory. The fix follows. It simply avoids overwriting the STL vector which has already been initialized by its own constructor.

--- audio-video-codecs\codec\h264_spl\include\umc_h264_parse_def.h +++ audio-video-codecs\codec\h264_spl\include\umc_h264_parse_def.h @@ -93,7 +93,7 @@ H264SequenceSetParse() { - memset(this, 0, sizeof(H264SequenceSetParse)); + memset(this, 0, sizeof(*this) - sizeof(buffer)); } }; @@ -112,7 +112,7 @@ H264PictureSetParse() { - memset(this, 0, sizeof(H264PictureSetParse)); + memset(this, 0, sizeof(*this) - sizeof(buffer)); } }; @@ -138,8 +138,7 @@ H264SliceHeaderParse() { - memset(this, 0, sizeof(H264SliceHeaderParse)); - is_valid = false; + memset(this, 0, sizeof(*this)); } }; } // namespace UMC
0 Kudos
PaulF_IntelCorp
Employee
358 Views
Hello Alex,

Regarding your question #2, I've asked Vladimir to review your question.

Paul
0 Kudos
PaulF_IntelCorp
Employee
358 Views
Hello Alex,

Response from the engineer, regarding the incomplete header:
There was [an] incomplete sps header at bitstream (incomplete VUi part of sps). A few bytes was absent. For example: lets, you have correct original bitstream with sps and VUI. Lets, size of SPS with VUI is 10 bytes. This corrupted stream contains only 7 bytes of sps with VUI. So, 3 bytes are lost
Regards,
Paul
0 Kudos
Reply