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;
}
static Int32 VcapVencVdecVdis_ipcBitsInitDmaObj()
{
    Int32 status = OSA_SOK;

    if (gVcapVencVdecVdis_ipcBitsCtrl.dmaObj.useDma)
    {
        status = OSA_dmaInit();
        OSA_assert(status == OSA_SOK);

        status =
        OSA_dmaOpen(&gVcapVencVdecVdis_ipcBitsCtrl.dmaObj.dmaChHdnl,
                    OSA_DMA_MODE_NORMAL,
                    MCFW_IPC_BITS_DMA_MAX_TRANSFERS);
        OSA_assert(status == OSA_SOK);

    }
    if (OSA_SOK != status)
    {
        OSA_printf("DEMO_MCFW_IPC_BITS_CTRL:Disabling DMA as channel open failed[%d]",
                   status);
        gVcapVencVdecVdis_ipcBitsCtrl.dmaObj.useDma = FALSE;
    }
    return status;
}