I am building a live transcoder using Intel IPP. It works pretty well, but when I run it with valgrind, I get some errorsand they all seem to relate to one particular subject. In summary the error report contains:
Conditional jump or move depends on uninitialised value(s) at w7_ippiQuantIntra_MPEG4_16s_C1I
Conditional jump or move depends on uninitialised value(s)at ippVideoEncoderMPEG4::TransMacroBlockIntra_MPEG4(unsigned char*, unsigned char*, unsigned char*, short*, int*, int, int, int, int*)by ippVideoEncoderMPEG4::EncodeIVOP() (ippvideoencodermpeg4_vop.cpp)
As far as I can see it, valgrind signals that coeffMB is unitialized, but using a memset on it does not remove the error. Removing the __ALIGN part of__ALIGN16(Ipp16s, coeffMB, 64*6); in EncodeIVOP() also does not change anything.
It seems that ippiDCT8x8Fwd_8u16s_C1R or ippiQuantIntra_MPEG4_16s_C1I in TransMacroBlockIntra_MPEG4 do something with coeffMB (such that valgrind thinks the data is unitialized again) but since the IPP libraries are not built with debugging symbols and I do not have the source of IPP, I cannotlook into this code.
It could be the case that valgrind (latestrelease 3.2.0)cannot handle this code, but when somebody knows more about this, please let me know.
I do not get any memory leak errors, so that is ok :D.
Hello, thank you for your report. It seems that valgrind just do not handle all the things correctly. Did you try to check the code with some other tools?