View Issue Details

IDProjectCategoryView StatusLast Update
0000296JVT JM H.264/AVC reference softwareencoderpublic2012-04-11 18:28
ReporterPierre Andrivon Assigned To 
PrioritynormalSeveritycrashReproducibilityalways
Status newResolutionopen 
PlatformRedHatOSLinux x64 
Product VersionJM 18.3 
Summary0000296: Crash 14 bits encoding
DescriptionCrash with HM-like (RA) config files in Release mode gcc 4.1.2 (x64) - 14 bits - QP 37 encoding. No crash with other tested QP... (init' issue ?)
No crash with same platform and Debug mode.
No crash reported on win32/x64.
Content used: SVT Parkjoy 14 bits 1920x1080 rescaled with provided Lanczos 3 filter from avisynth.
Attached: config file used + Valgrind report.
TagsNo tags attached.

Activities

Pierre Andrivon

2012-03-26 17:07

reporter  

crash_JM183_14bits.zip (29,554 bytes)

Pierre Andrivon

2012-04-11 10:07

reporter   ~0000526

Actually this bug appeared on win32/x64 platform too (14 bits content as a source)... It seems that it comes from the fact that sometimes in function :
int mode_decision_for_I16x16_MB_RDO (rd_intra_jm.c)
l. 516
if(rdcost < min_rd_cost)
l. 518
is never fulfilled for the whole loop (k=1..4) so that the "memcpy" of "BestCofAC/DC" never happens. In consequences, as these structures are not initialized, bad data (actually, uninitialized data) makes cabac crash later. I am working on it asap...

Alexis Michael Tourapis

2012-04-11 18:28

developer   ~0000528

Last edited: 2012-04-11 18:49

I don't think whoever wrote this ever tested the function when in 14 bits. The code seems weird since the first memcpy should probably be of size sizeof(int) * 65. That is:

memcpy(bestCofAC[b8][b4][0], currSlice->cofAC[b8][b4][0], sizeof(int) * 65);

I guess setting bestCofAC and bestCofDC to zero also wouldn't hurt.

I would though suggest increasing DISTBLK_MAX. In your case you have (2^14 - 1)^2 * 2^8 max possible distortion which is approximately equal to 2^36. That could result in issues with the current set value. I would think that maybe changing the #define to:

#define DISTBLK_MAX ((distblk) INT_MAX << (2 * LAMBDA_ACCURACY_BITS))

Maybe safer and may make the code more futureproof, i.e. for supporting 16 bit inputs also. Probably multiplying by 4 would also be okay. I have of course not tested this.

You can also try disabling I16RDOpt btw.

Best regards,

Alexis

Issue History

Date Modified Username Field Change
2012-03-26 17:07 Pierre Andrivon New Issue
2012-03-26 17:07 Pierre Andrivon File Added: crash_JM183_14bits.zip
2012-04-11 10:07 Pierre Andrivon Note Added: 0000526
2012-04-11 18:28 Alexis Michael Tourapis Note Added: 0000528
2012-04-11 18:49 Alexis Michael Tourapis Note Edited: 0000528