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

📄 jpegdec.c

📁 TE3320和DSP的VP口无缝连接后的驱动程序源码
💻 C
📖 第 1 页 / 共 2 页
字号:
        break;

        case TE3320_WRJPG:	//write the jpeg data to TE3320RPE
		{
			JPEGDATA_info *pJpegdata = (JPEGDATA_info*)arg;
			
			writeJPEGdata(pJpegdata->pdatabuf,pJpegdata->len);
		}
        break;

		default:
        break;
    }
    return EDC_SUCCESS;
}

 
/*
 * ========  TE3320_open ========
 */
static EDC_Handle  TE3320_open(String devName, Arg optArg)
{
    Int devId;


    /* Check if the addresse is correct */
    if(devName[0] != '/') {
        devId = -1;
    } else if(devName[1] == '0') {
         devId = 0;
    } else if(devName[1] == '1'){
         devId = 1;
    } else {
         devId = -1;
    }
    return (EDC_Handle)devId;
}


///////////////////////external interface//////////////////////////////

int JPGdecInit()
{
	return Set32bitLE();
}


int GetDecSts()
{
	Uint16 ifact;
	ifact = (Uint16)(RD_IDR(IREG_IFACT)&0x0080);
	return ifact;
}



FVID_Handle JPGdecOpen(int resolution, int * pStatus)
{
	int status;
	FVID_Handle capChan; 
	
	switch(resolution)
	{
		case RESOLUTION_CIF:
		{
			JPEGDEC_vCapParamsChan.fldXStop1 = 352-1;
			JPEGDEC_vCapParamsChan.fldYStop1 = 288;
		}
		break;
		case RESOLUTION_VGA:
		{
			JPEGDEC_vCapParamsChan.fldXStop1 = 640-1;
			JPEGDEC_vCapParamsChan.fldYStop1 = 480;
		}
		break;
		case RESOLUTION_NTSC:
		{
			JPEGDEC_vCapParamsChan.fldXStop1 = 720-1;
			JPEGDEC_vCapParamsChan.fldYStop1 = 480;
		}
		break;
		case RESOLUTION_PAL:
		{
			JPEGDEC_vCapParamsChan.fldXStop1 = 720-1;
			JPEGDEC_vCapParamsChan.fldYStop1 = 576;
		}
		break;
		case RESOLUTION_SVGA:
		{
			JPEGDEC_vCapParamsChan.fldXStop1 = 800-1;
			JPEGDEC_vCapParamsChan.fldYStop1 = 600;
		}
		break;
		case RESOLUTION_XGA:
		{
			JPEGDEC_vCapParamsChan.fldXStop1 = 1024-1;
			JPEGDEC_vCapParamsChan.fldYStop1 = 768;
		}
		break;
		case RESOLUTION_SXGA:
		{
			JPEGDEC_vCapParamsChan.fldXStop1 = 1280-1;
			JPEGDEC_vCapParamsChan.fldYStop1 = 1024;
		}
		break;
		case RESOLUTION_UXGA:
		{
			JPEGDEC_vCapParamsChan.fldXStop1 = 1600-1;
			JPEGDEC_vCapParamsChan.fldYStop1 = 1200;
		}
		break;
		default:
		{
			*pStatus = ER_RESULOTION;
			return INV;	
		}
	}

    JPEGDEC_vCapParamsChan.segId = EXTERNALHEAP;

	//initialize the varibles
	pJpgbuf = NULL;
	len4Jpgdw = 0;
	hSem4Sendjpg = SEM_create(0, NULL);
	if(hSem4Sendjpg == NULL)
	{
		*pStatus = ER_CREATESEM;

		return INV;
	}

 	//config the te3320
	if(configTE3320(&JPEGDEC_vCapParamsTE3320)<0)
	{
//		debug_decode("Failed to initialize TE3320!!!\n");
		*pStatus = ER_CONFIGDEC;
		SEM_delete(hSem4Sendjpg);

		return INV;	
	}

    /******************************************************/
    /* initialization of capture driver                   */
    /******************************************************/
    capChan = FVID_create("/VP0JPGDEC/A/0", 
            IOM_INPUT, &status, (Ptr)&JPEGDEC_vCapParamsChan, NULL);


    /******************************************************/
    /* start capture operation                  */    
    /******************************************************/
    FVID_control(capChan, VPORT_CMD_START, NULL);

	//set the TE3320
	startTE3320(0x0001);


	return capChan;
		
}



int JPGdecImg(Uint8 *pIn, int jpeglen, Uint8 *pOut, int *YUVlen, int *type)
{
/*
	Uint16 goorder = 0;
	Uint32 gostatus = 0;
//	Int32 lenOnetime =0;
	int i;
	int curTxlen = 0;

//	Uint32 gostatus;
	
	Uint32 *pInbuf = (Uint32 *)pIn;
	int jpgdwlen = jpeglen>>2;

	gostatus = GOSTATUS();
	if(gostatus&0x00030000)
		return ER_DECBUSY;
	//make ready for the pointer returned
//	pYbuf = pOut;
//	pCbbuf = pOut+(numLinesCap*numPixels);
//	pCrbuf = pCbbuf+((numLinesCap*numPixels)>>1);


//	Light_LED(1);
	//set the GO register
	goorder = 0x0002;
	startTE3320(goorder);

	//download the data
	while(1)
	{
		while((gostatus = GOSTATUS())&JFIFO_WRENABLE)
		{
			curTxlen = (gostatus&0x1FFF)>>2;	//32bits
			if(curTxlen<1000)
				break;
			for(i=0;i<curTxlen;i++)
			{
				JEPGDEC_DR(DR_iJDATA) =  *pInbuf;
				pInbuf++;
				jpgdwlen--;
				if(jpgdwlen == 0)
				{//one frame over
					if(SEM_pend(SEM_vp2tx,500))
					{//capture success
						*YUVlen = (numLinesCap*numPixels)<<1;
						*type = 4;
//						DeLight_LED(1);
						return DECSUCCESS;
					}
					else
					{//capture failed
						return DECFAILED;					
					}
					
				}
			}
//			TSK_sleep(1);
		}		
			
	}
*/

	return 1;
}
/*
int SendJpegData(Uint8 *pIn, int jpeglen)
{
	Uint32 gostatus = 0;
	int i;
	int curTxlen = 0;

	Uint32 *pInbuf = (Uint32 *)pIn;
	int jpgdwlen = jpeglen>>2;

	gostatus = GOSTATUS();
	if(!(gostatus&JFIFO_WRENABLE))
		return ER_DECBUSY;

//	Light_LED(1);
	
	while(1)
	{
		while((gostatus = GOSTATUS())&JFIFO_WRENABLE)
		{
			curTxlen = (gostatus&0x1FFF)>>2;	//32bits
			if(curTxlen<1000)
				break;
			for(i=0;i<curTxlen;i++)
			{
				JEPGDEC_DR(DR_iJDATA) =  *pInbuf;
				pInbuf++;
				jpgdwlen--;
				if(jpgdwlen == 0)
				{//one frame over
//					DeLight_LED(1);
					//clear the ifact flag for bit 7 and bit 3
					WR_IDR(IREG_IFACT, (IFACT_JEND|IFACT_DECEND));

					return DECSUCCESS;					
				}
			}
//			TSK_sleep(2);
		}		

	}

}
*/

int SendJpegData(Uint8 *pIn, int jpeglen)
{
	Uint32 gostatus = 0;
	int i;
	int curTxlen = 0;


	gostatus = GOSTATUS();
	if(!(gostatus&JFIFO_WRENABLE))
		return ER_DECBUSY;
	//don't need protect them
	pJpgbuf = (Uint32 *)pIn;
	len4Jpgdw = jpeglen>>2;

	curTxlen = (gostatus&0x1FFF)>>2;	//32bits







//	Light_LED(1);
	
	while(1)
	{
		while((gostatus = GOSTATUS())&JFIFO_WRENABLE)
		{
			curTxlen = (gostatus&0x1FFF)>>2;	//32bits
			if(curTxlen<1000)
				break;
			for(i=0;i<curTxlen;i++)
			{
				JEPGDEC_DR(DR_iJDATA) =  *pInbuf;
				pInbuf++;
				jpgdwlen--;
				if(jpgdwlen == 0)
				{//one frame over
//					DeLight_LED(1);
					//clear the ifact flag for bit 7 and bit 3
					WR_IDR(IREG_IFACT, (IFACT_JEND|IFACT_DECEND));

					return DECSUCCESS;					
				}
			}
//			TSK_sleep(2);
		}		

	}

}



void JPGdecClose(FVID_Handle capChan)
{
	if(hSem4Sendjpg != NULL)
	{
		SEM_delete(hSem4Sendjpg);
	}
	if(capChan)
	{
//		FVID_delete(capChan);
		capChan = INV;
	}
	
}



























/**************************************************************************/
/* End of file                                                                            */
/**************************************************************************/

⌨️ 快捷键说明

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