Camera en microfoon
FAQ › EUZOS Desktop › Camera en microfoon · English
Wat is het?
EUZOS heeft een eigen UVC-driver voor USB-camera's (USB Video Class 1.0–1.5) en biedt ze aan Linux-apps (Chromium, bijvoorbeeld videogesprekken in Teams) aan als /dev/videoN met een deel van V4L2. De microfoon komt van de HD Audio-driver (zie Geluid). Een privacy-indicator in de taakbalk (een rood label met een camera- en/of microfoonicoon) staat aan zolang iets de camera of de microfoon gebruikt, en volgt de toestand van de hardware, niet alleen die van de app. Instellingen › Camera en microfoon toont de apparaten en de Apps met toegang, en heeft Camera testen en Microfoon testen.
Alleen EUZOS Desktop; EUZOS Server weigert camera en privacy.
Hoe doe ik…?
Hoe zie ik welke camera's EUZOS gevonden heeft?
Typ camera in de console: per camera de formaten, alternate settings, regelaars, tellers en de toestand van de stream (stream: on|off|uncertain, alternate setting N (camera: M)). Op het bureaublad: Instellingen › Camera en microfoon (naam, USB-poort, snelheid en de grootste resolutie per formaat).
Hoe test ik de camera?
Instellingen › Camera en microfoon › Camera testen opent een venster met het live beeld. Je kiest de camera, de Resolutie (tot 1920×1080), het Formaat (MJPEG of YUYV) en 10, 15 of 30 Beelden per seconde (standaard 640×480 MJPEG 30), en stelt Helderheid en Contrast in als de camera die heeft. Het venster sluiten zet de camera uit. Het beeld blijft op deze pc en wordt nergens bewaard.
Hoe test ik de microfoon?
Instellingen › Camera en microfoon › Microfoon testen: een niveaumeter van −60 tot 0 dBFS. Op de console: sound capture [ms] (zie Geluid).
Hoe zie ik wie de camera of de microfoon gebruikt?
Klik op het rode label in de taakbalk, of typ privacy in de console. De consoleversie toont ook het procesnummer en hoe lang al, bijvoorbeeld Chromium is using the camera (USB HD Webcam) (process 42, 12 s); een vermelding van de hardware zelf staat er als (hardware).
Waarom blijft het rode label aan nadat ik de app sloot?
De indicator volgt de hardware: hij gaat pas uit als de camera het stopverzoek heeft bevestigd. Is dat niet bevestigd, dan zegt het paneel "De camera staat nog aan zonder app (…)". Afmelden probeert het stoppen opnieuw (uvc::all_off). De camera loskoppelen beëindigt de stream ook.
Welke apps mogen de camera gebruiken?
Alleen programma's met het recht camera (PERM_CAMERA); zonder dat recht bestaat /dev/videoN voor hen niet (ENOENT). Nu is dat Chromium (chrome uit het pakket chromium), en testprogramma's die gestart zijn met run +camera <naam>. Microfoon: recht PERM_MICROPHONE (Chromium, run +mic). Een kindproces krijgt nooit meer rechten dan zijn ouder.
Hoe maak ik één foto vanaf de console?
camera photo [n] [mjpeg|yuyv] [BxH] neemt één beeld van camera n (standaard 0, 640×480 MJPEG) na ongeveer 1,5 s (de belichting moet inregelen), hoogstens 5 s, en drukt het af als base64-regels tussen b64-begin en b64-einde. Decodeer ze op een andere computer (de base64 heeft geen =-opvulling). Houd zulke beelden buiten git.
Hoe open ik de testvensters op afstand?
Alleen in een testbuild (niet in de productiebuild): camera test opent Camera testen op het bureaublad, camera test microphone opent Microfoon testen, camera test off sluit de testvensters en meldt hoeveel er gesloten zijn.
Details
- Aansluiten (
uvc::attach, ook bij hot-plug): een apparaat met een VideoControl- en een VideoStreaming-interface; de hele configuratiedescriptor (tot 16 KiB) wordt gelezen en ontleed (euzos_uvc::desc), daarna SET_CONFIGURATION. De camera blijft uit. - Aanzetten (
uvc::start): probe en commit (formaat, frame, interval), de kleinste alternate setting die de payload aankan, een isochroon (of bulk) endpoint op de xHCI, SET_INTERFACE, en de transfer descriptors in de wachtrij. - Beelden gaan direct in de buffers van de app (
euzos_uvc::payload::Assembler); een beeld met een fout of een verloren pakket wordt weggegooid (het volgnummer telt door). - Uitzetten (
uvc::stop): Stop Endpoint, het endpoint weghalen, het stopverzoek aan de camera (bij bulk: CLEAR_FEATURE(ENDPOINT_HALT)), altijd SET_INTERFACE 0, en pas daarna gaat het DMA-geheugen terug. Dit gebeurt ook bij loskoppelen, als het programma stopt en bij afmelden. - Regelaars: helderheid, contrast, verzadiging, tint, witbalans (automatisch en temperatuur), gamma, versterking, netfrequentie, scherpte, tegenlichtcompensatie, automatische belichting, belichtingstijd, dynamische framerate — als de camera ze heeft.
- Grenzen: hoogstens 2048 descriptors, 4 streaming-interfaces, 16 formaten, 64 frames per formaat, 32 intervallen, 32 alternate settings, beelden tot 24 MiB. Gefuzzt (
make camera-test). - Camera testen draait in een thread
cameratest: MJPEG wordt gedecodeerd meteuzos_image::jpeg(met de standaard-Huffmantabellen als de camera ze weglaat), YUYV/NV12 wordt omgezet meteuzos_uvc::preview(BT.601, vaste komma). Hoogstens 30 beelden/s, hoogstens 1920×1080. - Microfoon testen draait in een thread
microphonetestmethda::meter_on/meter_takeelke 50 ms (alleen x86-64). - Niets van het beeld of het geluid wordt bewaard of verstuurd.
Naslag
Consoleopdrachten
| Opdracht | Argumenten | Wat het doet |
|---|---|---|
camera | — | per camera: formaten, alternate settings, regelaars, tellers, toestand van de stream; plus "Settings › tests: n session(s) active" |
camera photo | [n] [mjpeg|yuyv] [BxH] | één beeld als base64-regels (b64-begin <jpg|yuyv> <B>x<H>, b64 …, b64-einde); oude alias foto |
camera test | — | alleen testbuild: Camera testen op het bureaublad openen |
camera test microphone | — | alleen testbuild: Microfoon testen openen; oude alias microfoon |
camera test off | — | alleen testbuild: de testvensters sluiten; oude alias uit |
privacy | — | wie de camera of de microfoon gebruikt (proces, seconden, of (hardware)) |
run +camera <naam> / run +mic <naam> | [argumenten] | een Linux-testprogramma starten met camera- of microfoonrecht (bijvoorbeeld camtest) |
Functies en modules
| Functie / module | Rol |
|---|---|
kernel::usb::uvc::attach | een camera herkennen en instellen bij (hot-)plug |
kernel::usb::uvc::start / stop / all_off | een stream aan- en uitzetten; alles uit (afmelden) |
kernel::usb::uvc::event | voltooide transfers afhandelen (vanuit usb::poll) |
kernel::usb::uvc::list | de camera's (Info) voor Instellingen en camera photo |
kernel::usb::uvc::control_get / control_set | regelaars van de camera (helderheid, contrast, …) |
kernel::usb::uvc::status_lines / photo | de opdrachten camera en camera photo |
kernel::linux::video | /dev/videoN (V4L2) voor Linux-programma's |
kernel::cameratest (MediaList, Window, status_line) | Instellingen › Camera en microfoon, de testvensters |
kernel::privacy::begin | een gebruik beginnen; geeft een Usage-handle terug (loslaten beëindigt het gebruik) |
kernel::privacy::hardware | de UVC-driver meldt per camera of de stream aan staat |
kernel::privacy::active / list / lines / version / panel / command | toestand voor de indicator, het paneel en de opdracht privacy |
kernel::screen::test_open / test_close | de testvensters openen/sluiten (gebruikt door camera test) |
euzos_uvc (desc, probe, iso, payload, stream, control, v4l2, preview) | de pure UVC-logica, V4L2-wachtrij en formaten, YUV→RGB |
euzos_ui::apps::cameratest | het tekenen van de testvensters |
Protocolberichten en formaten
V4L2-ioctls die /dev/videoN ondersteunt (drivernaam uvcvideo, bus usb-xhci-<poort>):
| ioctl | Wat |
|---|---|
QUERYCAP | VIDEO_CAPTURE, STREAMING, EXT_PIX_FORMAT |
ENUM_FMT, ENUM_FRAMESIZES, ENUM_FRAMEINTERVALS | MJPEG, YUYV, NV12 (wat de camera heeft) |
G_FMT, S_FMT, TRY_FMT | pixelformaat en dichtstbijzijnde grootte |
G_PARM, S_PARM | frame-interval |
ENUMINPUT, G_INPUT, S_INPUT, G/S_PRIORITY | één ingang "Camera 1" |
REQBUFS, QUERYBUF, mmap | alleen MMAP, hoogstens 8 buffers in één memfd |
QBUF, DQBUF | de wachtrij; ENODEV als de camera weg is |
STREAMON, STREAMOFF | camera aan/uit; ENOSPC bij te weinig USB-bandbreedte |
QUERYCTRL, QUERYMENU, G_CTRL, S_CTRL, G/S/TRY_EXT_CTRLS | de regelaars |
poll / epoll | IN als er een beeld klaar is |
Niet ondersteund: read, USERPTR/DMABUF, /sys/class/video4linux.
Rechten (rechtenbits van een proces, kernel::proc): PERM_SOUND, PERM_MICROPHONE, PERM_CAMERA (bit 16).
Zie ook
- docs/CAMERA.md: driver, V4L2, privacy, Instellingen en testresultaten
- docs/SOUND.md, "Capture"
- docs/DESKTOP-DESIGN.md, § 14 (Instellingen › Camera en microfoon)
- docs/CHROMIUM.md, stap C.9
- Geluid, Browser en Chromium
EUZOS