CARingBuffer::Error CARingBuffer::store(const AudioBufferList* list, size_t framesToWrite, uint64_t startFrame) { if (!framesToWrite) return Ok; if (framesToWrite > m_frameCount) return TooMuch; uint64_t endFrame = startFrame + framesToWrite; if (startFrame < currentEndFrame()) { // Throw everything out when going backwards. setCurrentFrameBounds(startFrame, startFrame); } else if (endFrame - currentStartFrame() <= m_frameCount) { // The buffer has not yet wrapped and will not need to. // No-op. } else { // Advance the start time past the region we are about to overwrite // starting one buffer of time behind where we're writing. uint64_t newStartFrame = endFrame - m_frameCount; uint64_t newEndFrame = std::max(newStartFrame, currentEndFrame()); setCurrentFrameBounds(newStartFrame, newEndFrame); } // Write the new frames. Byte** buffers = static_cast<Byte**>(m_buffers->data()); size_t offset0; size_t offset1; uint64_t curEnd = currentEndFrame(); if (startFrame > curEnd) { // We are skipping some samples, so zero the range we are skipping. offset0 = frameOffset(curEnd); offset1 = frameOffset(startFrame); if (offset0 < offset1) ZeroRange(buffers, m_channelCount, offset0, offset1 - offset0); else { ZeroRange(buffers, m_channelCount, offset0, m_capacityBytes - offset0); ZeroRange(buffers, m_channelCount, 0, offset1); } offset0 = offset1; } else offset0 = frameOffset(startFrame); offset1 = frameOffset(endFrame); if (offset0 < offset1) StoreABL(buffers, offset0, list, 0, offset1 - offset0); else { size_t nbytes = m_capacityBytes - offset0; StoreABL(buffers, offset0, list, 0, nbytes); StoreABL(buffers, 0, list, nbytes, offset1); } // Now update the end time. setCurrentFrameBounds(currentStartFrame(), endFrame); return Ok; }
CARingBuffer::Error CARingBuffer::fetch(AudioBufferList* list, size_t nFrames, uint64_t startRead) { if (!nFrames) return Ok; startRead = std::max<uint64_t>(0, startRead); uint64_t endRead = startRead + nFrames; uint64_t startRead0 = startRead; uint64_t endRead0 = endRead; clipTimeBounds(startRead, endRead); if (startRead == endRead) { ZeroABL(list, 0, nFrames * m_bytesPerFrame); return Ok; } size_t byteSize = static_cast<size_t>((endRead - startRead) * m_bytesPerFrame); size_t destStartByteOffset = static_cast<size_t>(std::max<uint64_t>(0, (startRead - startRead0) * m_bytesPerFrame)); if (destStartByteOffset > 0) ZeroABL(list, 0, std::min<size_t>(nFrames * m_bytesPerFrame, destStartByteOffset)); size_t destEndSize = static_cast<size_t>(std::max<uint64_t>(0, endRead0 - endRead)); if (destEndSize > 0) ZeroABL(list, destStartByteOffset + byteSize, destEndSize * m_bytesPerFrame); Byte **buffers = static_cast<Byte**>(m_buffers->data()); size_t offset0 = frameOffset(startRead); size_t offset1 = frameOffset(endRead); size_t nbytes; if (offset0 < offset1) { nbytes = offset1 - offset0; FetchABL(list, destStartByteOffset, buffers, offset0, nbytes); } else { nbytes = m_capacityBytes - offset0; FetchABL(list, destStartByteOffset, buffers, offset0, nbytes); FetchABL(list, destStartByteOffset + nbytes, buffers, 0, offset1); nbytes += offset1; } int channelCount = list->mNumberBuffers; AudioBuffer* dest = list->mBuffers; while (--channelCount >= 0) { dest->mDataByteSize = nbytes; dest++; } return Ok; }
Vector<IntRect> FindController::rectsForTextMatches() { Vector<IntRect> rects; for (Frame* frame = &m_webPage->corePage()->mainFrame(); frame; frame = frame->tree().traverseNext()) { Document* document = frame->document(); if (!document) continue; IntRect visibleRect = frame->view()->visibleContentRect(); Vector<IntRect> frameRects = document->markers().renderedRectsForMarkers(DocumentMarker::TextMatch); IntPoint frameOffset(-frame->view()->documentScrollOffsetRelativeToViewOrigin().width(), -frame->view()->documentScrollOffsetRelativeToViewOrigin().height()); frameOffset = frame->view()->convertToContainingWindow(frameOffset); for (Vector<IntRect>::iterator it = frameRects.begin(), end = frameRects.end(); it != end; ++it) { it->intersect(visibleRect); if (it->isEmpty()) continue; it->moveBy(frameOffset); rects.append(*it); } } return rects; }
void QWindowsBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoint &offset) { Q_ASSERT(window); const QRect br = region.boundingRect(); if (QWindowsContext::verbose > 1) qCDebug(lcQpaBackingStore) << __FUNCTION__ << this << window << offset << br; QWindowsWindow *rw = QWindowsWindow::baseWindowOf(window); #ifndef Q_OS_WINCE const bool hasAlpha = rw->format().hasAlpha(); const Qt::WindowFlags flags = window->flags(); if ((flags & Qt::FramelessWindowHint) && QWindowsWindow::setWindowLayered(rw->handle(), flags, hasAlpha, rw->opacity()) && hasAlpha) { // Windows with alpha: Use blend function to update. QRect r = window->frameGeometry(); QPoint frameOffset(window->frameMargins().left(), window->frameMargins().top()); QRect dirtyRect = br.translated(offset + frameOffset); SIZE size = {r.width(), r.height()}; POINT ptDst = {r.x(), r.y()}; POINT ptSrc = {0, 0}; BLENDFUNCTION blend = {AC_SRC_OVER, 0, (BYTE)(255.0 * rw->opacity()), AC_SRC_ALPHA}; if (QWindowsContext::user32dll.updateLayeredWindowIndirect) { RECT dirty = {dirtyRect.x(), dirtyRect.y(), dirtyRect.x() + dirtyRect.width(), dirtyRect.y() + dirtyRect.height()}; UPDATELAYEREDWINDOWINFO info = {sizeof(info), NULL, &ptDst, &size, m_image->hdc(), &ptSrc, 0, &blend, ULW_ALPHA, &dirty}; QWindowsContext::user32dll.updateLayeredWindowIndirect(rw->handle(), &info); } else { QWindowsContext::user32dll.updateLayeredWindow(rw->handle(), NULL, &ptDst, &size, m_image->hdc(), &ptSrc, 0, &blend, ULW_ALPHA); } } else { #endif const HDC dc = rw->getDC(); if (!dc) { qErrnoWarning("%s: GetDC failed", __FUNCTION__); return; } if (!BitBlt(dc, br.x(), br.y(), br.width(), br.height(), m_image->hdc(), br.x() + offset.x(), br.y() + offset.y(), SRCCOPY)) { const DWORD lastError = GetLastError(); // QTBUG-35926, QTBUG-29716: may fail after lock screen. if (lastError != ERROR_SUCCESS && lastError != ERROR_INVALID_HANDLE) qErrnoWarning(lastError, "%s: BitBlt failed", __FUNCTION__); } rw->releaseDC(); #ifndef Q_OS_WINCE } #endif // Write image for debug purposes. if (QWindowsContext::verbose > 2 && lcQpaBackingStore().isDebugEnabled()) { static int n = 0; const QString fileName = QString::fromLatin1("win%1_%2.png"). arg(rw->winId()).arg(n++); m_image->image().save(fileName); qCDebug(lcQpaBackingStore) << "Wrote " << m_image->image().size() << fileName; } }
void QWindowsBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoint &offset) { Q_ASSERT(window); const QRect br = region.boundingRect(); if (QWindowsContext::verboseBackingStore > 1) qDebug() << __FUNCTION__ << window << offset << br; QWindowsWindow *rw = QWindowsWindow::baseWindowOf(window); #ifndef Q_OS_WINCE if (rw->format().hasAlpha() && (window->flags() & Qt::FramelessWindowHint)) { const long wl = GetWindowLong(rw->handle(), GWL_EXSTYLE); if ((wl & WS_EX_LAYERED) == 0) SetWindowLong(rw->handle(), GWL_EXSTYLE, wl | WS_EX_LAYERED); QRect r = window->frameGeometry(); QPoint frameOffset(window->frameMargins().left(), window->frameMargins().top()); QRect dirtyRect = br.translated(offset + frameOffset); SIZE size = {r.width(), r.height()}; POINT ptDst = {r.x(), r.y()}; POINT ptSrc = {0, 0}; BLENDFUNCTION blend = {AC_SRC_OVER, 0, (BYTE)(255.0 * rw->opacity()), AC_SRC_ALPHA}; RECT dirty = {dirtyRect.x(), dirtyRect.y(), dirtyRect.x() + dirtyRect.width(), dirtyRect.y() + dirtyRect.height()}; UPDATELAYEREDWINDOWINFO info = {sizeof(info), NULL, &ptDst, &size, m_image->hdc(), &ptSrc, 0, &blend, ULW_ALPHA, &dirty}; QWindowsContext::user32dll.updateLayeredWindowIndirect(rw->handle(), &info); } else { #endif const HDC dc = rw->getDC(); if (!dc) { qErrnoWarning("%s: GetDC failed", __FUNCTION__); return; } if (!BitBlt(dc, br.x(), br.y(), br.width(), br.height(), m_image->hdc(), br.x() + offset.x(), br.y() + offset.y(), SRCCOPY)) qErrnoWarning("%s: BitBlt failed", __FUNCTION__); rw->releaseDC(); #ifndef Q_OS_WINCE } #endif // Write image for debug purposes. if (QWindowsContext::verboseBackingStore > 2) { static int n = 0; const QString fileName = QString::fromLatin1("win%1_%2.png"). arg(rw->winId()).arg(n++); m_image->image().save(fileName); qDebug() << "Wrote " << m_image->image().size() << fileName; } }
setupDataSize(0), // Size of xml setup block versionNum(0), // Version number cropRowLow(0), // The crop row value on the bottom cropRowHigh(0), // The crop row value in the top cropColHigh(0), // The crop value on the far right cropColLow(0), // The crop value on the far left metaData(0), // Offset of meta data block setupData(0), // Offset of xml setup block imageInfo(0), // Offset of image info structure imageSeq(0), // Offset for image sequence width(0), // The width of the frame in pixels height(0), // The height of the frame in pixels frameNum(0), // The Number of frames. frameSize(0), // Size of an image in... frameSizeArray(), // Size of all 180 frames frameOffset() // Offset of all 180 frames { FILE* fp; size_t fb; fileName = fileNameParam; /* * Opening the file */ fp = fopen(fileName.c_str(), "r"); /* * Going to begining of the file */