This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

H.264 01.00.03.00 encoder artifacts in multicore mode

Hi,

I use H.264 encoder in live streams transcoding application.

When I compile my project with H.264 encoder of version 01.00.03.00 and run the encoder on 2 and more cores it produces artifacts. Totally the same code doesn't produce artifacts when compiled with previous 01.00.02.00 version.

Output produced by 01.00.03.00 (artifacts): 01.00.03.00.ts.zip

Output produced by 01.00.02.00 (no artifacts): 01.00.02.00.ts.zip

Configuration: 

# General
entropyCodingMode = 0; # 0: CAVLC, 1: CABAC (for HP and MP only)
gopStructure = 0; # 0: NONUNIFORM = IBBPBBP, 1: UNIFORM = BBIBBPBB
IDRFrameInterval = 1; #  0: Only first I frame as IDR, 1: All I frames are IDR, 2: 1 out of 2 I frames are IDR starting from first I frame
transformBlockSize = 0; #  Transform blocks size. 0: 4x4, 1: 8x8 (valid for HP only), 2: adaptive - encoder decides as per content
log2MaxFNumMinus4 = 10; #  Limits the maximum frame number in the bit-stream to (1<< (log2MaxFNumMinus4 + 4)) Range[0,12]
picOrderCountType = 0; #  POC type: 0, 1, 2
interlaceCodingType = 4; # 0: PICAFF (not supported), 1: MBAFF (not supported), 2: FIELDONLY_MRF, 3: FIELDONLY_ARF, 4: FIELDONLY_SPF (adaptive)

encodingPreset = 3; # 0: DEFAULT, 1: HIGH_QUALITY, 2: HIGH_SPEED, 3: USER_DEFINED. If not USER_DEFINED most of configuration parameters are chosen by encoder, thus ignored.
rateControlPreset = 5; #  1: LOW_DELAY,  2: STORAGE, 4: NONE,  5: USER_DEFINED
#maxWidth
#maxHeight
#maxInterFrameInterval = 1; #  Max I to P frame distance. 1: no B frames, 2: one B frame, 3: two B frames, etc [1, 255]
#maxBitRate = ; # In bits per second. Should be valid as per LEVEL limit
minBitRate = 0; # In bits per second
profile = 100; # 66: BASELINE, 77: MAIN, 100: HIGH
level = 40; # 9: 1b, 10: 1.0, 11: 1.1, 12, 13, 20: 2.0, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51

# Rate control
rateControlParamsPreset = 1; # 0: Default, 1: User defined
rcAlgo = 0; # Rate control algorithm used, 0: Variable Bitrate, 1 : Constant bitrate (low dealy), 2: Constrained CBR (No Frame Skips). Useful only if rateControlPreset is set to USER_DEFINED
qpI = -1; # Initial QP for I/IDR frames, -1 indicates codec chosen
qpP = -1; # Initial QP for P frames
qpOffsetB = 4; # Offset of B frames QP from P frames
qpMaxI = 30; # Maximum QP for I/IDR frames
qpMinI = 10; # Minimum QP for I/IDR frames
qpMaxP = 40; # Maximum QP for P frames
qpMinP = 10; # Minimum QP for P frames
qpMaxB = 40; # Maximum QP for B frames
qpMinB = 10; # Minimum QP for B frames
# For Baseline and Main profiles CbQPIndexOffset and CrQPIndexOffset should be equal
CbQPIndexOffset = 0; # Specifies offset to be added to luma QP for addressing QPC values table for Cb components
CrQPIndexOffset = 0; # Specifies offset to be added to luma QP for addressing QPC values table for Cr components
initialBufferLevel = 4000000; # Initial Buffer level for HRD compliance, keep same as HRDBufferSize for best quality
HRDBufferSize = 4000000; # Hypothetical Reference Decoder Buffer Size in bits - 2*bitrate for VBR, 1⁄2*targetBitRate for CBR
enablePRC = 1; # Control Flag to enable MB level Perceptual Rate Control, 0 => Disable, 1 => Enable
frameSkipAfterSceneChange = 1; # 0=> no forced skip after scenechange, 1 => force skip frame after coding scene change frame.
scalingMatrixPreset = 0; # Scaling Matrix selection of encoder avaliable in HP only, 0: no scaling matrices, 1: normal, 2: noisy, 3 : standard default, 4 : user defined

# Inter coding
interCodingPreset = 1; # Inter coding mode preset, 0 => deafult values, 1 => user defined
MvRangeVerP = 32; # Vertical Motion Vector Range for P frames in integer pixels, Range supported is 16 to 496
MvRangeHorP = 144; # Horizontal Motion Vector Range for P frames in integer pixels, Range supported is 16 to 496
MvRangeVerB = 32; # Vertical Motion Vector Range for B frames in integer pixels, Range supported is 16 to 496
MvRangeHorB = 144; # Horizontal Motion Vector Range for B frames in integer pixels, Range supported is 16 to 496
maxMVperMB = 4; # Maximum MV per MB (Values of 1 & 4 are valid)

# Intra coding
intraCodingPreset = 1; # Intra coding mode preset, 0 => deafult values, 1 => user defined
enableIntraPartition = 1; # 0 => INTRA_PARTITION_NONE , 1 => INTRA_PARTITION_ISLICES, 2 => INTRA_PARTITION_IPSLICES, 3 => INTRA_PARTITION_IBSLICES, 4 => INTRA_PARTITION_IPBSLICES.
intraRefreshMethod = 1; # IH264_INTRAREFRESH_NONE  = 0, IH264_INTRAREFRESH_CYCLIC_MBS = 1
intraRefreshRate = 0; # Rate at which intra MB Refresh is done. e.g. 10 indicates every 10th MB will coded as Intra in inter pictures.
constrainedIntraPredEnable = 0; # Controls the intra macroblock coding in inter slices

# Slice coding
sliceCodingPreset = 0; # Preset value for slice coding mode, 0 => deafult values, 1 => user defined
streamFormat = 0; # Type of bitstream to be encoded. Only value 0 is supprted (Byte stream format)
sliceMode = 0; # Type of slice coding, 0 => slice coding mode is frame based, 1 => Slices are controlled based upon number of Macroblocks
sliceUnitSize = 0; # Number of macroblocks per slice

# Loop filter
loopfilterPreset = 1; # Preset value for loop filter operation parameters, 0 => default values, 1 => user defined
loopfilterDisableIDC = 2; # Disable H.264 loop filter, (0=Filter, 1= NoFilter, 2 = No loop filter across slices)
filterOffsetA = 0; # Alpha offset for loop filter
filterOffsetB = 0; # Beta offset for loop filter

# VUI coding
vuiCodingPreset = 1; # Preset value for VUI Control Params, 0 => deafult values, 1 => user defined
aspectRatioInfoPresentFlag = 1; # Controls the insertion of aspect ratio information in VUI part of bit-stream
aspectRatioIdc = 255; # Aspect ratio ID. See IH264HPVENC_AspectRatioIdc. IH264HP_ASPECTRATIO_EXTENDED = 255 for dynamic aspect ratio.
videoSignalTypePresentFlag = 0; # controls the insertion of video signal type in VUI part of bit-stream
videoFormat = 2; # Video signal type, 0: Component, 1: PAL, 2: NTSC, 3: SECAM, 4: MAC, 5: Unspecified
videoFullRangeFlag = 0; # Flag to specify Range of the pixels
colourDescriptionPresentFlag = 1; # Specifies whether colour_primaries, transfer_characteristics and matrix_coefficients are present or not.
colourPrimaries = 5; # chromaticity coordinates of the source primaries(Table E-3 in standard)
transferCharacteristics = 5; # opto-electronic transfer characteristic of the source picture(Table E-4 in standard)
matrixCoefficients = 5; # matrix coefficients used in deriving Y,Cb,Cr signals from the G,B,R primaries(Table E-5 in standard)
timingInfoPresentFlag = 1; # Controls the insertion of timing info related parameters in VUI part of bit-stream

# Dynamic
intraFrameInterval = 6; # The number of frames between two I frames. 0: IPPPP..., 1: IIII..., 2: IPIPIPIPI, 3: IPPIPPIPPI or IPBIPBIPBI, etc.
mvAccuracy = 0; # Motion vectors accuracy. 0: integer pel., 2: quarter pel.
#sampleAspectRatioWidth
#sampleAspectRatioHeight
bitRate = 2000000;
interFrameInterval = 1; #  Max I to P frame distance. 1: no B frames, 2: one B frame, 3: two B frames, etc [1, 255]

P.S.

I do Cache_wbInvAll() before and after process call on all the cores.

Regards,

Andrey Lisnevich