All pastes #440663 Raw Edit

unsolo

public cpp v1 · immutable
·published 2007-04-15 05:50 UTC
rendered paste body
struct img_args {	int width;	int height;	int maxwidth;	int maxheight; 	unsigned long long  Ystart;	unsigned long long  Ustart;	unsigned long long  Vstart;	unsigned long long  Ostart;	unsigned long long  Ostartb;	unsigned long long dummy;};int main(unsigned long long speid, unsigned long long argp, unsigned long long envp) {	int tgiA=1;	int tgiB=2;	int tgoA=3;	int tgoB=4;		enum control { RUN, STOP, WAIT ,RDY};	int tag = 1,tag_mask=1<<tag;				int buffsize;	struct img_args *iargs;		iargs =(struct img_args*) memalign(128,sizeof(*iargs));	dmaGetnWait(iargs,(unsigned int)argp,(int)envp,tag);	printf("Height :%d\n",iargs->height);	printf("Width  :%d\n",iargs->width);	printf("width scaled:%d\n",16*((iargs->width/2 + 8 )&16));	vector unsigned char* IybufferA=memalign(128,iargs->width*4);		vector unsigned char* IubufferA=memalign(128,iargs->width);	vector unsigned char* IvbufferA=memalign(128,iargs->width);	vector unsigned char* IybufferB=memalign(128,iargs->width*4);	vector unsigned char* IubufferB=memalign(128,iargs->width);	vector unsigned char* IvbufferB=memalign(128,iargs->width);	vector unsigned char* ObufferA=memalign(128,iargs->maxwidth*4*2);	vector unsigned char* ObufferB=memalign(128,iargs->maxwidth*4*2);	vector unsigned char* IyAp;	vector unsigned char* IyBp;	vector unsigned char* IuAp;	vector unsigned char* IuBp;	vector unsigned char* IvAp;	vector unsigned char* IvBp;	unsigned long long Op;	unsigned long long Yp;	unsigned long long Up;	unsigned long long Vp;	unsigned long long tmp;	unsigned int msg;		while (spu_stat_in_mbox() == 0);	msg=spu_read_in_mbox();	if (msg==RUN){			printf("RUN\n");	}		while (msg!=STOP) 	{		Op=iargs->Ostart;		Yp=iargs->Ystart;		Up=iargs->Ustart;		Vp=iargs->Vstart;				dmaGet(IybufferA,Yp,iargs->width*4,tgiA);		printf("getting Yp\n");		dmaGet(IubufferA,Up,iargs->width,tgiA);		printf("getting Up\n");		dmaGet(IvbufferA,Vp,iargs->width,tgiA);		printf("getting Vp\n");				Yp=Yp+iargs->width*4;		Up=Up+iargs->width;		Vp=Vp+iargs->width;				dmaGet(IybufferB,Yp,iargs->width*4,tgiB);		printf("getting Yp\n");		dmaGet(IubufferB,Up,iargs->width,tgiB);		printf("getting Up\n");		dmaGet(IvbufferB,Vp,iargs->width,tgiB);		printf("getting Vp\n");				for (int i=0;i < iargs->height/8;i++) {				dmaWaitTag(tgiA);			dmaWaitTag(tgoA);			yuv420toARGB(IybufferA,IubufferA,IvbufferA,ObufferA,iargs->width,iargs->maxwidth);			dmaPut(ObufferA,Op,iargs->maxwidth*4*2,tgoA);			printf("puto\n");			Op=Op+iargs->maxwidth*4*2;			IyAp=IybufferA+iargs->width*2/16;			IuAp=IubufferA+iargs->width/32;			IvAp=IvbufferA+iargs->width/32;			dmaWaitTag(tgoB);			yuv420toARGB(IyAp,IuAp,IvAp,ObufferB,iargs->width,iargs->maxwidth);			dmaPut(ObufferB,Op,iargs->maxwidth*4*2,tgoB);			Yp=Yp+iargs->width*4;			Up=Up+iargs->width;			Vp=Vp+iargs->width;			Op=Op+iargs->maxwidth*4*2;			if (iargs->height/8-1 != i){				dmaGet(IybufferA,Yp,iargs->width*4,tgiA);			printf("getting Yp\n");			dmaGet(IubufferA,Up,iargs->width,tgiA);			printf("getting Up\n");			dmaGet(IvbufferA,Vp,iargs->width,tgiA);			printf("getting Vp\n");			}					dmaWaitTag(tgiB);			dmaWaitTag(tgoA);			yuv420toARGB(IybufferB,IubufferB,IvbufferB,ObufferA,iargs->width,iargs->maxwidth);			dmaPut(ObufferA,Op,iargs->maxwidth*4*2,tgoA);			printf("puto\n");			Op=Op+iargs->maxwidth*4*2;				IyBp=IybufferB+iargs->width*2/16;			IuBp=IubufferB+iargs->width/32;			IvBp=IvbufferB+iargs->width/32;					dmaWaitTag(tgoB);			yuv420toARGB(IyBp,IuBp,IvBp,ObufferB,iargs->width,iargs->maxwidth);			dmaPut(ObufferB,Op,iargs->maxwidth*4*2,tgoB);			Yp=Yp+iargs->width*4;			Up=Up+iargs->width;			Vp=Vp+iargs->width;			Op=Op+iargs->maxwidth*4*2;			if (iargs->height/8-1 != i){				dmaGet(IybufferB,Yp,iargs->width*4,tgiB);				printf("getting Yp\n");				dmaGet(IubufferB,Up,iargs->width,tgiB);				printf("getting Up\n");				dmaGet(IvbufferB,Vp,iargs->width,tgiB);				printf("getting Vp\n");			}		}		while (spu_stat_out_mbox() == 0);			msg=RDY;			tmp=iargs->Ostart;			iargs->Ostart=iargs->Ostartb;			iargs->Ostartb=tmp;			spu_write_out_mbox(msg);						while (spu_stat_in_mbox() == 0);			msg=spu_read_in_mbox();				if (msg == RUN){		//		printf("RUN\n");		}		else if (msg == STOP)		{			printf("Stopping\n");		}	}		return 0;}