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 NALU stream format vs. byte stream format

All-

We're using v1.0.1.4 H.264 high-profile encoder for C6678.  Currently when we set the streamFormat param for NALU stream format vs. byte stream format, we don't see any difference in the output data stream.  Are there other params we need to set in conjunction with this?

Thanks.

-Jeff
Signalogic

  • Hi Jeff,
    Working with experts on this post. Thank you for you patience.
  • Hi Jeff, could you please share with us used configuration params?
    thank you,
    Paula
  • Paula,

    Attached are the config params that we're using. We've tested setting streamFormat to 0 and 1 and don't see a difference in the encoded output between the two tests.

    Chris
    Signalogic, Inc.

        params->videnc2Params.encodingPreset = 3; 
        params->videnc2Params.maxInterFrameInterval = 3;
        params->videnc2Params.maxHeight = 1088;
        params->videnc2Params.maxWidth = 1920;
        params->videnc2Params.dataEndianness = XDM_BYTE;
        params->videnc2Params.inputChromaFormat = XDM_YUV_420P;
        params->videnc2Params.inputContentType = 0;
        params->videnc2Params.operatingMode = IVIDEO_ENCODE_ONLY;
        params->videnc2Params.profile = 100;
        params->videnc2Params.level = 40;
        params->videnc2Params.inputDataMode = IVIDEO_ENTIREFRAME;
        params->videnc2Params.outputDataMode = IVIDEO_ENTIREFRAME;
        params->videnc2Params.rateControlPreset = 5;
        params->videnc2Params.numInputDataUnits = gConfigParams->numInputDataUnits;
        params->videnc2Params.numOutputDataUnits = gConfigParams->numOutputDataUnits;
    
        dynamicParams->videnc2DynamicParams.inputWidth = 352;
        dynamicParams->videnc2DynamicParams.captureWidth = 352;
        dynamicParams->videnc2DynamicParams.inputHeight = 288;
        dynamicParams->videnc2DynamicParams.refFrameRate = 30000;
        dynamicParams->videnc2DynamicParams.targetFrameRate = 30000;
        dynamicParams->videnc2DynamicParams.targetBitRate = 800000;
        dynamicParams->videnc2DynamicParams.intraFrameInterval = 30;
        dynamicParams->videnc2DynamicParams.interFrameInterval = 1;
        dynamicParams->videnc2DynamicParams.generateHeader = 0;
        dynamicParams->videnc2DynamicParams.forceFrame = -1;
        dynamicParams->videnc2DynamicParams.mvAccuracy = 2;
        dynamicParams->videnc2DynamicParams.sampleAspectRatioHeight = 1;
        dynamicParams->videnc2DynamicParams.sampleAspectRatioWidth = 1;
        dynamicParams->videnc2DynamicParams.ignoreOutbufSizeFlag = 1;
        dynamicParams->videnc2DynamicParams.mvAccuracy = 2;
        dynamicParams->videnc2DynamicParams.mvAccuracy = 2;
        dynamicParams->videnc2DynamicParams.mvAccuracy = 2;
        dynamicParams->videnc2DynamicParams.mvAccuracy = 2;
        dynamicParams->videnc2DynamicParams.mvAccuracy = 2;
        dynamicParams->videnc2DynamicParams.mvAccuracy = 2;
        dynamicParams->videnc2DynamicParams.mvAccuracy = 2;
    
        params->ividmc->ncores = 1;
        inputBufDesc->dataLayout = 0;
        inputBufDesc->topFieldFirstFlag = 1;
        params->entropyCodingMode = 1;
        params->gopStructure = 0;
        params->IDRFrameInterval = 0;
        params->transformBlockSize = 1;
        params->log2MaxFNumMinus4 = 0;
        params->picOrderCountType = 0;
    
        params->interlaceCodingType = 4;
        params->rateControlParams.rateControlParamsPreset = 1;
        params->rateControlParams.frameSkipAfterSceneChange = 1;
        params->rateControlParams.scalingMatrixPreset = 0;
        params->rateControlParams.qpI = 28;
        params->rateControlParams.qpP = 28;
        params->rateControlParams.qpOffsetB = 4;
        params->rateControlParams.rcAlgo = 0;
        params->rateControlParams.qpMaxI = 44;
        params->rateControlParams.qpMinI = 1;
        params->rateControlParams.qpMaxP = 44;
        params->rateControlParams.qpMinP = 1;
        params->rateControlParams.qpMaxB = 44;
        params->rateControlParams.qpMinB = 1;
        params->rateControlParams.CbQPIndexOffset = 0;
        params->rateControlParams.CrQPIndexOffset = 0;
        params->rateControlParams.initialBufferLevel = 1600000;
        params->rateControlParams.HRDBufferSize = 1600000;
        params->rateControlParams.enablePRC = 1;
    
        params->interCodingParams.interCodingPreset = 1;
        params->interCodingParams.MvRangeHorP = 144;
        params->interCodingParams.MvRangeVerP = 32;
        params->interCodingParams.MvRangeHorB = 144;
        params->interCodingParams.MvRangeVerB = 32;
        params->interCodingParams.maxMVperMB = 4;
    
        params->intraCodingParams.intraCodingPreset = 1;
        params->intraCodingParams.enableIntraPartition = 4;
        params->intraCodingParams.intraRefreshMethod = 0;
        params->intraCodingParams.intraRefreshRate = 0;
        params->intraCodingParams.constrainedIntraPredEnable = 0;
    
        params->sliceCodingParams.sliceCodingPreset = 1;
        params->sliceCodingParams.sliceMode = 0;
        params->sliceCodingParams.sliceUnitSize = 1200;
        params->sliceCodingParams.streamFormat = 0; //1;
    
        params->loopFilterParams.loopfilterPreset = 1;
        params->loopFilterParams.loopfilterDisableIDC = 2;
        params->loopFilterParams.filterOffsetA = 0;
        params->loopFilterParams.filterOffsetB = 0;
    
        params->vuiCodingParams.vuiCodingPreset = 1;
        params->vuiCodingParams.aspectRatioInfoPresentFlag = 1;
        params->vuiCodingParams.aspectRatioIdc = 1;
        params->vuiCodingParams.videoSignalTypePresentFlag = 0;
        params->vuiCodingParams.videoFormat = 2;
        params->vuiCodingParams.videoFullRangeFlag = 0;
        params->vuiCodingParams.colourDescriptionPresentFlag = 1;
        params->vuiCodingParams.colourPrimaries = 5;
        params->vuiCodingParams.transferCharacteristics = 5;
        params->vuiCodingParams.matrixCoefficients = 5;
        params->vuiCodingParams.timingInfoPresentFlag = 1;
    
        params->debugTraceLevel = 0;
        params->lastNFramesToLog = 5;

  • Chris, from the codec team I got some pointers. 

    If you use H.264 HP test application you can enable "putDataFxn” in order to get NALU output streams. Call back function is not by default enabled in MCSDK, enabling it in MCSDK video (similar to the test application) should get NALU streams output.

    Thank you,

    Paula