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.

dvrrdk4多slice编码



哪位做过dvrrdk4多slice编码,除了修改outputdatamode、slicemode、sliceuintsize之外还需要修改哪些项呢?谢谢!

  • 你好;

    需要在mcfw中enclink_h264.c 中添加:

     

            dynamicParams->sliceCodingParams.sliceCodingPreset = IH264_SLICECODING_USERDEFINED;
            dynamicParams->sliceCodingParams.sliceMode = IH264_SLICEMODE_BYTES;
            dynamicParams->sliceCodingParams.streamFormat = IH264_BYTE_STREAM;
            dynamicParams->sliceCodingParams.sliceUnitSize = 1200;

    注:按字节划分slice只支持baseline模式;

  • 建议查看手册:

    DVRRDK_04.00.00.03/ti_tools/codecs/REL.500.V.H264AVC.E.IVAHD.02.00.04.01/500.V.H264AVC.E.IVAHD.02.00/IVAHD_001/Docs/H264_Encoder_HDVICP2_UserGuide.pdf

  • 我在enclink_h264_set_static_params和enclink_h264_set_dynamic_params中修改了sliceCodingParams,熵编码是CAVLC编码,但是编出来的还是单slice的码流,还有其他的参数要修改吗?谢谢!

    修改后的代码
    static Int enclink_h264_set_static_params(IH264ENC_Params * staticParams,
                                              EncLink_AlgCreateParams *
                                              algCreateParams)
    {
        /* Initialize default values for static params */
        *staticParams = H264ENC_TI_PARAMS;

        /* Both width & height needs to be align with 2 bytes */
        staticParams->videnc2Params.maxHeight =
                      VpsUtils_align(algCreateParams->maxHeight, 2);

        staticParams->videnc2Params.maxWidth =
                      VpsUtils_align(algCreateParams->maxWidth, 16);

        staticParams->videnc2Params.maxInterFrameInterval =
            algCreateParams->maxInterFrameInterval;

        staticParams->videnc2Params.inputContentType =
            algCreateParams->inputContentType;

        staticParams->videnc2Params.inputChromaFormat =
            algCreateParams->inputChromaFormat;

        staticParams->videnc2Params.profile = algCreateParams->profile;

        staticParams->videnc2Params.level = algCreateParams->level;

        staticParams->videnc2Params.encodingPreset = algCreateParams->encodingPreset;

        if ((staticParams->videnc2Params.encodingPreset == XDM_USER_DEFINED) &&
            (algCreateParams->enableHighSpeed == TRUE))
        {
            staticParams->interCodingParams.interCodingPreset =
                IH264_INTERCODING_HIGH_SPEED;
            staticParams->intraCodingParams.intraCodingPreset =
                IH264_INTRACODING_HIGH_SPEED;
            staticParams->transformBlockSize = IH264_TRANSFORM_8x8;
        }
        /* In case of interlaced encode, below would be used. In case of progressive
            this will be ignored. */
        //staticParams->interlaceCodingType = IH264_INTERLACE_FIELDONLY_SPF;
        staticParams->enableAnalyticinfo = algCreateParams->enableAnalyticinfo;
        staticParams->enableWatermark = algCreateParams->enableWaterMarking;
        staticParams->videnc2Params.rateControlPreset = IVIDEO_USER_DEFINED;
        staticParams->rateControlParams.rateControlParamsPreset = IH264_RATECONTROLPARAMS_USERDEFINED;
        staticParams->rateControlParams.scalingMatrixPreset =
            (IH264_HIGH_PROFILE == algCreateParams->profile)
            ? IH264_SCALINGMATRIX_NORMAL: IH264_SCALINGMATRIX_NONE;
        staticParams->rateControlParams.rcAlgo = algCreateParams->rateControlPreset;
        staticParams->videnc2Params.maxBitRate = algCreateParams->maxBitRate;

        staticParams->videnc2Params.inputDataMode = IVIDEO_ENTIREFRAME;
        staticParams->videnc2Params.outputDataMode = IVIDEO_ENTIREFRAME;

        /* Temporal restrictions with H.264 encoder */
       

        /* Number of temporal layeers set to 1. This is the default value  */
        /* in the codec*/
        if (0 == algCreateParams->numTemporalLayer)
        {
            staticParams->numTemporalLayer = IH264_TEMPORAL_LAYERS_1;
        }
        else
        {
            staticParams->numTemporalLayer = algCreateParams->numTemporalLayer;
        }

        /*Note: Enabling this flag adds svc enxtension header to the stream, not all decoders
              are generally able to play back such a stream. */
        /* Needs to be enabled to IH264_SVC_EXTENSION_FLAG_ENABLE for the
              svc extension headers to be present in the stream*/
        /*!!! Note: This flag needs to be enabled for the temporalId to be parsed
             out from the stream.*/
        staticParams->svcCodingParams.svcExtensionFlag =
            algCreateParams->enableSVCExtensionFlag;

        /*Slice Coding Parameters*/
        staticParams->sliceCodingParams.sliceCodingPreset = IH264_SLICECODING_DEFAULT;
        staticParams->sliceCodingParams.sliceMode = IH264_SLICEMODE_NONE;
        staticParams->sliceCodingParams.streamFormat = IH264_STREAM_FORMAT_DEFAULT;


        /* To set IDR frame periodically instead of I Frame */
        staticParams->IDRFrameInterval = 1;

        /*To trigger workaround inside codec, where SAME_CODEC is overridden as same
          codec type*/
        staticParams->reservedParams[1] = 0x5A3EC0DE;
        
        /* Enabling debug logging inside the codec. Details in appendix E in H.264
         * encoder user guide.
         */
    #ifdef ENCLINK_H264_PERFORMANCE_LOGGING
         staticParams->debugTraceLevel = 1;
         staticParams->lastNFramesToLog = ENCLINK_H264_PROFILER_NUM_FRAMES;
    #endif
       
        /* We want SPS and PPS to be set for every intra frame. Hence configure the
         * the NALU control params to force encoder to insert SPS/PPS on every
         * I frame
         */
        staticParams->nalUnitControlParams.naluControlPreset =
                                                 IH264_NALU_CONTROL_USERDEFINED;
        ENCLINK_H264_SETNALU_MASK_SPS(staticParams->nalUnitControlParams.
                                                    naluPresentMaskIntraPicture);
        ENCLINK_H264_SETNALU_MASK_PPS(staticParams->nalUnitControlParams.
                                                    naluPresentMaskIntraPicture);

        ENCLINK_H264_SETNALU_MASK_SPS(staticParams->nalUnitControlParams.
                                                    naluPresentMaskIDRPicture);
        ENCLINK_H264_SETNALU_MASK_PPS(staticParams->nalUnitControlParams.
                                                    naluPresentMaskIDRPicture);
        ENCLINK_H264_SETNALU_MASK_SEI(staticParams->nalUnitControlParams.
                                                    naluPresentMaskIDRPicture);

        ENCLINK_H264_SETNALU_MASK_SPS(staticParams->nalUnitControlParams.
                                                    naluPresentMaskStartOfSequence);
        ENCLINK_H264_SETNALU_MASK_PPS(staticParams->nalUnitControlParams.
                                                    naluPresentMaskStartOfSequence);
        ENCLINK_H264_SETNALU_MASK_PPS(staticParams->nalUnitControlParams.
                                                    naluPresentMaskStartOfSequence);

        staticParams->entropyCodingMode = IH264_ENTROPYCODING_CABAC;
        if (algCreateParams->profile != IH264_HIGH_PROFILE)
        {
            memset (&staticParams->intraCodingParams, 0,
                                   sizeof(IH264ENC_IntraCodingParams));
            staticParams->transformBlockSize = IH264_TRANSFORM_4x4;
            if (algCreateParams->profile == IH264_BASELINE_PROFILE)
            {
                staticParams->entropyCodingMode = IH264_ENTROPYCODING_CAVLC;
            }
        }

    #if 1
        staticParams->vuiCodingParams.vuiCodingPreset = IH264_VUICODING_USERDEFINED;
        staticParams->vuiCodingParams.hrdParamsPresentFlag = 1;
        staticParams->vuiCodingParams.timingInfoPresentFlag = 1;
    #endif

     //modify
    #define SET_MEMB(memb, val) Vps_printf("%20s %d %d\n", #memb, memb, val); memb = val;
    #if 1
     Vps_printf("staticParams->entropyCodingMode %d\n", staticParams->entropyCodingMode);
     SET_MEMB(staticParams->videnc2Params.outputDataMode, IVIDEO_SLICEMODE);
     SET_MEMB(staticParams->videnc2Params.numOutputDataUnits, 1);
     SET_MEMB(staticParams->sliceCodingParams.sliceCodingPreset,  IH264_SLICECODING_USERDEFINED);
     SET_MEMB(staticParams->sliceCodingParams.sliceMode, IH264_SLICEMODE_BYTES);
     SET_MEMB(staticParams->sliceCodingParams.sliceUnitSize, 1200);
     SET_MEMB(staticParams->sliceCodingParams.streamFormat, IH264_BYTE_STREAM);
    #endif
     //modify

        return 0;
    }

    static Int enclink_h264_set_dynamic_params(
            EncLink_AlgCreateParams *algCreateParams,
            IH264ENC_DynamicParams *dynamicParams,                                  
            EncLink_AlgDynamicParams *algDynamicParams)
    {
        *dynamicParams = H264ENC_TI_DYNAMICPARAMS;

        dynamicParams->videnc2DynamicParams.inputWidth =
            algDynamicParams->inputWidth;
        dynamicParams->videnc2DynamicParams.inputHeight =
            algDynamicParams->inputHeight;
        dynamicParams->videnc2DynamicParams.captureWidth =
            algDynamicParams->inputPitch;
        dynamicParams->videnc2DynamicParams.targetBitRate =
            algDynamicParams->targetBitRate;
        dynamicParams->videnc2DynamicParams.targetFrameRate =
            algDynamicParams->targetFrameRate;
        dynamicParams->videnc2DynamicParams.interFrameInterval =
            algDynamicParams->interFrameInterval;
        dynamicParams->videnc2DynamicParams.intraFrameInterval =
            algDynamicParams->intraFrameInterval;
        dynamicParams->videnc2DynamicParams.mvAccuracy =
            algDynamicParams->mvAccuracy;
        dynamicParams->rateControlParams.VBRDuration =
            algDynamicParams->vbrDuration;
        dynamicParams->rateControlParams.VBRsensitivity =
            algDynamicParams->vbrSensitivity;
        dynamicParams->videnc2DynamicParams.refFrameRate =
            algDynamicParams->refFrameRate;
        dynamicParams->videnc2DynamicParams.ignoreOutbufSizeFlag = XDAS_TRUE;
        dynamicParams->videnc2DynamicParams.getBufferFxn =
                                           enclink_h264_dummy_get_buffer_fxn;

        dynamicParams->rateControlParams.rateControlParamsPreset
            = IH264_RATECONTROLPARAMS_USERDEFINED;
        dynamicParams->rateControlParams.scalingMatrixPreset =
            (IH264_HIGH_PROFILE == algCreateParams->profile)
            ? IH264_SCALINGMATRIX_NORMAL: IH264_SCALINGMATRIX_NONE;
        dynamicParams->rateControlParams.qpMinI = algDynamicParams->qpMinI;
        dynamicParams->rateControlParams.qpMaxI = algDynamicParams->qpMaxI;
        dynamicParams->rateControlParams.qpI    = algDynamicParams->qpInitI;
        dynamicParams->rateControlParams.qpMinP = algDynamicParams->qpMinP;
        dynamicParams->rateControlParams.qpMaxP = algDynamicParams->qpMaxP;
        dynamicParams->rateControlParams.qpP    = algDynamicParams->qpInitP;
        dynamicParams->rateControlParams.rcAlgo = algDynamicParams->rcAlg;

        dynamicParams->rateControlParams.discardSavedBits = 1;

        if(dynamicParams->rateControlParams.rcAlgo == IH264_RATECONTROL_PRC)
        {
            dynamicParams->rateControlParams.HRDBufferSize
                = 2 * algDynamicParams->targetBitRate;
        }
        else
        {
            dynamicParams->rateControlParams.HRDBufferSize
                = algDynamicParams->targetBitRate;
        }

        dynamicParams->rateControlParams.enablePRC = FALSE; // PRC is turned off for video security
        dynamicParams->rateControlParams.initialBufferLevel
            = dynamicParams->rateControlParams.HRDBufferSize;

        dynamicParams->rateControlParams.frameSkipThMulQ5 = 0;
        dynamicParams->rateControlParams.vbvUseLevelThQ5 = 0;

        dynamicParams->rateControlParams.maxPicSizeRatioI = 640;
        dynamicParams->rateControlParams.skipDistributionWindowLength = 5;
        dynamicParams->rateControlParams.numSkipInDistributionWindow = 2;

     //modify
     SET_MEMB(dynamicParams->sliceCodingParams.sliceCodingPreset, IH264_SLICECODING_USERDEFINED);
     SET_MEMB(dynamicParams->sliceCodingParams.sliceMode, IH264_SLICEMODE_BYTES);
     SET_MEMB(dynamicParams->sliceCodingParams.sliceUnitSize, 1200);
     SET_MEMB(dynamicParams->sliceCodingParams. streamFormat, IH264_BYTE_STREAM);
     dynamicParams->videnc2DynamicParams.putDataFxn = cbDataSyncPutFxn;
     dynamicParams->videnc2DynamicParams.putDataHandle = dynamicParams;
     //modify

        return 0;
    }

     

     

  • 你好;

    你只需要在

    static Int enclink_h264_set_dynamic_params(IH264ENC_DynamicParams *
                                               dynamicParams,
                                               EncLink_AlgDynamicParams *
                                               algDynamicParams)

    这个函数的最后加上我上面的4行代码就可以了, 用baseline编码,其他什么都不需要修改

     

  • 只修改enclink_h264_set_dynamic_params也是不行的,我在调用enclink_h264_set_dynamic_params之后调用enclink_h264_print_dynamic_params看到参数是对的,请问有什么调试方法验证吗?怎么确认参数已经正确的设置到编码器的内部?谢谢!

    [m3video]
    [m3vpss ]  8265130: SWMS0    : Loading Horizontal Co-effs (UPSCALE)
    [m3video] --------- CH 0 : H264 ENC : Dynamic Params -------
    [m3vpss ]  8265130: SWMS    : Co-effs Loading ... DONE !!!
    [m3video]
    [m3video] videnc2DynamicParams -> inputHeight             : 576
    [m3video] videnc2DynamicParams -> inputWidth              : 704
    [m3video] videnc2DynamicParams -> refFrameRate            : 30000
    [m3video] videnc2DynamicParams -> targetFrameRate         : 30000
    [m3video] videnc2DynamicParams -> targetBitRate           : 1600000
    [m3video] videnc2DynamicParams -> intraFrameInterval      : 1800
    [m3video] videnc2DynamicParams -> generateHeader          : 0
    [m3video] videnc2DynamicParams -> captureWidth            : 1920
    [m3video] videnc2DynamicParams -> forceFrame              : -1
    [m3video] videnc2DynamicParams -> interFrameInterval      : 1
    [m3video] videnc2DynamicParams -> mvAccuracy              : 2
    [m3video] videnc2DynamicParams -> sampleAspectRatioHeight : 1
    [m3video] videnc2DynamicParams -> sampleAspectRatioWidth  : 1
    [m3video] videnc2DynamicParams -> ignoreOutbufSizeFlag    : 1
    [m3video] videnc2DynamicParams -> lateAcquireArg          : -1
    [m3video]
    [m3video] rateControlParams -> rateControlParamsPreset        : 1
    [m3video] rateControlParams -> scalingMatrixPreset            : 0
    [m3video] rateControlParams -> rcAlgo                         : 1
    [m3video] rateControlParams -> qpI                            : -1
    [m3video] rateControlParams -> qpMaxI                         : 50
    [m3video] rateControlParams -> qpMinI                         : 10
    [m3video] rateControlParams -> qpP                            : -1
    [m3video] rateControlParams -> qpMaxP                         : 50
    [m3video] rateControlParams -> qpMinP                         : 10
    [m3video] rateControlParams -> qpOffsetB                      : 4
    [m3video] rateControlParams -> qpMaxB                         : 44
    [m3video] rateControlParams -> qpMinB                         : 10
    [m3video] rateControlParams -> allowFrameSkip                 : 0
    [m3video] rateControlParams -> removeExpensiveCoeff           : 0
    [m3video] rateControlParams -> chromaQPIndexOffset            : 0
    [m3video] rateControlParams -> IPQualityFactor                : 0
    [m3video] rateControlParams -> initialBufferLevel             : 160
    [m3video] rateControlParams -> HRDBufferSize                  : 160
    [m3video] rateControlParams -> minPicSizeRatioI               : 0
    [m3video] rateControlParams -> maxPicSizeRatioI               : 640
    [m3video] rateControlParams -> minPicSizeRatioP               : 0
    [m3video] rateControlParams -> maxPicSizeRatioP               : 0
    [m3video] rateControlParams -> minPicSizeRatioB               : 0
    [m3video] rateControlParams -> maxPicSizeRatioB               : 0
    [m3video] rateControlParams -> enablePRC                      : 0
    [m3video] rateControlParams -> enablePartialFrameSkip         : 0
    [m3video] rateControlParams -> discardSavedBits               : 1
    [m3video] rateControlParams -> VBRDuration                    : 8
    [m3video] rateControlParams -> VBRsensitivity                 : 0
    [m3video] rateControlParams -> skipDistributionWindowLength   : 5
    [m3video] rateControlParams -> numSkipInDistributionWindow    : 2
    [m3video] rateControlParams -> enableHRDComplianceMode        : 1
    [m3video] rateControlParams -> frameSkipThMulQ5               : 0
    [m3video] rateControlParams -> vbvUseLevelThQ5                : 0
    [m3video]
    [m3video] interCodingParams -> interCodingPreset  : 0
    [m3video] interCodingParams -> searchRangeHorP    : 144
    [m3video] interCodingParams -> searchRangeVerP    : 32
    [m3video] interCodingParams -> searchRangeHorB    : 144
    [m3video] interCodingParams -> searchRangeVerB    : 16
    [m3video] interCodingParams -> interCodingBias    : 1
    [m3video] interCodingParams -> skipMVCodingBias   : 1
    [m3video] interCodingParams -> minBlockSizeP      : 0
    [m3video] interCodingParams -> minBlockSizeB      : 0
    [m3video] interCodingParams -> meAlgoMode         : 0
    [m3video]
    [m3video] intraCodingParams -> intraCodingPreset          : 0
    [m3video] intraCodingParams -> lumaIntra4x4Enable         : 0
    [m3video] intraCodingParams -> lumaIntra8x8Enable         : 255
    [m3video] intraCodingParams -> lumaIntra16x16Enable       : 15
    [m3video] intraCodingParams -> chromaIntra8x8Enable       : 15
    [m3video] intraCodingParams -> chromaComponentEnable      : 1
    [m3video] intraCodingParams -> intraRefreshMethod         : 0
    [m3video] intraCodingParams -> intraRefreshRate           : 0
    [m3video] intraCodingParams -> gdrOverlapRowsBtwFrames    : 0
    [m3video] intraCodingParams -> constrainedIntraPredEnable : 0
    host] [     0]  33ms,   7930 ->  16130    129Kbps        0Min
    [m3video] intraCodingParams -> intraCodingBias            : 0
    [m3video]
    [m3video] sliceCodingParams -> sliceCodingPreset  : 1
    [m3video] sliceCodingParams -> sliceMode          : 2
    [m3video] sliceCodingParams -> sliceUnitSize      : 1200
    [m3video] sliceCodingParams -> sliceStartOffset   : [0 0 0]
    [m3video] sliceCodingParams -> streamFormat       : 0
    [m3video]
    [m3video] sliceGroupChangeCycle           : 0
    [m3video] searchCenter                    : 32767
    [m3video] enableStaticMBCount             : 0
    [m3video] enableROI                       : 0
    [m3video]
    [m3video]
    host] [     1]  23ms,  10238 ->   6980    184Kbps        0Min
    host] [     2]  24ms,   9587 ->    443    188Kbps        0Min

    [host]  948: IPC_BITS_IN   : Stop Done !!!
    [m3video]  8265407: DECODE: Stop in progress !!!
    [m3vpss ]  8265408: SWMS: Stop in Progress !!!
    [m3video]  8265407: DECODE: Stop Done !!!


     

  • 你参数设置对了,你能发一小段码流,让我分析一下吗?

  • 码流见附件,谢谢!

  • 你好;

    从你打印

    [m3video] sliceCodingParams -> sliceCodingPreset  : 1
    [m3video] sliceCodingParams -> sliceMode          : 2
    [m3video] sliceCodingParams -> sliceUnitSize      : 1200

    可以看出,配置是没有问题的;

    当时刚才看你的码流,确实还是单个slice

  • 你好;

    这个是我修改过的代码,你对比一下;

     

    会不会你还有其他地方的改动导致的呢 ?

  • 我们的版本不一样,我的是DVRRDK04.01.00.02,编码器是H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.06.00,附件是代码,是这个编码器不支持吗?还是参数设置的问题?谢谢!

  • 你好;

    确实h264编码器的版本升级了2个版本;

    刚才看了一下版本更新注释H264_Encoder_HDVICP2_ReleaseNotes.pdf;

    里面的对多slice编码的功能并没有影响的;

  • 请问你使用的是什么版本?调用enc link的代码能给我看一下吗?谢谢!

  • 你好;

    我现在调试的版本是DVRRDK 4.00的版本;

    static Void multich_hd_vs_set_encode_prm()
    {
        EncLink_CreateParams *encPrm = &gHdVsUsecaseContext.encPrm;
    
        int i;
    
        EncLink_ChCreateParams *pLinkChPrm;
        EncLink_ChDynamicParams *pLinkDynPrm;
        VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;
        VENC_CHN_PARAMS_S *pChPrm;
    
        encPrm->numBufPerCh[ENC_LINK_PRIMARY_STREAM_POOL_ID] = NUM_BUFS_PER_CH_ENC_PRI;
    
        for (i=0; i < gVencModuleContext.vencConfig.numPrimaryChn; i++)
        {
            pLinkChPrm  = &encPrm->chCreateParams[i];
            pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;
    
            pChPrm      = &gVencModuleContext.vencConfig.encChannelParams[i];
            pDynPrm     = &pChPrm->dynamicParam;
                        
            pLinkChPrm->format              = IVIDEO_H264BP;
            pLinkChPrm->profile             = VENC_CHN_BASELINE_PROFILE;
    
            pLinkChPrm->dataLayout              = VCODEC_FIELD_SEPARATED;
            pLinkChPrm->fieldMergeEncodeEnable  = FALSE;
            pLinkChPrm->enableAnalyticinfo      = FALSE;
            pLinkChPrm->maxBitRate              = pChPrm->maxBitRate;
            pLinkChPrm->encodingPreset          = pChPrm->encodingPreset;
            pLinkChPrm->rateControlPreset       = pChPrm->rcType;
            pLinkChPrm->enableHighSpeed         = FALSE;
            pLinkChPrm->numTemporalLayer        = VENC_TEMPORAL_LAYERS_1;
            pLinkChPrm->enableSVCExtensionFlag  = pChPrm->enableSVCExtensionFlag;
    
            pLinkDynPrm->intraFrameInterval     = pDynPrm->intraFrameInterval;
            pLinkDynPrm->targetBitRate          = pDynPrm->targetBitRate;
            pLinkDynPrm->interFrameInterval     = 1;
            pLinkDynPrm->mvAccuracy             = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
            pLinkDynPrm->inputFrameRate         = pDynPrm->inputFrameRate;
            pLinkDynPrm->rcAlg                  = pDynPrm->rcAlg;
            pLinkDynPrm->qpMin                  = pDynPrm->qpMin;
            pLinkDynPrm->qpMax                  = pDynPrm->qpMax;
            pLinkDynPrm->qpInit                 = pDynPrm->qpInit;
            pLinkDynPrm->vbrDuration            = pDynPrm->vbrDuration;
            pLinkDynPrm->vbrSensitivity         = pDynPrm->vbrSensitivity;
        }
    
        gHdVsUsecaseContext.encPrm.inQueParams.prevLinkId    = gHdVsUsecaseContext.ipcInVideoId;
        gHdVsUsecaseContext.encPrm.inQueParams.prevLinkQueId = 0;
        gHdVsUsecaseContext.encPrm.outQueParams.nextLink     = gVencModuleContext.ipcBitsOutRTOSId;
    
        MULTICH_HD_VS_CREATE_LINK(
            gVencModuleContext.encId,
            gHdVsUsecaseContext.encPrm
        );
    }

  • 你能在enclink_h264_set_dynamic_params之后,调用enclink_h264_print_dynamic_params,抓一下打印,给我看一下吗?能给我你的开发环境的安装包吗?谢谢!

  • 你好;

    下面是调试的log信息,多slice编码的

     [m3video]  
     [m3video]  
     [m3video] ENCLINK_H264:HEAPID:0	USED:11912
     [m3video] ENCLINK_H264:HEAPID:3	USED:7176192
     [m3video]  7383: ENCODE: Creating CH2 of 1920 x 1080, pitch = (1920, 1920) [PROGRESSIVE] [NON-TILED  ], bitrate = 2500 Kbps ... 
     [m3video]  
     [m3video] --------- CH 0 : H264 ENC : Dynamic Params -------
     [m3video]  
     [m3video] videnc2DynamicParams -> inputHeight             : 1080
     [m3video] videnc2DynamicParams -> inputWidth              : 1920
     [m3video] videnc2DynamicParams -> refFrameRate            : 30000
     [m3video] videnc2DynamicParams -> targetFrameRate         : 30000
     [m3video] videnc2DynamicParams -> targetBitRate           : 2500000
     [m3video] videnc2DynamicParams -> intraFrameInterval      : 20
     [m3video] videnc2DynamicParams -> generateHeader          : 0
     [m3video] videnc2DynamicParams -> captureWidth            : 1920
     [m3video] videnc2DynamicParams -> forceFrame              : -1
     [m3video] videnc2DynamicParams -> interFrameInterval      : 1
     [m3video] videnc2DynamicParams -> mvAccuracy              : 2
     [m3video] videnc2DynamicParams -> sampleAspectRatioHeight : 1
     [m3video] videnc2DynamicParams -> sampleAspectRatioWidth  : 1
     [m3video] videnc2DynamicParams -> ignoreOutbufSizeFlag    : 1
     [m3video] videnc2DynamicParams -> lateAcquireArg          : -1
     [m3video]  
     [m3video] rateControlParams -> rateControlParamsPreset        : 1
     [m3video] rateControlParams -> scalingMatrixPreset            : 0
     [m3video] rateControlParams -> rcAlgo                         : 1
     [m3video] rateControlParams -> qpI                            : -1
     [m3video] rateControlParams -> qpMaxI                         : 51
     [m3video] rateControlParams -> qpMinI                         : 1
     [m3video] rateControlParams -> qpP                            : -1
     [m3video] rateControlParams -> qpMaxP                         : 51
     [m3video] rateControlParams -> qpMinP                         : 1
     [m3video] rateControlParams -> qpOffsetB                      : 4
     [m3video] rateControlParams -> qpMaxB                         : 44
     [m3video] rateControlParams -> qpMinB                         : 10
     [m3video] rateControlParams -> allowFrameSkip                 : 0
     [m3video] rateControlParams -> removeExpensiveCoeff           : 0
     [m3video] rateControlParams -> chromaQPIndexOffset            : 0
     [m3video] rateControlParams -> IPQualityFactor                : 0
     [m3video] rateControlParams -> initialBufferLevel             : 2500000
     [m3video] rateControlParams -> HRDBufferSize                  : 2500000
     [m3video] rateControlParams -> minPicSizeRatioI               : 0
     [m3video] rateControlParams -> maxPicSizeRatioI               : 0
     [m3video] rateControlParams -> minPicSizeRatioP               : 0
     [m3video] rateControlParams -> maxPicSizeRatioP               : 0
     [m3video] rateControlParams -> minPicSizeRatioB               : 0
     [m3video] rateControlParams -> maxPicSizeRatioB               : 0
     [m3video] rateControlParams -> enablePRC                      : 1
     [m3video] rateControlParams -> enablePartialFrameSkip         : 0
     [m3video] rateControlParams -> discardSavedBits               : 1
     [m3video] rateControlParams -> VBRDuration                    : 8
     [m3video] rateControlParams -> VBRsensitivity                 : 0
     [m3video] rateControlParams -> skipDistributionWindowLength   : 5
     [m3video] rateControlParams -> numSkipInDistributionWindow    : 2
     [m3video] rateControlParams -> enableHRDComplianceMode        : 1
     [m3video] rateControlParams -> frameSkipThMulQ5               : 0
     [m3video] rateControlParams -> vbvUseLevelThQ5                : 0
     [m3video]  
     [m3video] interCodingParams -> interCodingPreset  : 0
     [m3video] interCodingParams -> searchRangeHorP    : 144
     [m3video] interCodingParams -> searchRangeVerP    : 32
     [m3video] interCodingParams -> searchRangeHorB    : 144
     [m3video] interCodingParams -> searchRangeVerB    : 16
     [m3video] interCodingParams -> interCodingBias    : 1
     [m3video] interCodingParams -> skipMVCodingBias   : 1
     [m3video] interCodingParams -> minBlockSizeP      : 0
     [m3video] interCodingParams -> minBlockSizeB      : 0
     [m3video] interCodingParams -> meAlgoMode         : 0
     [m3video]  
     [m3video] intraCodingParams -> intraCodingPreset          : 0
     [m3video] intraCodingParams -> lumaIntra4x4Enable         : 0
     [m3video] intraCodingParams -> lumaIntra8x8Enable         : 255
     [m3video] intraCodingParams -> lumaIntra16x16Enable       : 15
     [m3video] intraCodingParams -> chromaIntra8x8Enable       : 15
     [m3video] intraCodingParams -> chromaComponentEnable      : 1
     [m3video] intraCodingParams -> intraRefreshMethod         : 0
     [m3video] intraCodingParams -> intraRefreshRate           : 0
     [m3video] intraCodingParams -> gdrOverlapRowsBtwFrames    : 0
     [m3video] intraCodingParams -> constrainedIntraPredEnable : 0
     [m3video] intraCodingParams -> intraCodingBias            : 0
     [m3video]  
     [m3video] sliceCodingParams -> sliceCodingPreset  : 1
     [m3video] sliceCodingParams -> sliceMode          : 2
     [m3video] sliceCodingParams -> sliceUnitSize      : 1024
     [m3video] sliceCodingParams -> sliceStartOffset   : [0 0 0]
     [m3video] sliceCodingParams -> streamFormat       : 0
     [m3video]  
     [m3video] sliceGroupChangeCycle           : 0
     [m3video] searchCenter                    : 32767
     [m3video] enableStaticMBCount             : 0
     [m3video] enableROI                       : 0
     [m3video]  

  • 你好;

    这个是刚才上面参数打印时候编码多slice的码率,附件下载

     

  • 你好;

    关于RDK的源码包,最好是通过TI的技术支持获取,需要签NDA协议

  • 非常感谢你的帮助。问题总算解决了,要把encodepreset设置userdefine。谢谢!