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.

Problem with Extended Dynamic parameters, H264 Platinum Codec, DM365.

Hi everybody, I decided to use Extended Dynamic Parameters because I need to generate and IDR frame every 40 frames (while the intraFrame value is 20 frames). I use Platinum Codec (dm365_h264enc_02_00_00_10_production) with dvsdk 2.10.01.18.

This is the parameter setting excerpt of my code:

    /* Parameters */
    VIDENC1_Params* encParams;

    encParams =  &defaultParams;

    encParams->maxWidth = params->staticParameters.maxWidth;
    encParams->maxHeight = params->staticParameters.maxHeight; 
    encParams->encodingPreset        = XDM_DEFAULT;
    encParams->rateControlPreset     = IVIDEO_LOW_DELAY;
    encParams->maxFrameRate          = params->staticParameters.frameRate * 1000;
    encParams->maxBitRate            = params->staticParameters.bitRate < 0 ? 0 : params->staticParameters.bitRate;
    encParams->inputChromaFormat     = XDM_YUV_420SP;
    encParams->reconChromaFormat     = XDM_YUV_420SP;
    encParams->maxInterFrameInterval = 1;

    /* Use extended dynamic parameters. */
    IH264VENC_DynamicParams dynParams = {
        Venc1_DynamicParams_DEFAULT,
        28,   // intraFrameQP
        28,   // interPFrameQP
        28,   // initQ
        45,   // rcQMax
        0,    // rcQMin
        42,   // rcQMaxI
        0,    // rcQMinI
        0,    // airRate
        0,    // sliceSize ???
        0,    // lfDisableIdc
        1,    // rcAlgo
        2000, // maxDelay
        0,    // intraSliceNum RESERVERD
        0,    // meMultiPart RESERVED
        0,    // enableBufSEI
        0,    // enablePicTimSEI
        0,    // intraThrQF RESERVED
        1,    // perceptualRC
        40,   // idrFrameInterval
        0,    // mvSADoutFlag
        1,    // resetHDVICPeveryFrame ?? Might be 0?
        0,    // enableROI
        0,    // metaDataGenerateConsume
        0,    // disableMVDCostFactor RESERVED
    };

    dynParams.videncDynamicParams.size = sizeof(IH264VENC_DynamicParams);
    dynParams.videncDynamicParams.intraFrameInterval  = params->dynamicParameters.iFrameInterval;
    dynParams.videncDynamicParams.targetBitRate       = params->staticParameters.bitRate;
    dynParams.videncDynamicParams.inputWidth =  params->dynamicParameters.imageWidth;
    dynParams.videncDynamicParams.inputHeight = params->dynamicParameters.imageHeight;
    if (dynParams.videncDynamicParams.inputHeight == 1088) {
        dynParams.videncDynamicParams.inputHeight = 1080;
    }
    dynParams.videncDynamicParams.targetFrameRate = params->staticParameters.frameRate*1000;
    dynParams.videncDynamicParams.refFrameRate = params->staticParameters.frameRate*1000;
    dynParams.videncDynamicParams.interFrameInterval = 0;

    encoderInstanceTable[index]->hVe1 = Venc1_create(hjEngine, encName, encParams, &dynParams);

IDR frames are generated correctly, but my problem now is that a lot of encoded frames seem to be of size = 0
This never happened before introducing extended parameters.

To clarify here's an excerpt of my logs:

DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 157579
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 0
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 0
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 0
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 50298
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 0
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 49540
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 50327
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 0
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 49528
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 49914
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 198110
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 0
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 0
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 0
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 49641
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 50297
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 0
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 51411

DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 0
DBG[EncoderEncodeFrame(), 320]: Encoded frame, size is 50711
[...]

What can the problem be? For clarity's sake, here's the command with which I encode:

    // Encode the video buffer
    if (Venc1_process(encoderInstanceTable[index]->hVe1, inBuf, outBuf) < 0) {
        ERR("Failed to encode video buffer\n");
        return CODEC_ENCODE_FAIL;
    }

And the command with which I retrieve the size of the encoded frame:

int bytesGenerated = Buffer_getNumBytesUsed(outBuf);

(outBuf is a Buffer_Handle outBuf)

Best Regards,

Cristiano.