bool STexture::openVideo(QString s, double fps, bool loop, int start, int stop) { clearCallBacks(); setPlaying(false); setFPS(fps); setLooping(loop); videoFileName = s; bool ok=false; for (physicalFirstFrame=0; physicalFirstFrame < (unsigned)max(20,max(start,stop)); physicalFirstFrame++) { QString fn = frameFilename(physicalFirstFrame); QFileInfo info(fn); if (info.isFile() && info.isReadable()) { ok=true; break; } } if (!ok) { videoFileName.clear(); return false; } unsigned in = physicalFirstFrame; unsigned out = 100000; while (out-in > 1) { int mid = in + ((out-in)/2); QString fn = frameFilename(mid); QFileInfo info(fn); if (info.isFile() && info.isReadable()) in = mid; else out = mid; } physicalLastFrame=in; position=firstFrame=physicalFirstFrame; lastFrame=physicalLastFrame; if (start>=0) setFirstFrame(start); if (stop>=0) setLastFrame(stop); return true; }
void KisRasterKeyframeChannel::saveKeyframe(KisKeyframeSP keyframe, QDomElement keyframeElement, const QString &layerFilename) { int frameId = keyframe->value(); QString filename = frameFilename(frameId); if (filename.isEmpty()) { filename = chooseFrameFilename(frameId, layerFilename); } keyframeElement.setAttribute("frame", filename); QPoint offset = m_d->paintDevice->framesInterface()->frameOffset(frameId); KisDomUtils::saveValue(&keyframeElement, "offset", offset); }
void STexture::bind() { if (this==0) return; if (videoReady()) { QString s=frameFilename(updateCurrentFrame()); loadDDS(s); //qDebug() << s << ": " << texture; } else if (currentTexName.size()>0) { loadDDS(currentTexName); } if (texture) { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texture); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } else { glDisable(GL_TEXTURE_2D); } }