mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-05 07:18:39 +09:00
Bug 1409440. r=tnikkel, a=RyanVM
This commit is contained in:
parent
b5e5cabc37
commit
8b03cc774b
2 changed files with 20 additions and 8 deletions
|
|
@ -231,6 +231,7 @@ Downscaler::CommitRow()
|
|||
int32_t inLineToRead = filterOffset + mLinesInBuffer;
|
||||
MOZ_ASSERT(mCurrentInLine <= inLineToRead, "Reading past end of input");
|
||||
if (mCurrentInLine == inLineToRead) {
|
||||
MOZ_RELEASE_ASSERT(mLinesInBuffer < mWindowCapacity, "Need more rows than capacity!");
|
||||
skia::ConvolveHorizontally(mRowBuffer.get(), *mXFilter,
|
||||
mWindow[mLinesInBuffer++], mHasAlpha,
|
||||
supports_sse2() || supports_mmi());
|
||||
|
|
@ -239,7 +240,7 @@ Downscaler::CommitRow()
|
|||
MOZ_ASSERT(mCurrentOutLine < mTargetSize.height,
|
||||
"Writing past end of output");
|
||||
|
||||
while (mLinesInBuffer == filterLength) {
|
||||
while (mLinesInBuffer >= filterLength) {
|
||||
DownscaleInputLine();
|
||||
|
||||
if (mCurrentOutLine == mTargetSize.height) {
|
||||
|
|
@ -340,9 +341,14 @@ Downscaler::DownscaleInputLine()
|
|||
|
||||
// Shift the buffer. We're just moving pointers here, so this is cheap.
|
||||
mLinesInBuffer -= diff;
|
||||
mLinesInBuffer = max(mLinesInBuffer, 0);
|
||||
for (int32_t i = 0; i < mLinesInBuffer; ++i) {
|
||||
swap(mWindow[i], mWindow[filterLength - mLinesInBuffer + i]);
|
||||
mLinesInBuffer = min(max(mLinesInBuffer, 0), mWindowCapacity);
|
||||
|
||||
// If we already have enough rows to satisfy the filter, there is no need
|
||||
// to swap as we won't be writing more before the next convolution.
|
||||
if (filterLength > mLinesInBuffer) {
|
||||
for (int32_t i = 0; i < mLinesInBuffer; ++i) {
|
||||
swap(mWindow[i], mWindow[filterLength - mLinesInBuffer + i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -246,6 +246,7 @@ protected:
|
|||
int32_t inputRowToRead = filterOffset + mRowsInWindow;
|
||||
MOZ_ASSERT(mInputRow <= inputRowToRead, "Reading past end of input");
|
||||
if (mInputRow == inputRowToRead) {
|
||||
MOZ_RELEASE_ASSERT(mRowsInWindow < mWindowCapacity, "Need more rows than capacity!");
|
||||
skia::ConvolveHorizontally(mRowBuffer.get(), *mXFilter,
|
||||
mWindow[mRowsInWindow++], mHasAlpha,
|
||||
supports_sse2() || supports_mmi());
|
||||
|
|
@ -254,7 +255,7 @@ protected:
|
|||
MOZ_ASSERT(mOutputRow < mNext.InputSize().height,
|
||||
"Writing past end of output");
|
||||
|
||||
while (mRowsInWindow == filterLength) {
|
||||
while (mRowsInWindow >= filterLength) {
|
||||
DownscaleInputRow();
|
||||
|
||||
if (mOutputRow == mNext.InputSize().height) {
|
||||
|
|
@ -330,9 +331,14 @@ private:
|
|||
|
||||
// Shift the buffer. We're just moving pointers here, so this is cheap.
|
||||
mRowsInWindow -= diff;
|
||||
mRowsInWindow = std::max(mRowsInWindow, 0);
|
||||
for (int32_t i = 0; i < mRowsInWindow; ++i) {
|
||||
std::swap(mWindow[i], mWindow[filterLength - mRowsInWindow + i]);
|
||||
mRowsInWindow = std::min(std::max(mRowsInWindow, 0), mWindowCapacity);
|
||||
|
||||
// If we already have enough rows to satisfy the filter, there is no need
|
||||
// to swap as we won't be writing more before the next convolution.
|
||||
if (filterLength > mRowsInWindow) {
|
||||
for (int32_t i = 0; i < mRowsInWindow; ++i) {
|
||||
std::swap(mWindow[i], mWindow[filterLength - mRowsInWindow + i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue