⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exolvidpip.c

📁 1500 video test demo,please note.
💻 C
📖 第 1 页 / 共 5 页
字号:
    ptsaDefaultCapabilities_t   pDefaultCap2,    ptsaDefaultInstanceSetup_t  pDefaultSetup2,    int                         ReceiverIndex,    ptmVideoFormat_t            pSetupFormat,    int                         NrPackets,    tmmlMmspHandle_t            hMemSpace,    ptsaInOutDescriptor_t*      ppIoDescr){    tmErrorCode_t                   tmError = TM_OK;    ptsaInOutDescriptorSetup_t      pIodSetup=Null;    UInt32                          NrBuffers=0;    UInt32                          BufferSize=0;    int i;    DBG_PRINT((dbgexolVidPip, DBG_INTERFACE_ENTER, "exolVidPipCreateIoDescr" ));    DBG_ASSERT2((pDefaultCap1 != 0),("exolVidPipCreateIoDescr pDefaultCap1 Null"));    DBG_ASSERT2((pDefaultCap2 != 0),("exolVidPipCreateIoDescr pDefaultCap2 Null"));    DBG_ASSERT2((ppIoDescr != 0),("exolVidPipCreateIoDescr ppIoDescr Null"));    DBG_ASSERT2((pSetupFormat != 0),("exolVidPipCreateIoDescr pSetupFormat Null"));    tmError = tmVideoUtilGetFormatNrBuffers(                                    pSetupFormat,           //const Void *  pFormat,        //  I: av format                                    &NrBuffers);            //pUInt32       pNrBuffers      //  O: nr buffers this format uses.    DBG_ASSERT2((tmError == TM_OK),("tmVideoUtilGetFormatNrBuffers failed:0x%X\n",tmError));    /*-----------------------------------------------------------------------*/    /*                     Create InOutDescriptors                           */    /*-----------------------------------------------------------------------*/    //pIodSetup = (ptsaInOutDescriptorSetup_t)malloc((sizeof(tsaInOutDescriptorSetup_t)) + (NrBuffers - 1) * sizeof(UInt32));    tmError = tmmlMalloc(                            hMemSpace,                            sizeof(tsaInOutDescriptorSetup_t) + 8,                            (pVoid*)&pIodSetup,tmmlMallocCacheAligned | tmmlMallocCleared);    pIodSetup->format          = Null; //(ptmAvFormat_t)pSetupFormat; //Null; // using Null format let us change the format afterwards    pIodSetup->flags           = tsaIODescSetupFlagCacheMalloc | tsaIODescSetupFlagInvalidateDataout;    pIodSetup->fullQName       = "A0IF";    pIodSetup->emptyQName      = "A0IE";    pIodSetup->queueFlags      = 0;    pIodSetup->senderCap       = pDefaultCap1;  //ivp->pVcapVipCap->defaultCapabilities;    pIodSetup->receiverCap     = pDefaultCap2;  //ivp->pVrendGfxVoCap->defaultCapabilities;    pIodSetup->senderIndex     = SenderIndex;   //VCAPVIP2_MAIN_OUTPUT;    pIodSetup->receiverIndex   = ReceiverIndex; //VRENDGFXVO_MAIN_INPUT;    pIodSetup->packetBase      = 0xF40;    pIodSetup->numberOfPackets = NrPackets;    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "Allocating iodescr buffers:" ));    for(i=0;i < NrBuffers;i++)    {        tmError = tmVideoUtilGetFormatBufferSize(                                    pSetupFormat,           //const Void *        pFormat,        //  I: av format                                     i,                      //UInt32              bufferNr,       //  I: buffer index                                    &BufferSize);           //pUInt32             pBufferSize     //  O: size of buffer.        DBG_ASSERT2((tmError == TM_OK),("tmVideoUtilGetFormatBufferSize failed:0x%X\n",tmError));        pIodSetup->bufSize[i]      = BufferSize;            //768 * 576 * 2;        DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "Buffer %d size: %d",i,BufferSize ));    }        pIodSetup->numberOfBuffers = NrBuffers;        // create IO descriptor    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "Creating IO descriptor..." ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->format:0x%X",pIodSetup->format ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->format->size:%d",pSetupFormat->size ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->format->dataClass:%d",pSetupFormat->dataClass ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->format->dataType:0x%X",pSetupFormat->dataType ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->format->dataSubtype:0x%X",pSetupFormat->dataSubtype ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->format->description:0x%X",pSetupFormat->description ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->senderCap:0x%X",pIodSetup->senderCap ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->receiverCap:0x%X",pIodSetup->receiverCap ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->senderIndex:%d",pIodSetup->senderIndex ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->receiverIndex:%d",pIodSetup->receiverIndex ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->numberOfPackets:%d",pIodSetup->numberOfPackets ));    DBG_PRINT((dbgexolVidPip, DBG_LEVEL_1, "pIodSetup->numberOfBuffers:%d",pIodSetup->numberOfBuffers ));    tmError = tsaDefaultInOutDescriptorCreateInMmsp(                                                        ppIoDescr,                                                         pIodSetup,                                                        hMemSpace,                                                        tmmlMallocCacheAligned | tmmlMallocCleared);    DBG_ASSERT2((tmError == TM_OK),("tsaDefaultInOutDescriptorCreate failed:0x%X\n",tmError));    tmmlFree(pIodSetup);    pIodSetup=Null;    /*-----------------------------------------------------------------------*/    /*                     Install Format                                    */    /*-----------------------------------------------------------------------*/        tmError = tsaDefaultSenderReconnect(*ppIoDescr,                                 SenderIndex,                                 pDefaultCap1,                                 NULL);    DBG_ASSERT2((tmError == TM_OK),("tsaDefaultSenderReconnect failed:0x%X\n",tmError));        tmError = tsaDefaultReceiverReconnect(*ppIoDescr,                                 ReceiverIndex,                                 pDefaultCap2);    DBG_ASSERT2((tmError == TM_OK),("tsaDefaultReceiverReconnect failed:0x%X\n",tmError));    if(pDefaultSetup1)        pDefaultSetup1->outputDescriptors[SenderIndex] = *ppIoDescr;        if(pDefaultSetup2)        pDefaultSetup2->inputDescriptors[ReceiverIndex] = *ppIoDescr;            tmError = tsaDefaultInstallFormat(*ppIoDescr,(ptmAvFormat_t) pSetupFormat);    DBG_ASSERT2((tmError == TM_OK),("tsaDefaultInstallFormat failed:0x%X\n",tmError));        DBG_PRINT((dbgexolVidPip, DBG_INTERFACE_LEAVE, "exolVidPipCreateIoDescr" ));    return tmError;}

//-----------------------------------------------------------------------------// FUNCTION:    RunVip://// DESCRIPTION: This function does//                          set input format//                          set src rect//                          set dst rect//// RETURN:      tmErrorCode_t//// NOTES:       None//-----------------------------------------------------------------------------//void RunVip(exolVidPipInstance_t* ivp){    tmErrorCode_t                   tmError = TM_OK;    ptmVideoFormat_t                pInputFormat=&ivp->InputFormat;    ptmVideoFormat_t                pOutputFormat=&ivp->OutputFormat;    UInt32                          VrendGfxVoFlags=0;    tsaInOutDescriptorTeeSetup_t    ioteesetup;
    ptsaInOutDescriptorTeeSetup_t   pioteesetup=&ioteesetup;
	tmError=tmError;
	    DBG_PRINT((dbgexolVidPip, DBG_INTERFACE_ENTER, "RunVip" ));    /*-----------------------------------------------------------------------*/    /*                       Get Capabilities                                */    /*-----------------------------------------------------------------------*/    tmError = tmolVrendGfxVoGetCapabilities(&ivp->pVrendGfxVoCap);    DBG_ASSERT2((tmError == TM_OK),("tmolVrendGfxVoGetCapabilities failed:0x%X\n",tmError));    tmError = tmolVcapVip2_GetCapabilities(&ivp->pVcapVipCap);    DBG_ASSERT2((tmError == TM_OK),("tmolVcapVipGetCapabilities failed:0x%X\n",tmError));    /*-----------------------------------------------------------------------*/    /*                      Create IoDescr for Video                         */    /*-----------------------------------------------------------------------*/
    pInputFormat->description = vdfFieldInField;
    
	tmError = exolVidPipCreateIoDescr(                                 ivp->pVcapVipCap->pDefCapabilities,                                Null,                                VCAPVIP2_MAIN_OUTPUT,                                ivp->pVrendGfxVoCap->defaultCapabilities,                                Null,                                VRENDGFXVO_MAIN_INPUT,                                pInputFormat,                                12, //  DS#5117  6, // vip=2 (dbl buff) gfxvo=3 (3FMS Dei) +1 que                                ivp->hInstMemSpace,                                &ivp->pVipToRend1InIod);    DBG_ASSERT2((tmError == TM_OK),("exolVidPipCreateIoDescr failed:0x%X\n",tmError));


	// Create Tee for second renderer input 
	// Creating InOutDescriptorsTee
    pioteesetup->flags         = tsaIODescSetupFlagNone;
    pioteesetup->fullQName     = "CWFT";
    pioteesetup->emptyQName    = "CWET";
    pioteesetup->queueFlags    = 0;
    pioteesetup->receiverCap   = ivp->pVrendGfxVoCap->defaultCapabilities;
    pioteesetup->receiverIndex = VRENDGFXVO_SECOND_INPUT;
    pioteesetup->packetBase    = 0xC00;
    pioteesetup->bCopyData     = False;
    tmError = tsaDefaultInOutDescriptorCreateTee(&ivp->pVipToRend2InIod, pioteesetup, ivp->pVipToRend1InIod);
    DBG_ASSERT2((tmError == TM_OK),("tsaDefaultInOutDescriptorCreateTee failed:0x%X\n",tmError));
    /*     calculation for io descr packets: between Vip -> GfxVo (buffertype: FieldInField)    Vip needs 2 packets in interlaced, dubble buffer mode    GfxVo needs         1 packet in interlaced display mode        2 packets when progressive & 2 Field deinterlacing         3 packets when progressive & 3 Field deinterlacing    1 packet in the queue    */
	/*-----------------------------------------------------------------------*/    /*                        Setup Components                               */    /*-----------------------------------------------------------------------*/    /* ------------------------ Setup Video -------------------------------- */    tmError = exolVidPipSetupVcapVip(                                        ivp,                                        pInputFormat,                                        ivp->pVipToRend1InIod);    DBG_ASSERT2((tmError == TM_OK),("exolVidPipSetupVcapVip failed:0x%X\n",tmError));
	if(ivp->pipWindow)
	{		VrendGfxVoFlags = exolVidPipSetup_UseLayer0 | exolVidPipSetup_NeedBuffer0|
						exolVidPipSetup_UseLayer1 | exolVidPipSetup_NeedBuffer1|
						exolVidPipSetup_HorizontalScalingInQvcp1;

		tmError = exolVidPipSetupVrendGfxVo( ivp,
                                        pOutputFormat,
                                        ivp->pVipToRend1InIod,
                                        ivp->pVipToRend2InIod,
                                        VrendGfxVoFlags); //exolVidPipSetup_UseLayer0 | exolVidPipSetup_NeedBuffer0 ); 
		// when using progressive output modes always need buffer
		DBG_ASSERT2((tmError == TM_OK),("exolVidPipSetupVrendGfxVo failed:0x%X\n",tmError));

	}
	else
	{
			VrendGfxVoFlags = exolVidPipSetup_UseLayer0 | exolVidPipSetup_NeedBuffer0;
			tmError = exolVidPipSetupVrendGfxVo( ivp,
                                        pOutputFormat,
                                        ivp->pVipToRend1InIod,
                                        Null,
                                        VrendGfxVoFlags); //exolVidPipSetup_UseLayer0 | exolVidPipSetup_NeedBuffer0 ); 
		// when using progressive output modes always need buffer
		DBG_ASSERT2((tmError == TM_OK),("exolVidPipSetupVrendGfxVo failed:0x%X\n",tmError));
	}
	    /*-----------------------------------------------------------------------*/    /*                        Start Components                               */    /*-----------------------------------------------------------------------*/    /* now everything is ready:  Start all components. */    tmError = tmolVcapVip2_Start(ivp->hVcapVip);    DBG_ASSERT2((tmError == TM_OK),("tmolVcapVip2_Start failed:0x%X\n",tmError));    tmError = tmolVrendGfxVoStart(ivp->hVrendGfxVo);    DBG_ASSERT2((tmError == TM_OK),("tmolVrendGfxVoStart failed:0x%X\n",tmError));    // really dirty trick to get 2nd pattern (works on Nref)    if(ivp->InternalTestPattern == 2 )    {        MMIO(0x106104) |= 0xc000000 ;    }    /*-----------------------------------------------------------------------*/    // Vip is now running    tmError = doVipSubMenu(ivp);    DBG_ASSERT2((tmError == TM_OK),("doTest failed:0x%X\n",tmError));    /*-----------------------------------------------------------------------*/    /*                        Stop and close Components                      */    /*-----------------------------------------------------------------------*/    /* --- Stop video --- */    // from left to right    tmError = tmolVcapVip2_Stop(ivp->hVcapVip);    DBG_ASSERT2((tmError == TM_OK),("tmolVcapVip2_Stop failed:0x%X\n",tmError));    tmError = tmolVcapVip2_Close(ivp->hVcapVip);    DBG_ASSERT2((tmError == TM_OK),("tmolVcapVip2_Close failed:0x%X\n",tmError));
    tmError = tmVdecAna_Close(ivp->decInstance);
    DBG_ASSERT2((tmError == TM_OK),("tmVdecAna_Close failed:0x%X\n",tmError));

    tmError = tmolVrendGfxVoStop(ivp->hVrendGfxVo);    DBG_ASSERT2((tmError == TM_OK),("tmolVrendGfxVoStop failed:0x%X\n",tmError));    tmError = tmolVrendGfxVoClose(ivp->hVrendGfxVo);    DBG_ASSERT2((tmError == TM_OK),("tmolVrendGfxVoClose failed:0x%X\n",tmError));    if(ivp->AnalogVideoEncoder)    {    tmError = tmVencAna_Close(ivp->pVencAnaInst);    DBG_ASSERT2((tmError == TM_OK),("tmolVrendGfxVoClose failed:0x%X\n",tmError));    }    /*-----------------------------------------------------------------------*/    /*                        Destroy io Descriptor                          */    /*-----------------------------------------------------------------------*/    /* Destroy InOutDescriptors */
    tmError = tsaDefaultInOutDescriptorDestroyTee(ivp->pVipToRend2InIod, ivp->pVipToRend1InIod);
    DBG_ASSERT2((tmError == TM_OK),("tsaDefaultInOutDescriptorDestroyTee failed:0x%X\n",tmError));

	tmError = tsaDefaultInOutDescriptorDestroy(ivp->pVipToRend1InIod);    DBG_ASSERT2((tmError == TM_OK),("tsaDefaultInOutDescriptorDestroy failed:0x%X\n",tmError));    DBG_PRINT((dbgexolVidPip, DBG_INTERFACE_LEAVE, "RunVip" ));    return;}//-----------------------------------------------------------------------------// FUNCTION:    doVipSubMenu://// DESCRIPTION: This function does//                          set input format//                          set src rect//                          set dst rect//// RETURN:      tmErrorCode_t//// NOTES:       None//-----------------------------------------------------------------------------//static tmErrorCode_tdoVipSubMenu(exolVidPipInstance_t* ivp) // instance pointer{    tmErrorCode_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -