### Reader limits for picture, audio and video payloads

The last decoders that allocated what a payload declared now hold it to limits
(SPEC §2), as manifests and text payloads already were.

- **The limits.** A reader must accept a picture up to 65 536 pixels on a side and
  2²⁷ pixels, audio up to 2²⁷ samples counting every channel, and AV1 up to 2²⁰
  temporal units of such pictures. It may refuse past them (`image_too_large`,
  `audio_decoded_too_long`, `video_too_large`), from what the payload declares wherever
  it declares it. The writers refuse the same.
- **Payload framing** (SPEC §5). The AV1 framing that the reference has always used,
  and packaging §7 writes, is now in the standard itself. So are the FLAC and Ogg Opus
  forms, and the rule that an image payload decodes only as its own format.
- **Defects fixed in the reference decoders.**
  - A FLAC `STREAMINFO` declaring 2³⁶ − 1 samples made the decoder ask for 256 GiB up
    front.
  - A 24-bit FLAC decoded to about ±256 instead of ±1.
  - An Ogg Opus stream whose source rate was not an Opus rate (44.1 kHz) was refused.
  - `png_decode` and `jpeg_decode` decoded any format the bytes resembled.
  - `jxl_decode` refused a deeper-than-8-bit picture and returned one or four channels
    where it promised three.
  - The AV1 decoder decoded every packet before truncating to `n`. It panicked on
    monochrome, misread 4:2:2, 4:4:4 and 10- and 12-bit frames, and let dav1d allocate
    whatever a sequence header declared.
- **Streaming AV1.** `av1_decode_each` hands on one frame at a time. `av1_decode` and
  `wai_video_av1_decode`, which return every frame at once, refuse past 4 GiB of output
  from the header (`video_decoded_too_large`). `wai decode` streams frames to its file.
- **Unchanged.** Every 8-bit 4:2:0 frame decodes byte for byte as before. The AVIF path
  now calls libavif directly with the reader limits as its decoder limits (it drops
  `libavif-image` and the rav1e build inside libavif), and `include/wai.h` is
  regenerated.
- **Tests.** `tests/media_decode_bounds.rs` checks each limit at its edge and one past
  it, and each defect above. CI runs it in `codec-wrappers`. Five mutations, each
  reintroducing one defect, fail it.

