Int32 VcapVencVdecVdis_ipcBitsInit(VcapVencVdecVdis_res resolution[], 
                                         Bool enableFWrite,
                                         Bool enableLayerWrite)

{
    VENC_CALLBACK_S callback;
    Int i;

    VcapVencVdecVdis_resetAvgStatistics();
    VcapVencVdecVdis_resetStatistics();

    gVcapVencVdecVdis_ipcBitsCtrl.fObj.enableFWrite = enableFWrite;
    gVcapVencVdecVdis_ipcBitsCtrl.fObj.enableLayerWrite = enableLayerWrite;

    callback.newDataAvailableCb = VcapVencVdecVdis_ipcBitsInCbFxn;
    /* Register call back with encoder */
    Venc_registerCallback(&callback,
                         (Ptr)&gVcapVencVdecVdis_ipcBitsCtrl);

    VcapVencVdecVdis_FreeBitBufInit();
    if (gVcapVencVdecVdis_ipcBitsCtrl.fObj.enableFWrite == TRUE){
        VcapVencVdecVdis_ipcBitsInitFObj();
    }
    VcapVencVdecVdis_ipcBitsInitDmaObj();

    for (i=0; i<MCFW_IPCBITS_RESOLUTION_TYPES; i++)
        gVcapVencVdecVdis_ipcBitsCtrl.thrObj.resolution[i] = resolution[i];

    VcapVencVdecVdis_ipcBitsInitThrObj(&gVcapVencVdecVdis_ipcBitsCtrl.thrObj);
    memset (&gVcapVencVdecVdis_ipcBitsCtrl.decInfo,0,sizeof(gVcapVencVdecVdis_ipcBitsCtrl.decInfo));
    return OSA_SOK;
}
Int32 VcapVencVdecVdis_ipcBitsInit(VcapVencVdecVdis_res resolution, Bool enableFWrite)
{
    VENC_CALLBACK_S callback;
    Int32 status;

    VcapVencVdecVdis_resetStatistics();

    gVcapVencVdecVdis_ipcBitsCtrl.fObj.enableFWrite = enableFWrite;

    callback.newDataAvailableCb = VcapVencVdecVdis_ipcBitsInCbFxn;
    /* Register call back with encoder */
    Venc_registerCallback(&callback,
                          (Ptr)&gVcapVencVdecVdis_ipcBitsCtrl);

    VcapVencVdecVdis_FreeBitBufInit();
    if (gVcapVencVdecVdis_ipcBitsCtrl.fObj.enableFWrite == TRUE) {
        VcapVencVdecVdis_ipcBitsInitFObj();
    }
    gVcapVencVdecVdis_ipcBitsCtrl.thrObj.resolution = resolution;

    OSA_dmaInit();
    status = OSA_dmaOpen(&gVcapVencVdecVdis_ipcBitsCtrl.dmaHndl, OSA_DMA_MODE_NORMAL, 1);

    VcapVencVdecVdis_ipcBitsInitThrObj(&gVcapVencVdecVdis_ipcBitsCtrl.thrObj);
    return OSA_SOK;
}
Int32 VcapVencVdecVdis_printStatistics(Bool resetStats, Bool allChs)
{
    UInt32 chId;
    VcapVencVdecVdis_ChInfo *pChInfo;
    float elaspedTime;

    elaspedTime = OSA_getCurTimeInMsec() - gVcapVencVdecVdis_ipcBitsCtrl.statsStartTime;

    elaspedTime /= 1000.0; // in secs

    if(allChs)
    {
        printf( "\n"
            "\n *** Encode Bitstream Received Statistics *** "
            "\n"
            "\n Elased time = %6.1f secs"
            "\n"
            "\n CH | Bitrate (Kbps) | FPS | Key-frame FPS | Width (max/min) | Height (max/min) | Latency (max/min)"
            "\n --------------------------------------------------------------------------------------------------",
            elaspedTime
            );

        for(chId=0; chId<VENC_CHN_MAX;chId++)
        {
            pChInfo = &gVcapVencVdecVdis_ipcBitsCtrl.chInfo[chId];

            if(pChInfo->numFrames)
            {
                printf("\n %2d | %14.2f | %3.1f | %13.1f | %5d / %6d | %6d / %6d  | %6d / %6d",
                    chId,
                    (pChInfo->totalDataSize*8.0/elaspedTime)/1024.0,
                    pChInfo->numFrames*1.0/elaspedTime,
                    pChInfo->numKeyFrames*1.0/elaspedTime,
                    pChInfo->maxWidth,
                    pChInfo->minWidth,
                    pChInfo->maxHeight,
                    pChInfo->minHeight,
                    pChInfo->maxLatency,
                    pChInfo->minLatency

                );
            }
        }

        printf("\n");

        if(resetStats)
            VcapVencVdecVdis_resetStatistics();
    }
    else
    {
    }

    return 0;
}