亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vportdis.c

?? 使用DM642 來進行scaling 有說明檔
?? C
?? 第 1 頁 / 共 4 頁
字號:
                        EDMA_RSETH(chan->hRld[8 + offset], SRC, 
                          viop->frame.iFrm.cr1);                         
                    }                                           
                } /* if(chan->mergeFlds) */
            } else {
                QUE_enqueue(&chan->qIn, (QUE_Handle)viop);                    
            }
            chan->queEmpty = FALSE;                   
        }
        else {
            QUE_enqueue(&chan->qIn, (QUE_Handle)viop);        
        }
        retVal = packet->status = IOM_COMPLETED;
    }
    if(packet->cmd != FVID_FREE) { /* FVID_ALLOC or FVID_EXCHANGE */
        if(chan->packetIOM == INV){
            if((viop = (FVID_Frame *)QUE_dequeue(&chan->qOut))
                !=(FVID_Frame *)&chan->qOut) {
                /* only when there is no outstanding pending request */
                *(void **)packet->addr = (void *)viop;
                packet->size = sizeof(FVID_Frame);
                retVal = packet->status = IOM_COMPLETED;
            }
            else {
                chan->packetIOM = packet;
                retVal = packet->status = IOM_PENDING;
            }
        }else retVal = IOM_EINUSE;    
                    
    }    
    IRQ_globalRestore(gie);
    return retVal;
}



/*
 *  ======== _configAsnycMode ========
 */                                   
static Int _configAsyncMode(Ptr chanp, Uns cmd, Ptr args)
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj *)chanp;
    volatile Int* base = (volatile Int *)chan->base;  
    VPORTDIS_AsyncModeParam *params = (VPORTDIS_AsyncModeParam *) args;
    Uint32 gie = IRQ_globalDisable();     
    Int vif1 = 0, vif2 = 0;
    Int vInt1 = 0, vInt2 = 0;                             
    Int i;
    HWI_Attrs attrs = HWI_ATTRS;       
    Int mask = 0;                        
    Ptr elem;

    chan->asyncFrameCt = 0;
    /* set the interrupt to happen 30 lines before frame complete */
    /* to give enough time for the application call-back function */
    /* to execute successfully                                    */
    if(chan->interlaced) {
        vif2 = 1;
        vInt2 = chan->frmSz - 30;
        mask = VPORT_INT_VINT2;
    } else {
        vif1 = 1;
        vInt1 = chan->frmSz - 30;        
        mask = VPORT_INT_VINT1;
    }
        
    if(cmd == VPORTDIS_CMD_ASYNC_MODE_ENABLE) {
        
        chan->asyncModeEnable = TRUE;   
        chan->asyncCbArg = params->arg;
        chan->asyncCallBackFxn = (Fxn)params->callBackFxn;
        chan->queEmpty = TRUE; /* always TRUE */
  
        if(params->mode == VPORTDIS_PULLDOWN_24P_30I){
            assert(chan->numFrms > 4);          
            assert(chan->mergeFlds); /* make sure the mergeFlds flag is enabled */
        } else {
            assert(chan->numFrms > 2);                
        }
        base[_VP_VDVINT_OFFSET] = VP_VDVINT_RMK(vif2, 
            vInt2, vif1, vInt1);
        
        chan->pullDownMode = params->mode;
        if(params->irqId != -1) {
            attrs.arg = chan->portNum;
            IRQ_map(IRQ_EVT_VINT0 + chan->portNum, params->irqId);    
            HWI_dispatchPlug(params->irqId, (Fxn)displayISR, -1, &attrs);
            IRQ_disable(IRQ_EVT_VINT0 + chan->portNum);
            IRQ_clear(IRQ_EVT_VINT0 + chan->portNum);
        }

        /* clear vertical interrupts */    
        base[_VP_VPIE_OFFSET] &= ~mask;  
        
        /* enable the correct one */
        base[_VP_VPIE_OFFSET] |= mask; 
        chan->vIntMask |= mask;
        IRQ_enable(IRQ_EVT_VINT0 + chan->portNum);   
        while((elem = QUE_dequeue(&chan->qIn))!= &chan->qIn){
            QUE_enqueue(&chan->qOut, elem);
        }

    } else if(cmd == VPORTDIS_CMD_ASYNC_MODE_DISABLE) {
        if(chan->vIntFxn == INV) {
            IRQ_disable(IRQ_EVT_VINT0 + chan->portNum);
            IRQ_clear(IRQ_EVT_VINT0 + chan->portNum);
        }
        /* clear vertical interrupts */    
        base[_VP_VPIE_OFFSET] &= (~mask);  
        chan->asyncModeEnable = FALSE;  
        chan->asyncCallBackFxn = (Fxn)INV;  
        QUE_new(&chan->qIn);  
        QUE_new(&chan->qOut);
        for(i = 0; i < chan->numFrms; i++) {
            if(&chan->viops[i] != chan->curViop && 
              &chan->viops[i] != chan->nextViop){
                QUE_enqueue(&chan->qOut, &chan->viops[i]);    
            }        
        }
    } else if(cmd == VPORTDIS_CMD_ASYNC_MODE_RESET_FRAMECT) {
        while(!QUE_empty(&chan->qIn)) {
            QUE_enqueue(&chan->qOut, QUE_dequeue(&chan->qIn));
        }
    } else {
        return IOM_EBADARGS;
    }
    IRQ_globalRestore(gie);
    
    return IOM_COMPLETED;                                            
}


/*
 *  ========  _configChan ========
 */
static Int _configChan(Ptr chanp, Ptr args)
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj *)chanp;
    VPORTDIS_Params*   params = (VPORTDIS_Params* )args; 
    Int retVal;           
    
    
    if(!(chan->status & _VPORT_CFGED)) {
        chan->lastLineNum = _getlastActiveLine(params);
        /* configure video port channel A/B control register */
        _configRegs(chanp, params);
        /* configure EDMA and frame buffer */
        retVal = _configEDMA(chanp, params);
    } else {
        retVal = IOM_EINUSE;
    }    
    return retVal;
}                     

/*
 *  ======== _configEDMA ========
 */
static Int _configEDMA(Ptr chanp, VPORTDIS_Params *params)
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj *)chanp;
    Int i;
    Int j;               
    EDMA_Config  cfgEdma;
    Int thrld;
    Int edmaChans;
    Int8* curAddr;
    Bool success;
    
    if(chan->status & _VPORT_CFGED) {
        assert(params->numFrmBufs  >= 2 
            && params->numFrmBufs <= VPORT_MAX_NUM_FRMBUFS);
        chan->numFrms = params->numFrmBufs;

        chan->segId = params->segId;

        /* allocate frame buffers */
        chan->bufSz = chan->yPitch * chan->numLines 
              + chan->cPitch * chan->numLines * 2;
        for(i = 0; i < chan->numFrms; i ++) {  
            if((curAddr = MEM_alloc(params->segId,chan->bufSz, 
                params->alignment)) == MEM_ILLEGAL){
                for(j = 0; j < i ; j ++) {
                    MEM_free(params->segId, chan->viops[j].frame.iFrm.y1, 
                        chan->bufSz);
                }
                /* memory allocation fails */
                return IOM_EALLOC;
            }    
            /* field 1 */
            chan->viops[i].frame.iFrm.y1 = curAddr;
            curAddr += chan->numLines*chan->yPitch;
            chan->viops[i].frame.iFrm.cb1 = curAddr;
            curAddr += chan->numLines*chan->cPitch;
            chan->viops[i].frame.iFrm.cr1 = curAddr;
            curAddr += chan->numLines*chan->cPitch;
            
            CACHE_clean(CACHE_L2, (void *)fillValue, 16);
            success = DAT_open(DAT_CHAANY, DAT_PRI_LOW, 0);          
            
            for( j = 0; j < chan->numLines; j ++) {
                DAT_fill(chan->viops[i].frame.iFrm.y1 + j * chan->yPitch, chan->yPitch, (Uint32 *)fillValue);
                DAT_fill(chan->viops[i].frame.iFrm.cb1 + j * chan->cPitch, chan->cPitch, (Uint32 *)&fillValue[2]);
                DAT_fill(chan->viops[i].frame.iFrm.cr1 + j * chan->cPitch, chan->cPitch, (Uint32 *)&fillValue[2]);
            }
            if(success) {
                DAT_close();
            }
            /* field 2 */
            if(params->fldOp == VPORT_FLDOP_FLD2) {
                chan->viops[i].frame.iFrm.y2 = chan->viops[i].frame.iFrm.y1;
                chan->viops[i].frame.iFrm.cb2 = chan->viops[i].frame.iFrm.cb1;
                chan->viops[i].frame.iFrm.cr2 = chan->viops[i].frame.iFrm.cr1;
            } else if(chan->mergeFlds) {
                chan->viops[i].frame.iFrm.y2 = chan->viops[i].frame.iFrm.y1
                    + chan->yPitch;
                chan->viops[i].frame.iFrm.cb2 = chan->viops[i].frame.iFrm.cb1
                    + chan->cPitch;
                chan->viops[i].frame.iFrm.cr2 = chan->viops[i].frame.iFrm.cr1
                    + chan->cPitch;
            }else {
                chan->viops[i].frame.iFrm.y2 = chan->viops[i].frame.iFrm.y1
                    + (chan->numLinesFld1*chan->yPitch);
                chan->viops[i].frame.iFrm.cb2 = chan->viops[i].frame.iFrm.cb1
                    + (chan->numLinesFld1*chan->cPitch);
                chan->viops[i].frame.iFrm.cr2 = chan->viops[i].frame.iFrm.cr1
                    + (chan->numLinesFld1*chan->cPitch);            
            }    
            if(i > 0) {
                /* don't put the first 1 viop into the queue */
                QUE_enqueue(&chan->qOut, (QUE_Handle)&chan->viops[i]);
            }
        }
        chan->nextViop = &chan->viops[0];
        chan->curViop = &chan->viops[0];
        chan->queEmpty = TRUE;
        CACHE_clean(CACHE_L2ALL, NULL, NULL);
    

        if(chan->mode & _VPORT_MASK_RAW) edmaChans = 1;
        else edmaChans = 3;

        for(i = 0; i < edmaChans; i ++) {
            Int optFld1 = EDMA_OPT_RMK(
                  params->edmaPri,
                  EDMA_OPT_ESIZE_32BIT,
                  EDMA_OPT_2DS_YES, 
                  EDMA_OPT_SUM_INC,
                  EDMA_OPT_2DD_NO,
                  EDMA_OPT_DUM_NONE,
                  EDMA_OPT_TCINT_NO,
                  EDMA_OPT_TCC_OF(0), 
                  EDMA_OPT_TCCM_OF(0),
                  EDMA_OPT_ATCINT_NO,
                  EDMA_OPT_ATCC_DEFAULT,
                  EDMA_OPT_PDTS_DISABLE,
                  EDMA_OPT_PDTD_DISABLE,
                  EDMA_OPT_LINK_YES,
                  EDMA_OPT_FS_NO
            );
            Int optFld2a = EDMA_OPT_RMK(
                
                  params->edmaPri,
                  EDMA_OPT_ESIZE_32BIT,
                  EDMA_OPT_2DS_YES, 
                  EDMA_OPT_SUM_INC,
                  EDMA_OPT_2DD_NO,
                  EDMA_OPT_DUM_NONE,
                  (i == 0 ? EDMA_OPT_TCINT_YES:EDMA_OPT_TCINT_NO),
                  EDMA_OPT_TCC_OF(i == 0 ? chan->tcc[0] & 0x0f : 0), 
                  EDMA_OPT_TCCM_OF(i == 0 ? chan->tcc[0] >> 4 : 0),
                  EDMA_OPT_ATCINT_NO,
                  EDMA_OPT_ATCC_DEFAULT,
                  EDMA_OPT_PDTS_DISABLE,
                  EDMA_OPT_PDTD_DISABLE,
                  EDMA_OPT_LINK_YES,
                  EDMA_OPT_FS_NO
            );
            Int optFld2b = EDMA_OPT_RMK(
                
                  params->edmaPri,
                  EDMA_OPT_ESIZE_32BIT,
                  EDMA_OPT_2DS_YES, 
                  EDMA_OPT_SUM_INC,
                  EDMA_OPT_2DD_NO,
                  EDMA_OPT_DUM_NONE,
                  (i == 0 ? EDMA_OPT_TCINT_YES:EDMA_OPT_TCINT_NO),
                  EDMA_OPT_TCC_OF(i == 0 ? chan->tcc[1] & 0x0f : 0), 
                  EDMA_OPT_TCCM_OF(i == 0 ? chan->tcc[1] >> 4 : 0),
                  EDMA_OPT_ATCINT_NO,
                  EDMA_OPT_ATCC_DEFAULT,
                  EDMA_OPT_PDTS_DISABLE,
                  EDMA_OPT_PDTD_DISABLE,
                  EDMA_OPT_LINK_YES,
                  EDMA_OPT_FS_NO
            );

            thrld = (i == 0)? chan->yThrld:chan->cThrld;
            cfgEdma.dst = EDMA_DST_RMK(chan->edmaAddr[i]);
            if(chan->mergeFlds) {
                /* to merge the two fields together */
                /* EDMA is configured to transfer only field 1 initially */
                /* line pitch is twice the line size */
                /* this requires that the threlhold is the same as line size*/

                /* PaRAM and reload Entries */

                /* first field */
                cfgEdma.opt = optFld1;
                cfgEdma.cnt = EDMA_CNT_RMK(
                    (chan->numEventsFld1) - 1, (thrld << 1));
                cfgEdma.idx = EDMA_IDX_RMK(thrld << 4, 0);
                /* hard code the field 1 & 2 of the first     */
                /* frame buffer as current and reload buffers */
                cfgEdma.src = EDMA_SRC_RMK(
                    *((Int *)(&chan->viops[0].frame.iFrm.y1) + i));
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[4*i + 1]);
                EDMA_config(chan->hEdma[i], &cfgEdma);
                EDMA_config(chan->hRld[4 * i], &cfgEdma);
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[4*i + 3]);
                EDMA_config(chan->hRld[4 * i + 2], &cfgEdma);
                
                /* second field */
                cfgEdma.opt = optFld2a;
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[4 * i + 2]);
                cfgEdma.cnt = EDMA_CNT_RMK(
                    (chan->numEvents-chan->numEventsFld1) - 1, (thrld << 1));
                cfgEdma.src = EDMA_SRC_RMK(
                    *((Int *)(&chan->viops[0].frame.iFrm.y2) + i));
                EDMA_config(chan->hRld[4 * i + 1], &cfgEdma); 
                cfgEdma.opt = optFld2b;
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[4*i]);
                EDMA_config(chan->hRld[4 * i + 3], &cfgEdma);
                
            }else {/* if fields are not merged, configure EDMA to transfer */
                   /* for both field1 and field 2                          */
                   /* the line pitch is just the line size                 */
                cfgEdma.opt = optFld2a;
                cfgEdma.cnt = EDMA_CNT_RMK((chan->numEvents) - 1, (thrld << 1));
                cfgEdma.idx = EDMA_IDX_RMK(thrld << 3, 0);
                /* hard code the first frame buffer as current  */
                /*and reload buffers */
                cfgEdma.src = EDMA_SRC_RMK(
                    *((Int *)(&chan->viops[0].frame.iFrm.y1) + i));
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[4 * i + 2]);
                EDMA_config(chan->hEdma[i], &cfgEdma);
                cfgEdma.src = EDMA_SRC_RMK(
                    *((Int *)(&chan->viops[0].frame.iFrm.y1) + i));
                EDMA_config(chan->hRld[4 * i], &cfgEdma);
                cfgEdma.opt = optFld2b;
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[4 * i]);
                EDMA_config(chan->hRld[4 * i + 2], &cfgEdma);
            }
        }
        chan->nextEDMARlds = 1;        
        
        /* enable EDMA channel */        
        if(!(chan->mode & _VPORT_MASK_RAW)) {
            EDMA_disableChannel(chan->hEdma[1]);
            EDMA_clearChannel(chan->hEdma[1]);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利一区二区三区在线视频| 蜜桃视频在线一区| 欧美日本视频在线| 成人av片在线观看| 精品在线免费观看| 午夜影院在线观看欧美| 亚洲人一二三区| 麻豆精品一区二区| 国产精品伦一区| 日韩午夜三级在线| 在线一区二区视频| 91在线播放网址| 成人一区二区视频| 国产精品一区2区| 精品午夜久久福利影院| 免费成人性网站| 免费在线一区观看| 欧美aaaaaa午夜精品| 丝袜国产日韩另类美女| 无码av免费一区二区三区试看| 一区二区三区在线看| 一区二区三区中文字幕精品精品 | 不卡的av在线| 国产一区二区看久久| 久久99国产乱子伦精品免费| 奇米在线7777在线精品| 久久精品国产999大香线蕉| 美脚の诱脚舐め脚责91| 加勒比av一区二区| 精彩视频一区二区| 国产一区二区三区不卡在线观看 | 成人激情校园春色| 国产ts人妖一区二区| 北条麻妃一区二区三区| 97精品国产露脸对白| 欧美最新大片在线看| 精品美女被调教视频大全网站| 欧美性受xxxx黑人xyx| 678五月天丁香亚洲综合网| 日韩一级大片在线| 国产丝袜在线精品| 亚洲欧美偷拍卡通变态| 午夜久久久久久久久| 精品一区二区日韩| eeuss影院一区二区三区| 欧美女孩性生活视频| 久久久精品综合| 亚洲人成网站影音先锋播放| 亚洲午夜久久久久久久久久久| 美脚の诱脚舐め脚责91| 日韩一区二区在线观看视频| 一区二区三区在线观看动漫| 亚洲妇熟xx妇色黄| 久久er99热精品一区二区| youjizz国产精品| 欧美高清一级片在线| 国产午夜一区二区三区| 亚洲综合色网站| 精品亚洲国内自在自线福利| 日本韩国欧美国产| 2020国产精品久久精品美国| 亚洲毛片av在线| 久久精品国产一区二区| 91国产视频在线观看| 久久免费视频一区| 手机精品视频在线观看| 99re成人在线| 精品国产精品网麻豆系列| 亚洲黄色片在线观看| 国产成人在线视频免费播放| 欧美一区二区久久| 亚洲男人的天堂在线观看| 国产一区二区在线观看视频| 91麻豆精品国产91久久久资源速度 | 国产欧美va欧美不卡在线| 天堂va蜜桃一区二区三区漫画版| 99热99精品| 国产亚洲欧美日韩日本| 人人狠狠综合久久亚洲| 欧美在线不卡一区| 中文字幕在线视频一区| 国产乱对白刺激视频不卡| 欧美一区二区三区在线观看视频| 亚洲国产精品久久人人爱蜜臀| 成人开心网精品视频| 国产女主播一区| 国产精品综合在线视频| 欧美一区二区二区| 日本在线不卡视频| 欧美午夜在线一二页| 亚洲午夜羞羞片| 在线观看欧美精品| 亚洲综合免费观看高清完整版 | 青青草原综合久久大伊人精品优势| 一本色道a无线码一区v| 综合久久综合久久| 99热精品一区二区| 一区二区三区在线影院| 在线免费av一区| 亚洲aⅴ怡春院| 91精品国产高清一区二区三区蜜臀 | 成人在线综合网站| 国产欧美日韩综合精品一区二区 | 91免费国产在线| 亚洲男人的天堂av| 在线一区二区三区做爰视频网站| 亚洲一二三四久久| 欧美一区二区三区成人| 久久精品国产一区二区三| 久久婷婷久久一区二区三区| 国产麻豆精品久久一二三| 国产三级欧美三级日产三级99 | 国产成人亚洲综合a∨婷婷图片 | 激情综合色播激情啊| 久久久噜噜噜久久人人看| 国产91在线|亚洲| 日韩理论片中文av| 91精品综合久久久久久| 激情小说亚洲一区| 亚洲同性gay激情无套| 欧美视频一区在线观看| 国产一区二区调教| 亚洲精品国产精品乱码不99| 91麻豆精品国产无毒不卡在线观看| 国产在线精品免费av| 综合中文字幕亚洲| 67194成人在线观看| 国产91精品免费| 亚洲成人精品影院| 国产日韩欧美a| 欧美制服丝袜第一页| 久久国产日韩欧美精品| 自拍偷拍国产精品| 精品国产乱码久久久久久免费 | 国产在线精品一区二区夜色| 国产精品久久久久影视| 91精品在线一区二区| 成人aa视频在线观看| 日精品一区二区三区| 一区在线中文字幕| 精品免费99久久| 精品视频全国免费看| 国产suv一区二区三区88区| 婷婷综合久久一区二区三区| 欧美韩国日本不卡| 日韩免费性生活视频播放| 色婷婷亚洲一区二区三区| 国产suv精品一区二区6| 蜜臀av亚洲一区中文字幕| 亚洲美女免费在线| 国产精品人妖ts系列视频| 日韩欧美亚洲一区二区| 欧美三级视频在线观看| 91色婷婷久久久久合中文| 豆国产96在线|亚洲| 毛片av一区二区| 五月天婷婷综合| 亚洲亚洲人成综合网络| 亚洲免费色视频| 国产精品欧美精品| 国产视频911| 久久欧美一区二区| 久久综合国产精品| 欧美大片在线观看一区| 欧美一级搡bbbb搡bbbb| 欧美群妇大交群的观看方式| 欧美在线免费视屏| 91黄色激情网站| 色久优优欧美色久优优| 日本韩国一区二区| 日本精品视频一区二区三区| 91麻豆123| 欧美自拍丝袜亚洲| 色网站国产精品| 欧美午夜不卡在线观看免费| 欧美性欧美巨大黑白大战| 欧美日韩精品一区二区三区四区 | 视频一区视频二区中文| 婷婷丁香激情综合| 三级在线观看一区二区| 蜜桃在线一区二区三区| 国内成+人亚洲+欧美+综合在线| 韩国成人精品a∨在线观看| 老色鬼精品视频在线观看播放| 男女激情视频一区| 国产呦精品一区二区三区网站| 国产成人精品午夜视频免费| 不卡影院免费观看| 欧洲人成人精品| 欧美成人高清电影在线| 欧美高清在线一区| 亚洲欧美日韩在线播放| 亚洲国产毛片aaaaa无费看| 三级成人在线视频| 国产一区二区三区免费看| 99久久国产综合精品色伊| 欧美日韩在线三区| 精品av久久707| 一区二区三区在线免费视频| 美女一区二区久久|