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

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

?? vportdis.c

?? TI公司DSP的VP口用于顯示高清視頻流或高清圖片的驅動程序源碼!
?? C
?? 第 1 頁 / 共 3 頁
字號:
            VP_VDVSYNS2_RMK(params->vSyncYStartFld2, params->vSyncXStartFld2);
        base[_VP_VDVSYNE2_OFFSET]  = 
            VP_VDVSYNE2_RMK(params->vSyncYStopFld2, params->vSyncXStopFld2);  

        base[_VP_VDCLIP_OFFSET]    = 
            VP_VDCLIP_RMK(params->cClipHigh, params->cClipLow,
            params->yClipHigh, params->yClipLow);
        base[_VP_VDDEFVAL_OFFSET]  = params->yDefVal |
           (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 ========
 */
static void displayEdmaISR(tcc) 
{
    Int i;
    FVID_Frame *viop, *curViop;      
    Int offset;
    
    
    /* 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] || tcc == chan->tcc[1])){

            /* re-sync tcc with activeEDMARlds */
            /* they may be out of sync after interrupt over-run */
            /* e.g. execution is halted at break-point */
            chan->nextEDMARlds = (tcc == chan->tcc[0]) ? 0 : 1;
            offset = chan->nextEDMARlds << 1;
            /* update the current and next viop pointers */
            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;
            }

            /* Update the EDMA reload entry  */
            if(chan->mergeFlds){
                EDMA_RSETH(chan->hRld[offset], SRC, 
                    chan->nextViop->frame.iFrm.y1);
                EDMA_RSETH(chan->hRld[offset + 1], SRC, 
                    chan->nextViop->frame.iFrm.y2);
                if(!(chan->mode & _VPORT_MASK_RAW)){
                    EDMA_RSETH(chan->hRld[4 + offset], SRC, 
                        chan->nextViop->frame.iFrm.cb1);     
                    EDMA_RSETH(chan->hRld[5 + offset], SRC, 
                        chan->nextViop->frame.iFrm.cb2);                         
                    EDMA_RSETH(chan->hRld[8 + offset], SRC, 
                        chan->nextViop->frame.iFrm.cr1);     
                    EDMA_RSETH(chan->hRld[9 + offset], SRC, 
                        chan->nextViop->frame.iFrm.cr2);                         
                }
            } else {
                EDMA_RSETH(chan->hRld[offset], SRC, 
                    chan->nextViop->frame.iFrm.y1);
                if(! (chan->mode & _VPORT_MASK_RAW)){
                    EDMA_RSETH(chan->hRld[offset + 4], SRC, 
                        chan->nextViop->frame.iFrm.cb1);
                    EDMA_RSETH(chan->hRld[offset + 8], 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) {*/  
        }/*if((chan->status & READY) && tcc == chan->tcc){*/
    } /*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;  
    volatile Int stat;
    volatile Int i = 0;
                                      
    /* 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 */
    do {
        stat = base[_VP_VDSTAT_OFFSET];
        i ++ ;
    }while(!(stat & 0x70000000) && i < 1000000);
    base[_VP_VDSTAT_OFFSET] = stat;
    
    do {
        stat = base[_VP_VDSTAT_OFFSET];
        i ++;
    }while(!(stat & 0x70000000) && i < 1000000);
    base[_VP_VDSTAT_OFFSET] = stat;
    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;          
    Int stat;
    Int numEvents;
    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 */
    if(!(chan->mode & _VPORT_MASK_RAW)){
        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_intDisable(chan->tcc[1]);
    EDMA_disableChannel(chan->hEdma[0]);            
    EDMA_clearChannel(chan->hEdma[0]);
    

    if(chan->mergeFlds) {
        numEvents = chan->numEventsFld1;        
    } else {
        numEvents = chan->numEvents;
    }
    /* 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(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(numEvents - 1, chan->cThrld << 1));
        EDMA_RSETH(chan->hEdma[2], CNT, 
            EDMA_CNT_RMK(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_intEnable(chan->tcc[1]);
    EDMA_enableChannel(chan->hEdma[0]);

    base[_VP_VDCTL_OFFSET] |= VP_VDCTL_VDEN_ENABLE << _VP_VDCTL_VDEN_SHIFT;
    /* wait for display counters and control signals to sync up */
    do {
        stat = base[_VP_VDSTAT_OFFSET];
        i ++ ;
    }while(!(stat & 0x70000000) && i < 1000000);
    base[_VP_VDSTAT_OFFSET] = stat;
    
    do {
        stat = base[_VP_VDSTAT_OFFSET];
        i ++;
    }while(!(stat & 0x70000000) && i < 1000000);

    base[_VP_VDCTL_OFFSET] &= ~(_VP_VDCTL_BLKDIS_MASK);
    /* re-enable under run interrupt */
    base[_VP_VPIE_OFFSET] |= _VP_VPIE_DUND_MASK;
    return IOM_COMPLETED;

}

/*
 *  ======== _getlastActiveLine ========
 *  get the line number of the last active line
 */
static Int _getlastActiveLine(VPORTDIS_Params* params)
{
    int lastActiveLine = -1;
    switch (params->fldOp){
        case VPORT_FLDOP_FRAME:
        case VPORT_FLDOP_FLD2:  
            lastActiveLine = params->vBlnkYStopFld2 
              + params->imgVOffsetFld2
              + params->imgVSizeFld2;
            
       break;                      
        case VPORT_FLDOP_FLD1:
        case VPORT_FLDOP_PROGRESSIVE:
            lastActiveLine = params->vBlnkYStopFld1 
              + params->imgVOffsetFld1
              + params->imgVSizeFld1;
        break;        
    }
    return lastActiveLine;
}    


/*
 *  ======== _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;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产精选| 色999日韩国产欧美一区二区| 亚洲一区二区在线观看视频| 中文字幕一区二区三区av| 91精品国产入口| caoporm超碰国产精品| 男人的j进女人的j一区| 亚洲精品欧美在线| 国产精品视频你懂的| 久久一区二区视频| 欧美一区二区三区视频免费播放| 91福利视频久久久久| av不卡一区二区三区| 成人激情av网| 99久久综合狠狠综合久久| 成人成人成人在线视频| 国产成人免费视频精品含羞草妖精| 六月丁香婷婷色狠狠久久| 精彩视频一区二区| 狠狠色2019综合网| 国产美女精品人人做人人爽| 国产老妇另类xxxxx| 成人午夜又粗又硬又大| 99久久综合国产精品| 欧美综合亚洲图片综合区| 欧美在线|欧美| 91精品国产91久久久久久最新毛片| 欧美久久久久久久久中文字幕| 56国语精品自产拍在线观看| 精品久久免费看| 1024成人网| 亚洲成人激情av| 国产精品一线二线三线| 91一区在线观看| 欧美一级黄色录像| 中文字幕av免费专区久久| 一区二区三区中文免费| 久久国产福利国产秒拍| 色综合色综合色综合| 日韩一区二区免费电影| 亚洲天堂福利av| 激情伊人五月天久久综合| 日本精品一区二区三区高清 | 一本大道av一区二区在线播放| 欧美三级视频在线| 国产精品色婷婷久久58| 免费看黄色91| 91成人免费电影| 中文字幕精品在线不卡| 午夜精品免费在线观看| 成人福利在线看| 精品国产3级a| 美国毛片一区二区三区| 欧美性生活影院| 国产精品传媒入口麻豆| 国产一区亚洲一区| 日韩欧美国产小视频| 日韩不卡一区二区| 欧美日韩卡一卡二| 一区二区三区日本| 成人黄色a**站在线观看| 久久久久久久久久久电影| 另类调教123区| 精品国产精品网麻豆系列| 日韩综合在线视频| 欧美α欧美αv大片| 亚洲.国产.中文慕字在线| 欧美优质美女网站| 一区二区三区在线免费视频| 91久久久免费一区二区| 亚洲三级电影网站| 在线观看亚洲精品视频| 一区二区三区资源| 欧美在线一二三四区| 亚洲国产另类av| 欧美一卡二卡三卡四卡| 久久99国产精品成人| 国产无人区一区二区三区| 国产高清亚洲一区| 亚洲视频一区在线| 在线电影国产精品| 国产精品99久久久| 亚洲三级在线观看| 91精品蜜臀在线一区尤物| 久草这里只有精品视频| 国产精品丝袜久久久久久app| 97se亚洲国产综合自在线 | 国产一区二区三区四| 中文字幕字幕中文在线中不卡视频| 91福利国产精品| 国产一二三精品| 亚洲高清一区二区三区| 久久精品男人天堂av| 欧美剧情电影在线观看完整版免费励志电影| 日韩三级视频中文字幕| av激情综合网| 久久se精品一区二区| 亚洲激情图片小说视频| 日韩在线播放一区二区| 亚洲免费在线视频| 中文字幕国产精品一区二区| 日韩女优av电影在线观看| 在线观看成人免费视频| av中文一区二区三区| 国产九色精品成人porny| 日本午夜一本久久久综合| 亚洲欧美视频在线观看| 久久久精品蜜桃| 2024国产精品| 日韩一区二区三区高清免费看看| 色婷婷av一区| 欧美四级电影在线观看| 色网站国产精品| 91色视频在线| 在线精品视频小说1| 色哟哟一区二区在线观看| 91黄色免费看| 欧美色视频在线| 666欧美在线视频| 日韩一区二区三区电影| 精品国产髙清在线看国产毛片| 日韩欧美一区二区不卡| 国产亚洲污的网站| 国产三级欧美三级日产三级99| 久久综合久久综合九色| 亚洲国产成人一区二区三区| 国产精品久久久久久久久图文区 | 亚洲激情自拍偷拍| 日韩精品成人一区二区三区| 日本亚洲三级在线| 波多野结衣一区二区三区| 99re成人在线| 欧美一区二区在线视频| 久久一二三国产| 亚洲免费av高清| 捆绑调教美女网站视频一区| 国产黄色91视频| 欧美日本在线播放| 久久久亚洲精品石原莉奈| 1区2区3区国产精品| 奇米精品一区二区三区在线观看 | 国产日韩三级在线| 亚洲第一福利视频在线| 国产一区二区在线电影| 欧美午夜视频网站| 国产亚洲综合av| 视频一区视频二区中文| 91亚洲精品一区二区乱码| 91精品国产综合久久香蕉的特点| 国产精品美女一区二区在线观看| 日一区二区三区| 色视频成人在线观看免| 国产日韩精品一区二区浪潮av | 99久久久精品免费观看国产蜜| 91精品国产综合久久福利| 中文字幕av一区二区三区高| 日本不卡视频在线观看| 91国偷自产一区二区开放时间| 精品国产乱码久久久久久闺蜜| 日本怡春院一区二区| 欧美日韩一本到| 日日摸夜夜添夜夜添国产精品| 91福利在线观看| 亚洲在线一区二区三区| 一本一道波多野结衣一区二区| 国产亚洲综合在线| 国产成人小视频| 中文字幕第一页久久| 国产精品一区二区免费不卡| 久久综合给合久久狠狠狠97色69| 麻豆成人在线观看| 精品国精品国产| 国产一区二区精品久久| 久久伊人中文字幕| 国产成人精品亚洲午夜麻豆| 国产精品水嫩水嫩| 色噜噜偷拍精品综合在线| 日日夜夜精品视频免费| 欧美成人一区二区| 成人网页在线观看| 亚洲一区在线播放| 91精品国产91久久综合桃花 | 国内外成人在线视频| 久久久久久黄色| 99riav久久精品riav| 五月天中文字幕一区二区| 日韩精品一区二区三区视频| 国产999精品久久久久久绿帽| 中文字幕在线免费不卡| 欧美日韩精品欧美日韩精品一| 精品影视av免费| 国产精品网站一区| 欧美男男青年gay1069videost| 国产精品99久久久久久有的能看| 中文字幕在线观看一区二区| 日韩免费性生活视频播放| 99精品久久久久久| 国内一区二区视频| 亚洲高清视频的网址| 中文字幕制服丝袜一区二区三区 |