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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? vportdis.c

?? DSP DM642 視頻端口顯示驅(qū)動程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
           (params->cbDefVal << 16) | (params->crDefVal << 24);
        
        chan->resmpl = params->resmpl;
        chan->scale = params->scale;
        numPixels >>= params->scale;
        chan->numPixels = numPixels;
        numCPixels = (params->dmode & _VPORT_MASK_RAW) ? 0 : numPixels >> 1;
        
        if(params->dmode & _VPORT_MASK_RAW) { /* raw mode */
            chan->cPitch = 0;
            if(params->dmode == VPORT_MODE_RAW_8BIT) {
                chan->yPitch = (numPixels + 7) & (~ 7);
                chan->cPitch = (numCPixels + 7) & (~ 7);
            } else if(params->dmode == VPORT_MODE_RAW_10BIT) {
                if(params->bpk10Bit == VPORTDIS_BPK_10BIT_DENSE){
                    chan->yPitch = (numPixels * 4 / 3 + 7) & (~ 7);
                }else {
                    chan->yPitch = (numPixels * 2 + 7) & (~ 7);
                }
            } else if(params->dmode == VPORT_MODE_RAW_16BIT) {
                chan->yPitch = (numPixels * 2 + 7) & (~ 7);
            } else {
                chan->yPitch = (numPixels * 4 + 7) & (~ 7);
            }                                                                        
        } else {
            if(params->dmode & _VPORT_MASK_10BIT) {
                if(params->bpk10Bit == VPORTDIS_BPK_10BIT_DENSE){
                    chan->yPitch = (numPixels * 4 / 3 + 7) & (~ 7);
                    chan->cPitch = (numCPixels* 4 / 3 + 7) & (~ 7);
                }else {
                    chan->yPitch = (numPixels * 2 + 7) & (~ 7);
                    chan->cPitch = (numCPixels * 2 + 7) & (~ 7);
                }
            } else {/* 8 bit mode */
                chan->yPitch = (numPixels + 7) & (~ 7);
                chan->cPitch = (numCPixels + 7) & (~ 7);
            }
        }
        chan->yThrld = params->thrld;       
        if(params->mergeFlds && params->fldOp == VPORT_FLDOP_FRAME) {
            /* frame capture and merge 2 fields into one frame */
            /* make sure threshold is same as line size */
            chan->yThrld = chan->yPitch >> 3;
            chan->numEventsFld1 = chan->numLinesFld1;
            chan->numEvents = chan->numLines;
            chan->mergeFlds = TRUE;  
        }else {            
            /* these two asserts make sure that total transfer sizes of */
            /* both the whole frame and the first field are multiples   */
            /* of the threshold                                         */
            assert(((chan->yPitch*chan->numLinesFld1)/(chan->yThrld << 3)) 
                *(chan->yThrld << 3) == (chan->yPitch*chan->numLinesFld1));
            assert(((chan->yPitch*chan->numLines)/(chan->yThrld << 3)) 
                *(chan->yThrld << 3) == (chan->yPitch*chan->numLines));
            chan->numEventsFld1 = 
                chan->yPitch * chan->numLinesFld1 / (chan->yThrld << 3);
            chan->numEvents = 
                chan->yPitch * chan->numLines / (chan->yThrld << 3);
            chan->mergeFlds = FALSE;
        }                    
        if(params->dmode & _VPORT_MASK_RAW) {
            chan->cThrld = 0;
        }    
        else {
            chan->cThrld = (chan->yThrld + 1) >> 1;
        }    
        base[_VP_VDTHRLD_OFFSET] = 
            VP_VDTHRLD_RMK(chan->yThrld,params->incPix,chan->yThrld);
        base[_VP_VDDISPEVT_OFFSET] = 
            VP_VDDISPEVT_RMK((chan->numEvents-chan->numEventsFld1), 
            chan->numEventsFld1 );  

        
        chan->mode = params->dmode;
        chan->status |= _VPORT_CFGED;
    }
    return IOM_COMPLETED;

}


/*
 *  ======== displayEdmaISR ========
 */
Int frame = 0;
Int totalFrame = 0;
static void displayEdmaISR(tcc) 
{
    Int i;
    FVID_Frame *viop, *curViop;      
    
    
    /* find out the source of the edma interrupt */
    for(i = 0; i < _VP_PORT_CNT; i ++) {      
        _VPORT_ChanObj* chan = &chanObjs[i];
        if((chan->status & _VPORT_READY) && tcc == chan->tcc[0]){
            totalFrame ++;
            /* make sure all transfers are completed */
            if(!(chan->mode & _VPORT_MASK_RAW)) {
                while(! EDMA_intTest(chan->tcc[1]));
                EDMA_intClear(chan->tcc[1]);
                while(! EDMA_intTest(chan->tcc[2]));
                EDMA_intClear(chan->tcc[2]);
            }
            if(chan->mergeFlds){
                /* 1st field is being captured, update */
                /* the rld to point to the 2nd field   */
                /* of the current frame, which is the nextViop */
                EDMA_RSETH(chan->hEdma[0], SRC, 
                    chan->nextViop->frame.iFrm.y1);
                EDMA_RSETH(chan->hRld[0], SRC, 
                    chan->nextViop->frame.iFrm.y1);
                EDMA_RSETH(chan->hRld[1], SRC, 
                    chan->nextViop->frame.iFrm.y2);
                if(!(chan->mode & _VPORT_MASK_RAW)){
                    EDMA_RSETH(chan->hEdma[1], SRC, 
                        chan->nextViop->frame.iFrm.cb1);
                    EDMA_RSETH(chan->hEdma[2], SRC, 
                        chan->nextViop->frame.iFrm.cr1);
                    EDMA_RSETH(chan->hRld[2], SRC, 
                        chan->nextViop->frame.iFrm.cb1);     
                    EDMA_RSETH(chan->hRld[4], SRC, 
                        chan->nextViop->frame.iFrm.cr1);                         
                    EDMA_RSETH(chan->hRld[3], SRC, 
                        chan->nextViop->frame.iFrm.cb2);     
                    EDMA_RSETH(chan->hRld[5], SRC, 
                        chan->nextViop->frame.iFrm.cr2);                         
                }
            }/*if(chan->mergeFlds){*/
            /* update the reload address */
            curViop = chan->curViop;
            chan->curViop = chan->nextViop;
            if((viop = (FVID_Frame *)QUE_dequeue(&chan->qIn))
                != (FVID_Frame *)&chan->qIn) {
                /* queue IS not empty */
                chan->nextViop = viop;
            }else {
                chan->queEmpty = TRUE;
            }
            if(!chan->mergeFlds) {
                EDMA_RSETH(chan->hRld[0], SRC, 
                    chan->nextViop->frame.iFrm.y1);
                if(! (chan->mode & _VPORT_MASK_RAW)){
                    EDMA_RSETH(chan->hRld[1], SRC, 
                        chan->nextViop->frame.iFrm.cb1);
                    EDMA_RSETH(chan->hRld[2], SRC, 
                        chan->nextViop->frame.iFrm.cr1);
                }
            }/* if(!chan->mergeFlds) {*/
            
            if(curViop != chan->curViop) {
                if(chan->packetIOM != INV) {
                    /* call the channel's callback function */
                    *(void **)chan->packetIOM->addr = curViop;             
                    chan->packetIOM->size = sizeof(FVID_Frame);
                    chan->cbFxn((Ptr)chan->cbArg, chan->packetIOM);  
                    chan->packetIOM = INV;
                }else {
                    QUE_enqueue(&chan->qOut,curViop);
                }
            }/*if(curViop != chan->curViop) {*/  
            else {
                frame ++;
            }      
        }/*if((chan->status & READY) && tcc == chan->tcc[0]){*/
    } /*for(i = 0; i <_VP_PORT_CNT; i++) {  */
}


/*
 *  ======== displayISR ========
 */
static void displayISR(int portNum)
{
    volatile Int *base =  
        (volatile Int *)chanObjs[portNum].base;
    Int vpis = base[_VP_VPIS_OFFSET];
    Int mask = vpis & chanObjs[portNum].vIntMask;
        
    if(mask && chanObjs[portNum].vIntFxn != INV) {
        chanObjs[portNum].vIntFxn(chanObjs[portNum].cbArg, mask);
    }
    /* clear interrupts that has been handled */
    base[_VP_VPIS_OFFSET] |= vpis;
}  


/*
 *  ======== _displayStart ========
 *  start video display
 */
static Int _displayStart(Ptr chanp)
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj *)chanp;
    volatile Int* base = (volatile Int *)chan->base;  
                                      
    /* enable port and display */
    base[_VP_VPCTL_OFFSET] |= VP_VPCTL_VPHLT_CLEAR << _VP_VPCTL_VPHLT_SHIFT;
    base[_VP_VDCTL_OFFSET] |= VP_VDCTL_VDEN_ENABLE << _VP_VDCTL_VDEN_SHIFT;
    /* wait for display counters and control signals to sync up */
    TSK_sleep(100);
    base[_VP_VDCTL_OFFSET] &= ~ (_VP_VDCTL_BLKDIS_MASK);
    /* enable interrupt */
    base[_VP_VPIE_OFFSET] |= VP_VPIE_VIE_ENABLE << _VP_VPIE_VIE_SHIFT;     
    IRQ_clear(IRQ_EVT_VINT0 + chan->portNum);
    IRQ_enable(IRQ_EVT_VINT0 + chan->portNum);
    return IOM_COMPLETED;
}        


/*
 *  ======== _displayStop ========
 *  stop video display
 */
static Int _displayStop(Ptr chanp)
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj *)chanp;
    volatile Int* base = (volatile Int *)chan->base;    
    
    
    base[_VP_VDCTL_OFFSET] &= ~  (VP_VDCTL_VDEN_ENABLE << _VP_VDCTL_VDEN_SHIFT);
    return IOM_COMPLETED;
}


/*
 *  ======== _dundRecover ========
 *  force recover from display under-run
 */
static Int _dundRecover(Ptr chanp)
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj *)chanp;
    Int i;
    volatile Int* base = (volatile Int *)chan->base;  
    
    
    /* disable under run interrupt */
    base[_VP_VPIE_OFFSET] &= ~ (_VP_VPIE_DUND_MASK);
    /* clear any pending under-run interrupt */
    base[_VP_VPIS_OFFSET] &= ~ (_VP_VPIS_DUND_MASK);

     /* block display events */
    base[_VP_VDCTL_OFFSET] |= _VP_VDCTL_BLKDIS_MASK;
    /* Disable the edmas before settings them up */
    EDMA_disableChannel(chan->hEdma[1]);
    EDMA_clearChannel(chan->hEdma[1]);
    EDMA_disableChannel(chan->hEdma[2]);
    EDMA_clearChannel(chan->hEdma[2]);
    EDMA_intDisable(chan->tcc[0]);
    EDMA_disableChannel(chan->hEdma[0]);            
    EDMA_clearChannel(chan->hEdma[0]);
    

    /* set up DMA parameters again */
    EDMA_RSETH(chan->hEdma[0], SRC, chan->curViop->frame.iFrm.y1);
    EDMA_RSETH(chan->hEdma[0], CNT, EDMA_CNT_RMK(chan->numEvents - 1, 
        chan->yThrld << 1));
    if(!(chan->mode & _VPORT_MASK_RAW)){
        EDMA_RSETH(chan->hEdma[1], SRC, chan->curViop->frame.iFrm.cb1);
        EDMA_RSETH(chan->hEdma[2], SRC, chan->curViop->frame.iFrm.cr1);
        EDMA_RSETH(chan->hEdma[1], CNT, 
            EDMA_CNT_RMK(chan->numEvents - 1, chan->cThrld << 1));
        EDMA_RSETH(chan->hEdma[2], CNT, 
            EDMA_CNT_RMK(chan->numEvents - 1, chan->cThrld << 1));
   }    
   
   /* enable the edma events again before settings them up */
   EDMA_enableChannel(chan->hEdma[1]);
   EDMA_enableChannel(chan->hEdma[2]);          
   
   EDMA_intEnable(chan->tcc[0]);
   EDMA_enableChannel(chan->hEdma[0]);

   base[_VP_VDCTL_OFFSET] |= VP_VDCTL_VDEN_ENABLE << _VP_VDCTL_VDEN_SHIFT;
   for(i = 0; i < 10000; i ++);
   base[_VP_VDCTL_OFFSET] &= ~(_VP_VDCTL_BLKDIS_MASK);
   /* re-enable under run interrupt */
   base[_VP_VPIE_OFFSET] |= _VP_VPIE_DUND_MASK;
   return IOM_COMPLETED;

}


/*
 *  ======== _setVIntCb ========
 *  set video port interrutp call-back
 */
static Int _setVIntCb(Ptr chanp, Ptr args)
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj *)chanp;
    volatile Int* base = (volatile Int *)chan->base;  
	VPORT_VIntCbParams* vIntCbParams = (void *)args;
    Int mask = vIntCbParams->vIntMask;
    Uns vif2 = 0, vInt2 = 0, vif1 = 0, vInt1 = 0;


    chan->vIntMask = mask;
    /* check to see if vertical interrupt is enabled */
    if(mask |= VPORT_INT_VINT1) {
        vif1 = 1;
        vInt1 = vIntCbParams->vIntLine;
    }
    if(mask |= VPORT_INT_VINT2) {
        vif2 = 1;
        vInt2 = vIntCbParams->vIntLine;    
    }
    base[_VP_VDVINT_OFFSET] = VP_VDVINT_RMK(vif2, 
        vInt2, vif1, vInt1);
    if(mask) {
        mask |= 1; /* turn on video port interrupt */
        IRQ_map(IRQ_EVT_VINT0 + chan->portNum, vIntCbParams->irqId);    
        HWI_dispatchPlug(vIntCbParams->irqId, (Fxn)displayISR, -1, NULL);
        IRQ_disable(IRQ_EVT_VINT0 + chan->portNum);
        IRQ_clear(IRQ_EVT_VINT0 + chan->portNum);
    }
    base[_VP_VPIE_OFFSET] |= mask;  /* register write */    
    chan->vIntFxn =  vIntCbParams->vIntCbFxn;       
    return IOM_COMPLETED;
}



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av在线不卡网| 精品视频1区2区3区| 伊人色综合久久天天人手人婷| 欧美日本一区二区三区| 成人va在线观看| 麻豆国产欧美一区二区三区| 亚洲欧美日韩一区二区| 2023国产精品| 91精品国产福利| 欧美性欧美巨大黑白大战| 国产一区二区视频在线| 亚洲成人动漫一区| 亚洲永久精品大片| 亚洲色图清纯唯美| 国产日韩欧美电影| 久久久久久久久久久黄色| 日韩一级视频免费观看在线| 欧洲亚洲精品在线| 92国产精品观看| 成人教育av在线| 丁香亚洲综合激情啪啪综合| 久久99国产精品成人| 秋霞av亚洲一区二区三| 午夜精品久久久| 午夜欧美2019年伦理| 一区二区三区四区乱视频| 亚洲欧洲中文日韩久久av乱码| 久久久www成人免费毛片麻豆| 欧美一区二区三区不卡| 欧美精品丝袜中出| 欧美日韩一二三区| 欧美色图天堂网| 91久久精品一区二区三| 一本到不卡免费一区二区| 色综合久久综合网97色综合| 99久久精品免费观看| 91在线观看高清| 色女孩综合影院| 色8久久人人97超碰香蕉987| 在线精品亚洲一区二区不卡| 欧美日韩一区二区电影| 在线播放中文字幕一区| 日韩一二三区不卡| 久久午夜老司机| 中文字幕电影一区| 最新热久久免费视频| 亚洲青青青在线视频| 亚洲在线视频一区| 手机精品视频在线观看| 极品少妇xxxx精品少妇偷拍| 国产永久精品大片wwwapp| 国产大片一区二区| av毛片久久久久**hd| 色综合久久综合网97色综合| 欧美日韩精品福利| 2014亚洲片线观看视频免费| 国产喂奶挤奶一区二区三区| 国产精品第五页| 亚洲一级二级在线| 日本成人在线看| 国产风韵犹存在线视精品| 91亚洲精品乱码久久久久久蜜桃| 一本色道久久综合精品竹菊| 欧美猛男超大videosgay| 日韩视频一区在线观看| 国产欧美一区视频| 一区二区三区波多野结衣在线观看| 亚洲一区二区三区爽爽爽爽爽| 婷婷开心激情综合| 国产精品一区二区三区四区| 91污在线观看| 日韩欧美中文一区二区| 国产精品乱子久久久久| 日韩中文字幕亚洲一区二区va在线 | 91精品国产综合久久精品app| 日韩午夜在线影院| 国产精品欧美一级免费| 亚洲va韩国va欧美va精品| 另类中文字幕网| 不卡一二三区首页| 91精品啪在线观看国产60岁| 国产色婷婷亚洲99精品小说| 亚洲最新在线观看| 狠狠色狠狠色综合系列| 色天使久久综合网天天| 2014亚洲片线观看视频免费| 一区二区三区日韩在线观看| 久久激情综合网| 91婷婷韩国欧美一区二区| 欧美xxx久久| 亚洲午夜一二三区视频| 国产suv精品一区二区6| 欧美人妖巨大在线| 一区免费观看视频| 国内精品免费**视频| 欧美日韩视频专区在线播放| 中文字幕av在线一区二区三区| 亚洲成a人片在线不卡一二三区| 国产精品主播直播| 91精品欧美综合在线观看最新 | 色婷婷一区二区| 欧美成人a∨高清免费观看| 亚洲精品美国一| 国产成人精品免费在线| 欧美一区二区三区视频免费 | 99精品欧美一区| 欧美zozozo| 午夜精品福利一区二区三区蜜桃| 成人动漫中文字幕| 久久这里只有精品6| 日本va欧美va精品| 欧美三级在线视频| 亚洲裸体xxx| 91在线视频免费91| 国产精品人妖ts系列视频| 国产电影精品久久禁18| 久久综合国产精品| 麻豆国产精品777777在线| 欧美高清视频一二三区| 亚洲一区二区美女| 色综合久久久久| 伊人开心综合网| 色av一区二区| 亚洲综合视频在线| 欧洲一区二区三区免费视频| 亚洲欧美欧美一区二区三区| 91在线视频在线| 亚洲欧美另类在线| 色综合天天在线| 亚洲男同1069视频| 91成人免费电影| 亚洲一区二区偷拍精品| 日本精品一区二区三区四区的功能| 中文字幕永久在线不卡| 9久草视频在线视频精品| 国产精品久久久久影院亚瑟| 国产成人综合亚洲91猫咪| 欧美高清在线一区二区| 成人网在线播放| 亚洲视频在线一区| 色94色欧美sute亚洲线路二| 亚洲国产一区二区三区 | 久久久久国色av免费看影院| 日韩精彩视频在线观看| 欧美一区二区三区色| 狠狠色丁香九九婷婷综合五月| 26uuu精品一区二区三区四区在线| 国内精品伊人久久久久av影院 | 亚洲国产精品成人综合| 成人午夜碰碰视频| 亚洲色图欧美激情| 欧美人妖巨大在线| 国产呦萝稀缺另类资源| 国产精品国产三级国产| 日本久久电影网| 日韩精品五月天| 蜜桃视频在线观看一区| 日韩精品在线看片z| 国产成人小视频| 亚洲精品国产精品乱码不99| 欧美日韩国产大片| 精品一区二区三区影院在线午夜| 久久你懂得1024| 色婷婷精品大在线视频| 日韩国产欧美在线视频| 国产欧美视频在线观看| 欧美在线色视频| 国产一区二区三区综合| 亚洲激情自拍偷拍| 欧美不卡一区二区三区四区| 不卡的av在线播放| 奇米色一区二区| 国产精品丝袜久久久久久app| 欧美三级电影在线看| 国产一区二区三区视频在线播放| 日韩美女久久久| 精品国产三级a在线观看| 97久久精品人人做人人爽 | 免费在线一区观看| 国产精品麻豆网站| 日韩午夜激情免费电影| 91在线码无精品| 另类综合日韩欧美亚洲| 亚洲精品视频在线观看网站| 欧美不卡123| 欧美亚洲动漫精品| 国产成人午夜视频| 三级在线观看一区二区| 国产精品国产自产拍在线| 日韩网站在线看片你懂的| 色综合激情五月| 国产不卡视频一区| 秋霞电影一区二区| 一区二区三区在线视频播放 | 久久久精品tv| 午夜精品一区二区三区三上悠亚| 国产亚洲精品久| 欧美日韩视频一区二区| 91在线视频免费91| 懂色av一区二区三区蜜臀|