• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kivy / kivy / 27977373136
60%

Build:
DEFAULT BRANCH: master
Ran 22 Jun 2026 07:21PM UTC
Jobs 2
Files 345
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

22 Jun 2026 07:10PM UTC coverage: 60.408% (+0.9%) from 59.552%
27977373136

push

github

web-flow
Video: AVFoundation provider (macOS+IOS) + thumbnails, buffering, options, cross-platform demo (#9314)

* Video: add AVFoundation provider (macOS/iOS) + thumbnails, buffering, options on VideoBase

- New core video provider `video_avfoundation` (default on Darwin):
  Cython .pyx + Objective-C++ implementation shared between macOS and
  iOS. Zero-copy texture pipeline (IOSurface -> ANGLE pbuffer ->
  GL_TEXTURE_2D, wrapped via Texture(id=..., nofree=True)) is compiled
  when the build environment exposes ANGLE EGL headers; otherwise the
  provider falls back to a CPU memcpy path via Texture.blit_buffer.
  Thumbnails via AVAssetImageGenerator with an in-place BGRA->RGBA
  swizzle so the result blits on ANGLE/Metal as well as GL.

- VideoBase 3.0.0 surface:
  - `generate_thumbnail(filename, time)` classmethod (default: None).
  - `options` dict forwarded opaquely to providers; AVFoundation
    whitelist: `automatically_waits_to_minimize_stalling`,
    `force_cpu_copy`. Unknown keys are logged once and tolerated so
    apps can stash extra metadata in the dict.
  - `buffering` BooleanProperty + `on_buffering` event: a single
    signal that covers both the initial pre-playback wait and any
    mid-stream rebuffer (mapped to `AVPlayer.timeControlStatus` in the
    AVF provider). Mirrored on the Video widget.
  - Drive-by: add `_fps` to `VideoBase.__slots__` (latent
    AttributeError on instantiation).

- Video widget:
  - Forwards `options` to the core video and exposes the new
    `buffering` boolean.
  - `options` reclassified from `ObjectProperty` to
    `DictProperty(allownone=True)`: per-instance fresh defaults
    (no shared mutable default), validates dict-or-None at assign,
    and dispatches on top-level mutation as well as reassignment.
  - Docstring now lists the supported keys for each provider that
    consumes `options`.

- `Texture.__init__` gains `nofree=False` so externally-owned GL
  texture ids (e.g. the AVF zero-copy id) survive Kivy's... (continued)

2405 of 4866 branches covered (49.42%)

82 of 141 new or added lines in 4 files covered. (58.16%)

7 existing lines in 2 files now uncovered.

23803 of 39404 relevant lines covered (60.41%)

1.45 hits per line

Uncovered Changes

Lines Coverage ∆ File
47
30.88
kivy/tests/test_video_avfoundation.py
10
55.3
-1.71% kivy/uix/video.py
2
77.24
2.24% kivy/core/video/__init__.py

Coverage Regressions

Lines Coverage ∆ File
6
64.96
-1.53% kivy/modules/inspector.py
1
68.36
-0.12% kivy/core/window/__init__.py
Jobs
ID Job ID Ran Files Coverage
1 27977373136.1 22 Jun 2026 07:21PM UTC 345
58.01
GitHub Action Run
2 27977373136.2 22 Jun 2026 07:22PM UTC 345
59.48
GitHub Action Run
Source Files on build 27977373136
  • Tree
  • List 345
  • Changed 13
  • Source Changed 4
  • Coverage Changed 13
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #27977373136
  • 06640d94 on github
  • Prev Build on master (#27977218873)
  • Next Build on master (#27978273122)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc