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

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

?? vportcap.c

?? 使用DM642 來進(jìn)行scaling 有說明檔
?? C
?? 第 1 頁 / 共 3 頁
字號:
        }        
    }    
    if(nextViopChanged) {
        /* now modify the EDMA rld entries */
        if(chan->interlaced){
            EDMA_RSETH(chan->hRld[offset], DST, 
                chan->nextViop->frame.iFrm.y1);
            EDMA_RSETH(chan->hRld[offset + 1], DST, 
                chan->nextViop->frame.iFrm.y2);
            EDMA_RSETH(chan->hRld[4 + offset], DST, 
                chan->nextViop->frame.iFrm.cb1);     
            EDMA_RSETH(chan->hRld[5 + offset], DST, 
                chan->nextViop->frame.iFrm.cb2);                         
            EDMA_RSETH(chan->hRld[8 + offset], DST, 
                chan->nextViop->frame.iFrm.cr1);     
            EDMA_RSETH(chan->hRld[9 + offset], DST, 
                chan->nextViop->frame.iFrm.cr2);              
        } else {
            EDMA_RSETH(chan->hRld[offset], DST, 
                chan->nextViop->frame.iFrm.y1);
            EDMA_RSETH(chan->hRld[4 + offset], DST, 
                chan->nextViop->frame.iFrm.cb1);     
            EDMA_RSETH(chan->hRld[8 + offset], DST, 
                chan->nextViop->frame.iFrm.cr1);                         
        } /* if(chan->interlaced) */            
    }    
    IRQ_globalRestore(gie);
    return retVal;
}


/*
 *  ======== _captureEdmaISR ========
 *  EDMA ISR
 */            
static void captureEdmaISR(Int tcc) 
{
    Int i, j;
    Int offset;
    FVID_Frame *viop, *curViop;      

    /* find out the source of the edma interrupt */
    for(j = 0; j < _VP_PORT_CNT; j ++) {
        for(i = 0; i < _VPORT_CHAN_CNT; i ++ ){ /* loop through two channels */
            _VPORT_ChanObj* chan = &portObjs[j].chanObj[i];    

            if((chan->status & _VPORT_READY)
              && (tcc == chan->tcc[0] || tcc == chan->tcc[1])){

                if(chan->autoSyncEnable) {
                   _autoSync(chan);
                }

                /* 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;             
                
                /* update the most recent viop */
                if(curViop != chan->mrViop  && chan->mrViop != INV) {
                      QUE_enqueue(&chan->qIn, chan->mrViop);
                } 
                chan->mrViop = curViop;

                if((viop = (FVID_Frame *)QUE_dequeue(&chan->qIn))
                    !=(FVID_Frame *)&chan->qIn) {
                    /* queue IS not empty */
                    chan->nextViop = viop;
                }else {
                    if(chan->packetIOM == INV) {
                        /* in queue is empty, but no request is pending */
                        /* recycle the current VIOP back                */
                        /* but still set it as the most recent VIOP     */
                        chan->nextViop = curViop;
                    }
                    chan->queEmpty = TRUE;
                }                              

                /* call the channel's callback function */
                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->packetIOM->status = IOM_COMPLETED;
                         chan->cbFxn((Ptr)chan->cbArg, chan->packetIOM);   
                         chan->packetIOM = INV;
                         chan->mrViop = INV;
                    }else if(chan->queEmpty){
                        chan->nextViop = chan->mrViop;
                    }
                }else {
                    chan->mrViop = INV;
                }        
                /* Update the EDMA reload entry  */
                if(chan->interlaced){
                    EDMA_RSETH(chan->hRld[offset], DST, 
                        chan->nextViop->frame.iFrm.y1);
                    EDMA_RSETH(chan->hRld[offset + 1], DST, 
                        chan->nextViop->frame.iFrm.y2);
                    EDMA_RSETH(chan->hRld[4 + offset], DST, 
                        chan->nextViop->frame.iFrm.cb1);     
                    EDMA_RSETH(chan->hRld[5 + offset], DST, 
                        chan->nextViop->frame.iFrm.cb2);                         
                    EDMA_RSETH(chan->hRld[8 + offset], DST, 
                        chan->nextViop->frame.iFrm.cr1);     
                    EDMA_RSETH(chan->hRld[9 + offset], DST, 
                        chan->nextViop->frame.iFrm.cr2);                         
                }else {
                    EDMA_RSETH(chan->hRld[offset], DST, 
                        chan->nextViop->frame.iFrm.y1);
                    EDMA_RSETH(chan->hRld[offset + 4], DST, 
                        chan->nextViop->frame.iFrm.cb1);
                    EDMA_RSETH(chan->hRld[offset + 8], DST, 
                        chan->nextViop->frame.iFrm.cr1);
                }/* if(chan->interlaced) {*/


            }    
        }
    }
}


/*
 *  ======== _configCh ========
 *  configure video port channel settings
 */
static Int _configCh(
        Ptr                 chanp, 
        VPORTCAP_Params  *params
        )
{
    _VPORT_ChanObj* chan= (_VPORT_ChanObj *)chanp;
    volatile Int vpCtl, vcCtl, fld1Strt, fld2Strt, fld1Stop, fld2Stop;
    volatile Int* base = (volatile Int *)chan->base;                         
    Int retVal = IOM_COMPLETED;
    Int numPixels, numLines, numCPixels;  
    
    
    if(chan->status & _VPORT_OPENED) { 
        chan->vIntMask = 0;
        QUE_new(&chan->qIn);
        chan->vIntFxn = (VPORT_IntCallBack)INV;
        chan->queEmpty = FALSE;   
        chan->mrViop = INV;
        chan->packetIOM = INV;     
        chan->vIntCbArg = (Int)INV;
        chan->bufSz = 0;
        chan->autoSyncEnable = params->autoSyncEnable;

        
        /* configure channel A capture settings  */
        vcCtl = VP_VCACTL_RMK(0,1,0,params->fldInv, 
            params->extCtl, params->fldDect, params->vCtRst,
            params->hCtRst, 0, params->bpk10Bit, 0, 0, 
            params->resmpl,params->scale,1,
            ((params->fldOp & 4) >> 2), 
            ((params->fldOp & 2) >> 1), 
            (params->fldOp & 1), 
            params->cmode);

        fld1Strt = params->fldXStrt1 + (params->fldYStrt1 << 16);
        fld1Stop = params->fldXStop1 + (params->fldYStop1 << 16);
        fld2Strt = params->fldXStrt2 + (params->fldYStrt2 << 16);
        fld2Stop = params->fldXStop2 + (params->fldYStop2 << 16);
        if(params->fldOp == VPORT_FLDOP_FRAME) {
            assert(params->fldXStop1 == params->fldXStop2);
            assert(params->fldXStrt1 == params->fldXStrt2);
        }   
        /* reset channel */
        base[_VP_VCACTL_OFFSETA] |=  
          VP_VCACTL_RSTCH_RESET << _VP_VCACTL_RSTCH_SHIFT;
        _delay(2000);
        base[_VP_VCACTL_OFFSETA]   = vcCtl;
        base[_VP_VCASTRT1_OFFSETA] = fld1Strt;
        base[_VP_VCASTOP1_OFFSETA] = fld1Stop;
        base[_VP_VCASTRT2_OFFSETA] = fld2Strt;
        base[_VP_VCASTOP2_OFFSETA] = fld2Stop;
        numPixels = params->fldXStop1 - params->fldXStrt1 + 1;/* line size */
        numLines = 0;
        
        if(params->fldOp != VPORT_FLDOP_FLD2){
            numLines += params->fldYStop1 - params->fldYStrt1 + 1;
        }
        chan->numLinesFld1 = numLines;
        chan->numTotalLinesFld1 = params->fldYStop1;
        
        if(params->fldOp == VPORT_FLDOP_FLD2
          || params->fldOp == VPORT_FLDOP_FRAME){
            numLines += params->fldYStop2 - params->fldYStrt2 + 1;
        }
        chan->resmpl = params->resmpl;
        chan->scale = params->scale;
        chan->numLines = numLines;
        numPixels >>= params->scale;
        numCPixels = numPixels >> 1;
        /* set both field1 and field2 threshold to the line size */
        chan->numPixels = numPixels;
        chan->lastLineNum = chan->numLines;        
        if(params->cmode & _VPORT_MASK_10BIT){
            /* 10-bit BT.656 or 20-bit Y/C mode */
            if( params->bpk10Bit == VPORTCAP_BPK_10BIT_ZERO_EXTENDED
             || params->bpk10Bit == VPORTCAP_BPK_10BIT_SIGN_EXTENDED){
                chan->yPitch = (numPixels * 2 + 7) & (~ 7);
                chan->cPitch = (numCPixels * 2 + 7) & (~ 7);
            }else {
                chan->yPitch = (numPixels * 4 / 3 + 7) & (~ 7);
                chan->cPitch = (numCPixels* 4 / 3 + 7) & (~ 7);
            }
        } else {/* 8-bit BT.656 or 16-bit Y/C mode */
            chan->yPitch = (numPixels + 7) & (~ 7);
            chan->cPitch = (numCPixels + 7) & (~ 7);
        }     
        chan->yThrld = params->thrld;
        chan->interlaced = TRUE;  
        if(params->fldOp == VPORT_FLDOP_FRAME && params->mergeFlds) { 
            /* merge field comments */
            /* frame capture and merge 2 fields into one frame */
            /* set threshold is same as line size */
            chan->yThrld = chan->yPitch >> 3;
            chan->numEventsFld1 = chan->numLinesFld1;
            chan->numEvents = chan->numLines;
        }else {            
            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);
            if(params->fldOp != VPORT_FLDOP_FRAME) {
                chan->interlaced = FALSE;
            }
        }            
        chan->mergeFlds = params->mergeFlds;
        chan->cThrld = (chan->yThrld + 1) >> 1;

        base[_VP_VCATHRLD_OFFSETA] = VP_VCATHRLD_RMK(chan->yThrld,chan->yThrld);
        base[_VP_VCAEVTCT_OFFSETA] = VP_VCAEVTCT_RMK(
            (chan->numEvents-chan->numEventsFld1), chan->numEventsFld1 );  
        
        chan->status|=_VPORT_CFGED;
        retVal = IOM_COMPLETED;
    }    
    return retVal;

}


/*
 *  ======== _configChan ========
 *  configure channel settings
 */
static Int _configChan(Ptr chanp, Ptr args)
{
    VPORTCAP_Params*   params = (VPORTCAP_Params*)args; 

    
    
    /* configure video port channel A/B control register */
    _configCh(chanp, params);

    /* configure EDMA and frame buffer */
    _configTransfer(chanp, params);
    return IOM_COMPLETED;
}


/*
 *  ======== _configPort ========
 *  configure port level registers
 */
static Int _configPort(Ptr chanp, Ptr args)
{
    PortObj* port = (PortObj *)chanp;
    volatile Int *base = (volatile Int *)port->base; 
    /* configure video port control register */
    VPORT_PortParams* portParams = (VPORT_PortParams*)args; 
    
    
    /* enable video port */
    base[_VP_PCR_OFFSET] |= VP_PCR_PEREN_ENABLE << _VP_PCR_PEREN_SHIFT;
                
    /* reset video port */
    base[_VP_VPCTL_OFFSET] |= 
        VP_VPCTL_VPRST_RESET << _VP_VPCTL_VPRST_SHIFT;
    while(base[_VP_VPCTL_OFFSET] & (VP_VPCTL_VPRST_RESET << _VP_VPCTL_VPRST_SHIFT));
    
    base[_VP_VPCTL_OFFSET] = VP_VPCTL_RMK(0,0,0,portParams->vc3Polarity,
        portParams->vc2Polarity,portParams->vc1Polarity,0,0,
        portParams->dualChanEnable);
    
    /* enable video port */
    base[_VP_VPCTL_OFFSET] |= (VP_VPCTL_VPHLT_CLEAR << _VP_VPCTL_VPHLT_SHIFT);
    port->chanObj[0].edcFxns = portParams->edcTbl[0];
    port->chanObj[1].edcFxns = portParams->edcTbl[1];
    
    IRQ_clear(IRQ_EVT_EDMAINT);
    return IOM_COMPLETED;

}


/*
 *  ======== _configTransfer ========
 *  configure channel EDMA settings
 */
static Int _configTransfer(
        Ptr                 chanp, 
        VPORTCAP_Params  *params
        )
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj *)chanp;
    Int i;
    EDMA_Config  cfgEdma;
    Int thrld;
    Int8* curAddr;
    
    if(chan->status & _VPORT_CFGED) {
     
        assert(params->numFrmBufs >= 2 && params->numFrmBufs 
                <= VPORT_MAX_NUM_FRMBUFS);
        QUE_new(&chan->qIn);     
        chan->queEmpty = FALSE;   
        chan->mrViop = INV;
        chan->packetIOM = INV;     
        chan->segId = params->segId;
        
        EDMA_intDisable(chan->tcc[0]);
        EDMA_intDisable(chan->tcc[1]);
        
        if(chan->numFrms == 0) {
            chan->numFrms = params->numFrmBufs;

            /* allocate frame buffer */
            chan->bufSz = chan->yPitch * chan->numLines 
                  + chan->cPitch * chan->numLines * 2;
            for(i = 0; i < chan->numFrms; i ++) {                    
                if((curAddr = MEM_calloc(params->segId,chan->bufSz, 
                    params->alignment)) == MEM_ILLEGAL){
                    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;
                /* 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->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);
                }else {
                    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;            
                }    
            }
        }    
        for(i = 2; i < chan->numFrms; i ++)  {
            /* don't put the first 2 viop into the queue */
            QUE_enqueue(&chan->qIn, (QUE_Handle)&chan->viops[i]);
        }
        chan->curViop = &chan->viops[0];
        chan->nextViop = &chan->viops[1]; 
        for(i = 0; i < _VPORT_NUM_EDMA_CHANS; i ++) {
            Int optFld1 = EDMA_OPT_RMK(
                params->edmaPri,
                EDMA_OPT_ESIZE_32BIT,

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品国产一区二区三区| 久久国产婷婷国产香蕉| 成人理论电影网| 国产人成一区二区三区影院| 国产精品 欧美精品| 欧美韩国日本综合| 91理论电影在线观看| 亚洲成年人影院| 欧美一二三区精品| 国产福利一区在线| 亚洲精品视频自拍| 91麻豆精品国产自产在线| 麻豆一区二区99久久久久| 国产欧美一区二区在线| 色乱码一区二区三区88| 美女视频黄 久久| 欧美大片在线观看| 99久久免费视频.com| 亚洲一区二区不卡免费| 精品国产乱码91久久久久久网站| 国产成人精品三级麻豆| 亚洲影院在线观看| 精品理论电影在线| av亚洲精华国产精华精华| 亚洲图片一区二区| 久久久精品欧美丰满| 色久综合一二码| 狠狠网亚洲精品| 亚洲精品中文在线观看| 精品精品国产高清a毛片牛牛| 成人黄色小视频| 人妖欧美一区二区| 自拍偷拍亚洲综合| 日韩一区二区在线看片| av不卡免费电影| 免费看欧美美女黄的网站| 中文字幕一区免费在线观看| 日韩美女在线视频| 欧美在线不卡一区| 国产成人午夜高潮毛片| 日韩国产欧美在线播放| 亚洲天堂成人网| 26uuu国产电影一区二区| 欧美三区免费完整视频在线观看| 国产一区在线观看视频| 视频一区中文字幕| 国产精品久久久久精k8| 欧美一区日韩一区| 91黄视频在线| 91在线观看污| 国产久卡久卡久卡久卡视频精品| 日本不卡高清视频| 一区二区三区精品视频在线| 国产日韩欧美激情| 久久免费电影网| 精品噜噜噜噜久久久久久久久试看 | 亚洲国产精品综合小说图片区| 国产色婷婷亚洲99精品小说| 欧美一区二区免费| 欧美日韩另类国产亚洲欧美一级| 91在线高清观看| 成人av资源在线观看| 国产美女视频一区| 激情五月婷婷综合网| 奇米在线7777在线精品 | 欧美性大战久久久久久久蜜臀| 国产精品影视在线观看| 毛片不卡一区二区| 麻豆精品在线观看| 日韩va欧美va亚洲va久久| 亚洲无人区一区| 亚洲影视在线观看| 亚洲卡通欧美制服中文| 亚洲欧美一区二区在线观看| 亚洲国产精品成人综合| 国产日韩v精品一区二区| 久久久久久久一区| 欧美国产日韩a欧美在线观看 | 国产精品乱人伦中文| 国产人妖乱国产精品人妖| 国产亚洲精品bt天堂精选| 久久久国产午夜精品| 久久精品欧美一区二区三区麻豆| 欧美精品一区二区三区四区 | 国产精品家庭影院| 国产精品毛片高清在线完整版| 国产日韩欧美不卡在线| 中文字幕一区二区三区精华液| 国产精品久久久久久久久免费丝袜 | 日韩欧美在线1卡| 日韩欧美国产wwwww| 久久综合色播五月| 欧美国产禁国产网站cc| 亚洲欧美综合在线精品| 亚洲激情网站免费观看| 无吗不卡中文字幕| 美女爽到高潮91| 国产高清一区日本| 99亚偷拍自图区亚洲| 欧美主播一区二区三区美女| 制服丝袜成人动漫| 久久久久国产一区二区三区四区| 国产精品久久久99| 一区二区三区国产豹纹内裤在线| 亚洲一区二区综合| 久久精品av麻豆的观看方式| 国产suv精品一区二区883| 不卡高清视频专区| 欧美猛男超大videosgay| 精品国产第一区二区三区观看体验 | 国产精品一二三四| 99综合电影在线视频| 欧美丰满嫩嫩电影| 国产色产综合产在线视频| 亚洲欧美一区二区三区极速播放| 日韩电影免费一区| 懂色av一区二区在线播放| 欧美日韩午夜在线视频| xvideos.蜜桃一区二区| 一区二区三区在线观看网站| 久久国产精品99久久久久久老狼| 成人看片黄a免费看在线| 欧美精品在线一区二区三区| 精品国产三级a在线观看| 亚洲精品一二三| 国产一区二区免费在线| 欧美片在线播放| 中文字幕日韩av资源站| 美国毛片一区二区| 一本一道综合狠狠老| 久久久久亚洲综合| 偷拍亚洲欧洲综合| 成人av电影在线观看| 日韩欧美一区在线观看| 亚洲夂夂婷婷色拍ww47| 懂色中文一区二区在线播放| 日韩欧美电影一区| 亚洲午夜视频在线| 99国产精品久| 国产人成亚洲第一网站在线播放| 日日夜夜精品视频免费| 91美女片黄在线| 国产亚洲精品aa| 久久av资源站| 欧美一区二区成人| 亚洲图片一区二区| 99国产精品视频免费观看| 国产欧美一区二区精品秋霞影院| 日韩av电影天堂| 欧美日韩国产在线播放网站| 亚洲欧美色图小说| aaa欧美大片| 国产精品剧情在线亚洲| 国产一区二区三区黄视频 | 亚洲人成电影网站色mp4| 国产精品系列在线播放| 欧美r级在线观看| 亚洲成人av电影| 欧美综合久久久| 亚洲精品精品亚洲| 91在线视频18| 国产精品国产三级国产普通话99| 国产成人在线视频网站| 国产日产欧美精品一区二区三区| 国内成人精品2018免费看| 精品福利av导航| 国产一区二区精品在线观看| 久久久久久久久久久久久久久99| 激情五月播播久久久精品| 欧美精品一区二区三区蜜桃视频| 麻豆精品一二三| 精品国产网站在线观看| 国产高清不卡二三区| 欧美—级在线免费片| 91丝袜美腿高跟国产极品老师 | 国产农村妇女精品| 国产69精品久久久久毛片| 中文字幕不卡在线观看| 白白色亚洲国产精品| 一区二区三区欧美在线观看| 91黄色免费网站| 日本不卡视频一二三区| 久久久另类综合| 9i看片成人免费高清| 亚洲精品免费电影| 欧美精品丝袜久久久中文字幕| 免费人成精品欧美精品| 国产日韩欧美精品综合| 91丨九色丨蝌蚪富婆spa| 亚洲国产乱码最新视频| 日韩精品一区二区三区四区| 国产传媒日韩欧美成人| 亚洲视频电影在线| 欧美电影影音先锋| 国产乱对白刺激视频不卡| 亚洲私人黄色宅男| 欧美亚洲尤物久久| 国产在线一区二区| 国产精品久久久久婷婷| 欧美区视频在线观看|