Lines Matching defs:frame

282         // Nothing to zero, due to scaling or bad frame rect.
320 // a kRestoreBGColor frame.
331 const auto* frame = frameHolder->getFrame(index);
332 SkASSERT(frame);
334 const int requiredFrame = frame->getRequiredFrame();
356 // Check for a valid frame as a starting point. Alternatively, we could
357 // treat an invalid frame as not providing one, but rejecting it will
371 // If a frame after the required frame is provided, there is no
372 // need to clear, since it must be covered by the desired frame.
373 // FIXME: If the required frame is kRestoreBGColor, we don't actually need to decode
375 // required frame and then clear.
388 return this->initializeColorXform(info, frame->reportedAlpha(), !frame->hasAlpha())
564 // Scanline decoding only supports decoding the first frame.
825 static bool independent(const SkFrame& frame) {
826 return frame.getRequiredFrame() == SkCodec::kNoFrame;
829 static bool restore_bg(const SkFrame& frame) {
830 return frame.getDisposalMethod() == SkCodecAnimation::DisposalMethod::kRestoreBGColor;
833 // As its name suggests, this method computes a frame's alpha (e.g. completely
834 // opaque, unpremul, binary) and its required frame (a preceding frame that
835 // this frame depends on, to draw the complete image at this frame's point in
836 // the animation stream), and calls this frame's setter methods with that
839 // A required frame of kNoFrame means that this frame is independent: drawing
840 // the complete image at this frame's point in the animation stream does not
841 // require first preparing the pixel buffer based on another frame. Instead,
848 // libjpeg or libpng). Pixels outside of the frame's rect will remain this
849 // background color after drawing this frame. For incomplete decodes, pixels
856 // frame to kNoFrame (an "INDx" condition) or to a non-negative frame number (a
860 // - IND1: this frame is the first frame.
861 // - IND2: this frame fills out the whole image, and it is completely opaque
862 // or it overwrites (not blends with) the previous frame.
866 // - DEP5: this frame reports alpha (it is not completely opaque) and it
867 // blends with (not overwrites) the previous frame.
868 // - IND6: this frame's rect covers the rects of all preceding frames back to
869 // and including the most recent independent frame before this frame.
872 // The "prevFrame" variable initially points to the previous frame (also known
873 // as the prior frame), but that variable may iterate further backwards over
875 void SkFrameHolder::setAlphaAndRequiredFrame(SkFrame* frame) {
876 const bool reportsAlpha = frame->reportedAlpha() != SkEncodedInfo::kOpaque_Alpha;
878 const auto frameRect = frame_rect_on_screen(frame->frameRect(), screenRect);
880 const int i = frame->frameId();
882 frame->setHasAlpha(reportsAlpha || frameRect != screenRect);
883 frame->setRequiredFrame(SkCodec::kNoFrame); // IND1
888 const bool blendWithPrevFrame = frame->getBlend() == SkCodecAnimation::Blend::kSrcOver;
890 frame->setHasAlpha(reportsAlpha);
891 frame->setRequiredFrame(SkCodec::kNoFrame); // IND2
899 frame->setHasAlpha(true);
900 frame->setRequiredFrame(SkCodec::kNoFrame); // IND3
912 frame->setHasAlpha(true);
913 frame->setRequiredFrame(SkCodec::kNoFrame); // IND4
920 // to background color and covers its required frame (and that
921 // frame is independent), prevFrame could be marked independent.
923 frame->setRequiredFrame(prevFrame->frameId()); // DEP5
924 frame->setHasAlpha(prevFrame->hasAlpha() || clearPrevFrame);
931 frame->setRequiredFrame(SkCodec::kNoFrame); // IND6
932 frame->setHasAlpha(true);
940 frame->setRequiredFrame(prevFrame->frameId()); // DEP7
942 frame->setHasAlpha(true);
946 frame->setHasAlpha(prevFrame->hasAlpha() || (reportsAlpha && !blendWithPrevFrame));