mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 409878 - "Garbage displayed for part of bluebar.gif animation" [p=alfredkayser@nl.ibm.com (Alfred Kayser) r+a1.9=stuart]
This commit is contained in:
parent
6e6e5c1aa0
commit
56c4d2753e
@ -353,7 +353,8 @@ void nsGIFDecoder2::BeginImageFrame(gfx_depth aDepth)
|
||||
}
|
||||
|
||||
mImageFrame->SetFrameDisposalMethod(mGIFStruct.disposal_method);
|
||||
mImageContainer->AppendFrame(mImageFrame);
|
||||
if (!mGIFStruct.images_decoded)
|
||||
mImageContainer->AppendFrame(mImageFrame);
|
||||
|
||||
if (mObserver)
|
||||
mObserver->OnStartFrame(nsnull, mImageFrame);
|
||||
@ -390,17 +391,27 @@ void nsGIFDecoder2::EndImageFrame()
|
||||
mCurrentRow = mLastFlushedRow = -1;
|
||||
mCurrentPass = mLastFlushedPass = 0;
|
||||
|
||||
mGIFStruct.images_decoded++;
|
||||
// Only add frame if we have any rows at all
|
||||
if (mGIFStruct.rows_remaining != mGIFStruct.height) {
|
||||
if (mGIFStruct.rows_remaining && mGIFStruct.images_decoded) {
|
||||
// Clear the remaining rows (only needed for the animation frames)
|
||||
PRUint8 *rowp = mImageData + ((mGIFStruct.rows_remaining - mGIFStruct.height) * mGIFStruct.width);
|
||||
memset(rowp, 0, mGIFStruct.rows_remaining * mGIFStruct.width);
|
||||
}
|
||||
|
||||
// We actually have the timeout information before we get the lzw encoded
|
||||
// image data, at least according to the spec, but we delay in setting the
|
||||
// timeout for the image until here to help ensure that we have the whole
|
||||
// image frame decoded before we go off and try to display another frame.
|
||||
mImageFrame->SetTimeout(mGIFStruct.delay_time);
|
||||
mImageContainer->EndFrameDecode(mGIFStruct.images_decoded, mGIFStruct.delay_time);
|
||||
// We actually have the timeout information before we get the lzw encoded
|
||||
// image data, at least according to the spec, but we delay in setting the
|
||||
// timeout for the image until here to help ensure that we have the whole
|
||||
// image frame decoded before we go off and try to display another frame.
|
||||
mImageFrame->SetTimeout(mGIFStruct.delay_time);
|
||||
if (mGIFStruct.images_decoded)
|
||||
mImageContainer->AppendFrame(mImageFrame);
|
||||
mImageContainer->EndFrameDecode(mGIFStruct.images_decoded, mGIFStruct.delay_time);
|
||||
mGIFStruct.images_decoded++;
|
||||
|
||||
if (mObserver)
|
||||
mObserver->OnStopFrame(nsnull, mImageFrame);
|
||||
if (mObserver)
|
||||
mObserver->OnStopFrame(nsnull, mImageFrame);
|
||||
}
|
||||
|
||||
// Release reference to this frame
|
||||
mImageFrame = nsnull;
|
||||
|
Loading…
Reference in New Issue
Block a user