Esempio n. 1
0
yuvscaler_t * sws_init_yuvscaler(int srcW,int srcH,int dstW, int dstH,ea_t front_inBuffer, ea_t back_inBuffer, ea_t front_outBuffer, ea_t back_outBuffer)
{
	struct yuvscaler_s *yuvs;
	yuvs=(struct yuvscaler_s *)memalign(64,sizeof(struct yuvscaler_s));
	yuvs->iargs=(struct img_args *)memalign(128,sizeof(struct img_args));
	yuvs->iargs->srcW=srcW;
	yuvs->iargs->srcH=srcH;
	yuvs->iargs->dstW=dstW;
	yuvs->iargs->dstH=dstH;
	yuvs->iargs->Ystart[0]=(unsigned long long)front_inBuffer;
	yuvs->iargs->Ystart[1]=(unsigned long long)back_inBuffer;

	yuvs->iargs->Ustart[0]=yuvs->iargs->Ystart[0]+srcW*srcH; //maybe these should be removed...
	yuvs->iargs->Ustart[1]=yuvs->iargs->Ystart[1]+srcW*srcH;
	yuvs->iargs->Vstart[0]=yuvs->iargs->Ystart[0]+srcW*srcH + srcW*srcH/4;
	yuvs->iargs->Vstart[1]=yuvs->iargs->Ystart[1]+srcW*srcH + srcW*srcH/4;

	yuvs->iargs->Output[0]=(unsigned long long)front_outBuffer;
	yuvs->iargs->Output[1]=(unsigned long long)back_outBuffer;
	yuvs->envp=(void*)sizeof(struct img_args);
	yuvs->argp=yuvs->iargs;	
	yuvs->createflags=SPE_EVENTS_ENABLE;
	yuvs->entry=SPE_DEFAULT_ENTRY;
	yuvs->runflags=0;
	yuvs->ctx=spe_context_create(yuvs->createflags, NULL);
	yuvs->thread_id=pthread_create(&yuvs->pts,NULL,&sws_spe_thread,yuvs);

	yuvs->spe_event_yuvscaler = spe_event_handler_create();
	yuvs->event.spe = yuvs->ctx;
	yuvs->event.events = SPE_EVENT_OUT_INTR_MBOX | SPE_EVENT_SPE_STOPPED;
	spe_event_handler_register(yuvs->spe_event_yuvscaler, &yuvs->event);


	return yuvs;
}
Esempio n. 2
0
/* Register the event handlers for each context */
void registerEventHandlers(SpuThreadData * spu_data) {
	int i, no_spus;
	no_spus = spu_data->no_spu_threads;
	
	for (i=0; i<no_spus; i++) {
		spe_event_unit_t event;

		spu_data->spus[i].evnt_handler = spe_event_handler_create();
		event.events  = SPE_EVENT_OUT_INTR_MBOX;
		event.spe     = spu_data->spus[i].ctx;

		if (spe_event_handler_register(spu_data->spus[i].evnt_handler, &event)) {
			perror("Failed registering event handler for Cell SPU");
			exit(1);
		}
	}
}