diff --git a/doc/webp-container-spec.txt b/doc/webp-container-spec.txt index ffcb1541..53953cae 100644 --- a/doc/webp-container-spec.txt +++ b/doc/webp-container-spec.txt @@ -378,6 +378,9 @@ color is also used when disposal method is `1`. * Viewer applications SHOULD treat the background color value as a hint, and are not required to use it. + * The canvas is cleared at the start of each loop. The background color MAY be + used to achieve this. + Loop Count: 16 bits (_uint16_) : The number of times to loop the animation. `0` means infinitely. @@ -719,33 +722,37 @@ pseudocode: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ assert VP8X.flags.hasAnimation canvas ← new image of size VP8X.canvasWidth x VP8X.canvasHeight with -background color ANIM.background_color. + background color ANIM.background_color. loop_count ← ANIM.loopCount dispose_method ← ANIM.disposeMethod if loop_count == 0: loop_count = ∞ frame_params ← nil -for loop = 0, ..., loop_count - 1 - assert next chunk in image_data is ANMF - frame_params.frameX = Frame X - frame_params.frameY = Frame Y - frame_params.frameWidth = Frame Width Minus One + 1 - frame_params.frameHeight = Frame Height Minus One + 1 - frame_params.frameDuration = Frame Duration - assert VP8X.canvasWidth >= frame_params.frameX + frame_params.frameWidth - assert VP8X.canvasHeight >= frame_params.frameY + frame_params.frameHeight - for subchunk in 'Frame Data': - if subchunk.tag == "ALPH": - assert alpha subchunks not found in 'Frame Data' earlier - frame_params.alpha = alpha_data - else if subchunk.tag == "VP8 " OR subchunk.tag == "VP8L": - assert bitstream subchunks not found in 'Frame Data' earlier - frame_params.bitstream = bitstream_data - render frame with frame_params.alpha and frame_params.bitstream on canvas - with top-left corner in (frame_params.frameX, frame_params.frameY), using - dispose method dispose_method. - Show the contents of the image for frame_params.frameDuration * 1ms. -canvas contains the decoded canvas. +assert next chunk in image_data is ANMF +for loop = 0..loop_count - 1 + clear canvas to ANIM.background_color or application defined color + until eof or non-ANMF chunk + frame_params.frameX = Frame X + frame_params.frameY = Frame Y + frame_params.frameWidth = Frame Width Minus One + 1 + frame_params.frameHeight = Frame Height Minus One + 1 + frame_params.frameDuration = Frame Duration + frame_right = frame_params.frameX + frame_params.frameWidth + frame_bottom = frame_params.frameY + frame_params.frameHeight + assert VP8X.canvasWidth >= frame_right + assert VP8X.canvasHeight >= frame_bottom + for subchunk in 'Frame Data': + if subchunk.tag == "ALPH": + assert alpha subchunks not found in 'Frame Data' earlier + frame_params.alpha = alpha_data + else if subchunk.tag == "VP8 " OR subchunk.tag == "VP8L": + assert bitstream subchunks not found in 'Frame Data' earlier + frame_params.bitstream = bitstream_data + render frame with frame_params.alpha and frame_params.bitstream on + canvas with top-left corner at (frame_params.frameX, + frame_params.frameY), using dispose method dispose_method. + canvas contains the decoded image. + Show the contents of the canvas for frame_params.frameDuration * 1ms. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Example file layouts