/** \fn getFrame \brief Get a processed frame */ bool openGlBenchmark::getNextFrame(uint32_t *fn,ADMImage *image) { // since we do nothing, just get the output of previous filter if(false==previousFilter->getNextFrame(fn,image)) { ADM_warning("FlipFilter : Cannot get frame\n"); return false; } widget->makeCurrent(); glPushMatrix(); // size is the last one... fboY->bind(); float angle=*fn; angle=angle/40; glProgramY->setUniformValue("teta", angle); glProgramY->setUniformValue("myTextureU", 1); glProgramY->setUniformValue("myTextureV", 2); glProgramY->setUniformValue("myTextureY", 0); glProgramY->setUniformValue("myWidth", (GLfloat)image->GetWidth(PLANAR_Y)); glProgramY->setUniformValue("myHeight", (GLfloat)image->GetHeight(PLANAR_Y)); uploadAllPlanes(image); render(image,PLANAR_Y,fboY); ADMBenchmark bench; for(int i=0;i<10;i++) { bench.start(); downloadTexturesQt(image,fboY); bench.end(); } ADMBenchmark bench2; for(int i=0;i<10;i++) { bench2.start(); downloadTexturesDma(image,fboY); bench2.end(); } printf("Qt4 Benchmark\n"); bench.printResult(); printf("PBO/FBO Benchmark\n"); bench2.printResult(); float avg1,avg2; int min1,min2,max1,max2; bench.getResult(avg1,min1,max1); bench2.getResult(avg2,min2,max2); char str1[81]; char str2[81]; snprintf(str1,80,"Qt avg=%03.2f ms, min=%d max=%d ms",avg1,(int)min1,(int)max1); snprintf(str2,80,"DMA avg=%03.2f ms, min=%d max=%d ms",avg2,(int)min2,(int)max2); image->printString(2,4,str1); image->printString(2,8,str2); fboY->release(); firstRun=false; glPopMatrix(); widget->doneCurrent(); return true; }