Skip to content

v1.11.0

Choose a tag to compare

@Lu-Fi Lu-Fi released this 25 Oct 12:52
· 43 commits to main since this release

Added

  • Encoder ROI on T40/T41 with OpenIMP: experimental, runtime-detected through
    OpenIMP_Cap_EncRoi. Regions are sent as QP deltas. With a T41 libimp
    older than OpenIMP 958f7f3 the encoder ignores them under FixQP; such a
    stream reports caps.roi.streams[N] = "fixqp" and the WebUI shows the
    ROI editor inactive with the reason. From 958f7f3 FixQP streams take
    regions too.
  • Crop (image.fcrop_*) on T40/T41 with OpenIMP through the ISP AutoZoom:
    experimental, runtime-detected through OpenIMP_Cap_AutoZoom. Live on
    every stream up to the driver's envelope at once (1920x1080 with
    open-tx-isp 9fc513c8, read from t41_msca_live_max_w/h; 768x432 with
    older drivers), a larger one restarts its framesource with the encoder
    stopped (about 45 ms gap, new keyframe). No upscaling. T40 with OpenIMP
    takes the same path (live up to 4K, no restart).
  • T40/T41 rotation follows the vendor I2D semantics: the framesource stays
    unrotated, only the encoder gets the swapped size; 180 is a real I2D
    rotate. With OpenIMP it needs OpenIMP_Cap_I2dRotate, otherwise rotation
    is refused (caps.rotation = [0]). Width/height must be multiples of 8.
  • T41 with OpenIMP: image.drc_strength, image.dpc_strength and
    image.defog_strength (ISP module ratios 2/3/4, 0..255, 128 = vendor
    picture), live.
  • /control encoder.<N>.telemetry on T40/T41 with OpenIMP
    (OpenIMP_Encoder_GetTelemetry): frames, bytes, IDR count, delivered fps
    and kbit/s, average and maximum encode time.
  • T40: RTSP and fMP4 clients wait up to 5 s (was 2 s) for the first
    parameter sets; the open T40 driver needs about 3.3 s from start to the
    first frame.
  • Test pattern (OpenIMP OpenIMP_Cap_TestPattern): {"testpattern":{"mode":0..3}}
    in /control, buttons on the WebUI preview page. Day/night is held in day
    mode while it runs; mode 3 scores the motion detection (hits, misses,
    false alarms, detection delay).
    Mode 4 shows the sensor's own test pattern through the whole ISP, with
    AE/AWB hold switches (caps.testpattern.sensor).
  • caps.fcrop.restart: per stream, 1 = it takes the current window only at
    the next timps start. caps.fcrop.api: frontcrop or autozoom.
  • Day/night: a second look trigger at night. When the colour of the
    illuminator-lit picture (global R/G or B/G of the ISP's AWB statistics)
    moves daynight.color_pct (new, default 3, 0 = off, live) from its value
    after the last look for 20 s, the camera looks at once. A weak lamp that
    hardly brightens the IR-lit picture (Eufy S350 with a 30 % bulb: exposure
    unchanged, B/G -4 %) now ends the night within about 40 s instead of at
    the next 45-min look. It only starts a look (8 s dark, no click); colour
    looks are at least 5 min apart and the gap doubles up to 45 min until a
    timer look. No colour look while the lit scene is darker than the
    reference; after a colour look that found night, the colour returning to
    its value before the look is no new light. The statistics are read every
    5 s at night (43-123 µs per read). Per-zone AWB statistics are read on T40/T41/T23/T31/C100
    vendor, T10/T20 OpenIMP, and on T23/T31 and T40/T41 OpenIMP where the
    libimp exports OpenIMP_Cap_AwbZone / OpenIMP_Cap_AwbStatistics;
    elsewhere GET /control reports daynight.color_trigger: "unavailable". New status fields
    daynight.color_trigger and daynight.color_dev_pct.
  • FrontCrop: image.fcrop_upscale_pct (default -1 = leave the driver's
    value, live) sets the open-tx-isp fcrop_upscale_pct on T23/T31 OpenIMP,
    so a crop window smaller than the stream is upscaled; ceiling in the new
    caps.fcrop.upscale_max (100 = 2.0x on both, device-tested; T31 at 150
    hard-hangs). Lowering it re-applies the window or returns to the full
    sensor. Elsewhere a POST answers "unsupported" (104).
  • GET /control: video.<N>.rotate_path (off/sw/hw/band, USE_ROTATE
    builds) says how a running stream is rotated, so the WebUI can tell the T23
    software path (text OSD only, no logo or privacy) and the vendor-libimp top
    band from a full-frame rotation.
  • GET /control?stats=1: a system object with load average, total and
    available memory, the machine's CPU % and timpsd's own CPU % and RSS, for the
    WebUI stats card. CPU values are tick deltas since the previous sample
    (held at least 2 s), -1 at first.

Changed

  • T40 with OpenIMP: general.fs_keepalive auto is on, like T23/T41. Without
    frames the open T40 driver runs no AE, so day/night read a frozen exposure
    while nobody watched.
  • Day/night: the boot check no longer waits up to 2 min for a steady
    exposure. When the first four readings are all above 4x day_gain it
    checks at once; otherwise it waits at most 30 s. An open-stack T31 in a
    dark garage showed a black day picture for 2 min after every start.
  • Day/night: with a working colour trigger the timer look runs every 6 h instead of 45 min (about 6 instead of 16 dark 8 s looks per night); jump and colour looks still react at once. Without colour statistics it stays at 45 min.
  • Day/night: a look taken while the lit level is still moving (a lamp coming
    on, another camera's look) no longer sets the reference
    (night_baseline); the next settled level after it does, within 60 s. A
    jump held for 20 s still counts.
  • Day/night: a look started by a jump no longer asks below a fixed
    2 × day_gain. Every look→check pair teaches k (check reading / dark
    look reading, median of the last 5, 0.7..2), and the dark readings of the
    last 4 failed checks are kept across jumps. A jump look now asks below
    0.9 × the lowest failed dark reading (at most 2 × day_gain, at least
    day_gain / k). Evening lamps and a TV in a living room (the
    check read 1.4-1.9 × the look) cost a click pair at every jump, about 8 per
    evening; neighbouring cameras' infrared did the same all night on a T10
    in a basement. Now about 2 per evening or night, and a brighter light
    (the morning ceiling light, a 100 % lamp) still asks. k is logged in the
    look (...) debug line.
  • Day/night: light that creeps in (dawn with daylight infrared, a fire)
    asks again only once the k of the failed check predicts day; a sudden
    light still asks at once. A bedroom dawn on replay: 7 -> 3 failed checks.
  • Day/night: every stream gets a keyframe 0.8 s after an IR or IR-cut
    switch, once the AE has settled; before, starved P-frames showed the old
    picture until the next GOP keyframe.

Fixed

  • Day/night: the check lockout after failed checks stops doubling at 16 min
    (1, 2, 4, 8, 16, 16 ... min). A T10 among other IR cameras had grown it past
    an hour and stayed in night while its neighbours switched to day. A look
    that predicts day during a lockout now logs -> locked (N s) instead of
    -> check.
  • daynight.trace_path rotates to <path>.1 past 256 KB instead of 1 MB:
    at about 32 KB/h the trace on /tmp now holds at most 512 KB of RAM
    (before 2 MB) on 36-42 MB cameras.
  • Day/night on vendor T21 no longer reads daynight.isp_path: the vendor
    tx-isp-t21 driver corrupts the kernel heap on that proc read, and an oops
    killed the day/night thread. Exposure comes from IMP only there.
  • A day/night thread that stops ticking (no tick for 10 x interval_ms, at
    least 60 s) is logged as an error once.
  • Day/night: a check takes "day" only once the reading has stayed below
    day_gain for 10 s after the settle time; "night" is still final at once.
    The open T40 driver reported the night-side exposure for about 14 s after
    the switch, so a check in the dark read "day" and the camera sat in day
    mode with its illuminator off, which also set off every IR camera next to
    it.
  • T40/T41: 4K JPEG snapshots larger than 1 MiB were dropped; the JPEG
    buffer cap is 4 MiB there (a 4K frame at q75 is 1.6-3.3 MB).