/** \fn getFrame \brief Get a processed frame */ bool rotateGl::getNextFrame(uint32_t *fn,ADMImage *image) { // since we do nothing, just get the output of previous filter if(false==previousFilter->getNextFrame(fn,original)) { ADM_warning("glRotate : Cannot get frame\n"); return false; } widget->makeCurrent(); glPushMatrix(); // size is the last one... fboY->bind(); glProgramY->setUniformValue("myTextureU", 1); glProgramY->setUniformValue("myTextureV", 2); glProgramY->setUniformValue("myTextureY", 0); uploadAllPlanes(original); render(image,PLANAR_Y,fboY); downloadTextures(image,fboY); fboY->release(); firstRun=false; glPopMatrix(); widget->doneCurrent(); image->copyInfo(original); return true; }
/** \fn getFrame \brief Get a processed frame */ bool openGlSample::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); downloadTextures(image,fboY); fboY->release(); firstRun=false; glPopMatrix(); widget->doneCurrent(); return true; }
/** \fn image2image */ bool glRGB::imageToImage(const char *buffer,ADMImage *image) { bool r=true; int width=image->GetWidth(PLANAR_Y); int height=image->GetHeight(PLANAR_Y); widget->makeCurrent(); glPushMatrix(); // size is the last one... fboY->bind(); processError("Bind"); glProgramY->setUniformValue("myTextureY", 0); processError("setUniform myTexture0"); QMatrix4x4 quadmat(realMatrix); glProgramY->setUniformValue("metrix",quadmat); processError("setUniform Matrix"); myGlActiveTexture(GL_TEXTURE0); processError("Active Texture"); glBindTexture(GL_TEXTURE_RECTANGLE_NV, texName[0]); processError("Bind Texture"); // upload image glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); if(!firstRun) { glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer); }else { glTexSubImage2D(GL_TEXTURE_RECTANGLE_NV, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer); } //----------------- render(image,PLANAR_Y,fboY); downloadTextures(image,fboY); fboY->release(); firstRun=false; glPopMatrix(); widget->doneCurrent(); return r; }
/** \fn surfaceToImage */ bool glRGB::surfaceToImage(VdpOutputSurface surf,ADMImage *image) { bool r=true; widget->makeCurrent(); glPushMatrix(); fboY->bind(); processError("Bind"); glProgramY->setUniformValue("myTextureY", 0); processError("setUniform myTexture0"); QMatrix4x4 quadmat(realMatrix); glProgramY->setUniformValue("metrix",quadmat); processError("setUniform Matrix"); myGlActiveTexture(GL_TEXTURE0); processError("Active Texture"); glBindTexture(GL_TEXTURE_RECTANGLE_NV, texName[0]); processError("Bind Texture"); // GLvdpauSurfaceNV s=VDPAURegisterOutputSurfaceNV((GLvoid *)surf,GL_TEXTURE_2D,1,texName); printf("Surface =%d, GlSurface=%x, texName : %d\n",(int)surf,(int)s,(int)texName[0]); if(false==processError("Register")) { r=false; goto skip; } VDPAUSurfaceAccessNV(s,GL_READ_ONLY); VDPAUMapSurfacesNV(1,&s); processError("Map"); myGlActiveTexture(GL_TEXTURE0); processError("Active Texture"); glBindTexture(GL_TEXTURE_RECTANGLE_NV, texName[0]); processError("Bind Texture"); render(image,PLANAR_Y,fboY); downloadTextures(image,fboY); VDPAUUnmapSurfacesNV(1,&s); processError("Unmap"); VDPAUUnregisterSurfaceNV(s); processError("Unregister"); skip: fboY->release(); firstRun=false; glPopMatrix(); widget->doneCurrent(); return r; }
/** \fn getFrame \brief Get a processed frame */ bool shaderLoader::getNextFrame(uint32_t *fn,ADMImage *image) { // since we do nothing, just get the output of previous filter if(false==previousFilter->getNextFrame(fn,original)) { ADM_warning("glRotate : Cannot get frame\n"); return false; } if(!ready) { ADM_info("OpenGl shader not loaded (%s)\n",erString.c_str()); image->duplicateFull(original); image->printString(2,2,"Shader not loaded"); image->printString(2,2,erString.c_str()); return true; } _parentQGL->makeCurrent(); glPushMatrix(); // size is the last one... fboY->bind(); glProgramY->setUniformValue("myTextureU", 1); glProgramY->setUniformValue("myTextureV", 2); glProgramY->setUniformValue("myTextureY", 0); glProgramY->setUniformValue("myResolution", (GLfloat)info.width,(GLfloat)info.height); glProgramY->setUniformValue("pts", (GLfloat)original->Pts); uploadAllPlanes(original); render(image,PLANAR_Y,fboY); downloadTextures(image,fboY); fboY->release(); firstRun=false; glPopMatrix(); _parentQGL->doneCurrent(); image->copyInfo(original); return true; }