stanag4609 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- stanag4609-0.1.0/.gitignore +21 -0
- stanag4609-0.1.0/CHANGELOG.md +441 -0
- stanag4609-0.1.0/CONTRIBUTING.md +106 -0
- stanag4609-0.1.0/LICENSE +21 -0
- stanag4609-0.1.0/PKG-INFO +905 -0
- stanag4609-0.1.0/README.md +844 -0
- stanag4609-0.1.0/docs/ADAPTERS.md +106 -0
- stanag4609-0.1.0/docs/AI_SIDECARS.md +607 -0
- stanag4609-0.1.0/docs/AUDIO.md +87 -0
- stanag4609-0.1.0/docs/BENCHMARKS.md +79 -0
- stanag4609-0.1.0/docs/CLI.md +91 -0
- stanag4609-0.1.0/docs/COMPLETION_AUDIT.md +63 -0
- stanag4609-0.1.0/docs/CONFORMANCE.md +133 -0
- stanag4609-0.1.0/docs/DEVELOPMENT.md +50 -0
- stanag4609-0.1.0/docs/DOCUMENTATION.md +99 -0
- stanag4609-0.1.0/docs/ECOSYSTEM.md +77 -0
- stanag4609-0.1.0/docs/FFMPEG_GSTREAMER.md +65 -0
- stanag4609-0.1.0/docs/GEOJSON.md +83 -0
- stanag4609-0.1.0/docs/LIMITATIONS.md +91 -0
- stanag4609-0.1.0/docs/LIVE_PIPELINE.md +257 -0
- stanag4609-0.1.0/docs/METADATA_STD.md +215 -0
- stanag4609-0.1.0/docs/PCR_CADENCE.md +90 -0
- stanag4609-0.1.0/docs/PLAYER.md +170 -0
- stanag4609-0.1.0/docs/PSI_CADENCE.md +91 -0
- stanag4609-0.1.0/docs/PTS_CADENCE.md +65 -0
- stanag4609-0.1.0/docs/PUBLIC_FIXTURES.md +106 -0
- stanag4609-0.1.0/docs/QUICKSTART.md +193 -0
- stanag4609-0.1.0/docs/RELEASING.md +82 -0
- stanag4609-0.1.0/docs/ROADMAP.md +127 -0
- stanag4609-0.1.0/docs/RTP_TRANSPORT.md +186 -0
- stanag4609-0.1.0/docs/STANDARDS.md +82 -0
- stanag4609-0.1.0/docs/TIMESTAMPS.md +119 -0
- stanag4609-0.1.0/docs/TRANSPORT_RATE.md +69 -0
- stanag4609-0.1.0/docs/UDP_TRANSPORT.md +32 -0
- stanag4609-0.1.0/docs/VERIFIER.md +328 -0
- stanag4609-0.1.0/docs/VIDEO.md +32 -0
- stanag4609-0.1.0/docs/WEB_CLIENTS.md +80 -0
- stanag4609-0.1.0/docs/adr/0001-core-boundary.md +19 -0
- stanag4609-0.1.0/docs/adr/0002-live-transform-pipeline.md +87 -0
- stanag4609-0.1.0/docs/api/index.md +41 -0
- stanag4609-0.1.0/docs/api/klv.md +13 -0
- stanag4609-0.1.0/docs/api/media.md +20 -0
- stanag4609-0.1.0/docs/api/player.md +12 -0
- stanag4609-0.1.0/docs/api/range.md +46 -0
- stanag4609-0.1.0/docs/api/sidecar.md +8 -0
- stanag4609-0.1.0/docs/api/st0601.md +16 -0
- stanag4609-0.1.0/docs/api/st0902.md +17 -0
- stanag4609-0.1.0/docs/api/st0903.md +20 -0
- stanag4609-0.1.0/docs/api/transformations.md +91 -0
- stanag4609-0.1.0/docs/api/transport.md +10 -0
- stanag4609-0.1.0/docs/api/verifier.md +8 -0
- stanag4609-0.1.0/docs/api/video.md +12 -0
- stanag4609-0.1.0/docs/assets/benchmarks/live-player-day-flight.json +25 -0
- stanag4609-0.1.0/docs/assets/benchmarks/live-player-esri-truck.json +25 -0
- stanag4609-0.1.0/docs/assets/benchmarks/live-player-night-flight-ir.json +25 -0
- stanag4609-0.1.0/docs/assets/screenshots/ai-sidecar-player.jpg +0 -0
- stanag4609-0.1.0/docs/assets/screenshots/fmv-operations-dashboard.jpg +0 -0
- stanag4609-0.1.0/docs/assets/screenshots/fmv-verifier-report.jpg +0 -0
- stanag4609-0.1.0/docs/index.md +103 -0
- stanag4609-0.1.0/docs/requirements/H222.0-2014.md +35 -0
- stanag4609-0.1.0/docs/requirements/MISP-2019.1.md +82 -0
- stanag4609-0.1.0/docs/requirements/SMPTE-RP217-2001.md +31 -0
- stanag4609-0.1.0/docs/requirements/SMPTE-ST336-2017.md +37 -0
- stanag4609-0.1.0/docs/requirements/ST0102.12.md +38 -0
- stanag4609-0.1.0/docs/requirements/ST0107.5.md +47 -0
- stanag4609-0.1.0/docs/requirements/ST0601.19.md +116 -0
- stanag4609-0.1.0/docs/requirements/ST0604.6.md +35 -0
- stanag4609-0.1.0/docs/requirements/ST0804.4.md +45 -0
- stanag4609-0.1.0/docs/requirements/ST0806.4.md +37 -0
- stanag4609-0.1.0/docs/requirements/ST0902.8.md +48 -0
- stanag4609-0.1.0/docs/requirements/ST0903.6.md +78 -0
- stanag4609-0.1.0/docs/requirements/ST1001.1.md +48 -0
- stanag4609-0.1.0/docs/requirements/ST1002.3.md +27 -0
- stanag4609-0.1.0/docs/requirements/ST1010.3.md +33 -0
- stanag4609-0.1.0/docs/requirements/ST1201.5.md +20 -0
- stanag4609-0.1.0/docs/requirements/ST1202.3.md +22 -0
- stanag4609-0.1.0/docs/requirements/ST1204.3.md +45 -0
- stanag4609-0.1.0/docs/requirements/ST1206.1.md +20 -0
- stanag4609-0.1.0/docs/requirements/ST1303.2.md +33 -0
- stanag4609-0.1.0/docs/requirements/ST1402.2.md +162 -0
- stanag4609-0.1.0/docs/requirements/ST1601.2.md +29 -0
- stanag4609-0.1.0/docs/requirements/ST1602.2.md +18 -0
- stanag4609-0.1.0/docs/requirements/ST1607.2.md +33 -0
- stanag4609-0.1.0/docs/tutorials/ai_to_vmti.md +124 -0
- stanag4609-0.1.0/docs/tutorials/create_fmv.md +81 -0
- stanag4609-0.1.0/docs/tutorials/inspect_fmv.md +126 -0
- stanag4609-0.1.0/docs/tutorials/live_fanout.md +75 -0
- stanag4609-0.1.0/docs/tutorials/web_dashboard.md +86 -0
- stanag4609-0.1.0/examples/ai_sidecar/correlate_frame.py +35 -0
- stanag4609-0.1.0/examples/ai_sidecar/decode_video.py +37 -0
- stanag4609-0.1.0/examples/ai_sidecar/emit_vmti_packet.py +30 -0
- stanag4609-0.1.0/examples/ai_sidecar/http_json.py +57 -0
- stanag4609-0.1.0/examples/ai_sidecar/onnx_runtime.py +31 -0
- stanag4609-0.1.0/examples/ai_sidecar/ontology_vmti.py +54 -0
- stanag4609-0.1.0/examples/ai_sidecar/pipeline_graph.py +43 -0
- stanag4609-0.1.0/examples/ai_sidecar/queue_frames.py +23 -0
- stanag4609-0.1.0/examples/ai_sidecar/triton_async.py +34 -0
- stanag4609-0.1.0/examples/ai_sidecar/ultralytics_yolo.py +17 -0
- stanag4609-0.1.0/examples/audio_frames.py +57 -0
- stanag4609-0.1.0/examples/tutorials/ai_sidecar_ui.py +237 -0
- stanag4609-0.1.0/examples/tutorials/ai_to_vmti.py +113 -0
- stanag4609-0.1.0/examples/web_dashboard/index.html +104 -0
- stanag4609-0.1.0/examples/web_dashboard/server.py +48 -0
- stanag4609-0.1.0/mkdocs.yml +165 -0
- stanag4609-0.1.0/pyproject.toml +147 -0
- stanag4609-0.1.0/references/fixtures.json +248 -0
- stanag4609-0.1.0/references/requirements.json +389 -0
- stanag4609-0.1.0/references/standards/manifest.json +575 -0
- stanag4609-0.1.0/src/stanag4609/__init__.py +1069 -0
- stanag4609-0.1.0/src/stanag4609/audio/__init__.py +6 -0
- stanag4609-0.1.0/src/stanag4609/audio/pyav.py +132 -0
- stanag4609-0.1.0/src/stanag4609/audio/timing.py +198 -0
- stanag4609-0.1.0/src/stanag4609/csvexport.py +192 -0
- stanag4609-0.1.0/src/stanag4609/csvio.py +87 -0
- stanag4609-0.1.0/src/stanag4609/csvmux.py +317 -0
- stanag4609-0.1.0/src/stanag4609/errors.py +35 -0
- stanag4609-0.1.0/src/stanag4609/geojson.py +476 -0
- stanag4609-0.1.0/src/stanag4609/imap.py +242 -0
- stanag4609-0.1.0/src/stanag4609/klv/__init__.py +39 -0
- stanag4609-0.1.0/src/stanag4609/klv/ber.py +128 -0
- stanag4609-0.1.0/src/stanag4609/klv/checksum.py +55 -0
- stanag4609-0.1.0/src/stanag4609/klv/key.py +139 -0
- stanag4609-0.1.0/src/stanag4609/klv/local_set.py +71 -0
- stanag4609-0.1.0/src/stanag4609/klv/model.py +61 -0
- stanag4609-0.1.0/src/stanag4609/klv/stream.py +151 -0
- stanag4609-0.1.0/src/stanag4609/player/__init__.py +39 -0
- stanag4609-0.1.0/src/stanag4609/player/benchmark.py +264 -0
- stanag4609-0.1.0/src/stanag4609/player/live.py +752 -0
- stanag4609-0.1.0/src/stanag4609/player/server.py +651 -0
- stanag4609-0.1.0/src/stanag4609/player/static/index.html +410 -0
- stanag4609-0.1.0/src/stanag4609/player/timeline.py +583 -0
- stanag4609-0.1.0/src/stanag4609/py.typed +1 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/__init__.py +72 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/correlation.py +207 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/http.py +176 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/metrics.py +136 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/model.py +206 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/onnx.py +102 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/pipeline.py +161 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/pyav.py +176 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/queue.py +105 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/triton.py +116 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/ultralytics.py +167 -0
- stanag4609-0.1.0/src/stanag4609/sidecar/vmti.py +353 -0
- stanag4609-0.1.0/src/stanag4609/st0102.py +587 -0
- stanag4609-0.1.0/src/stanag4609/st0601.py +4143 -0
- stanag4609-0.1.0/src/stanag4609/st0601_state.py +1280 -0
- stanag4609-0.1.0/src/stanag4609/st0604.py +598 -0
- stanag4609-0.1.0/src/stanag4609/st0806.py +653 -0
- stanag4609-0.1.0/src/stanag4609/st0902.py +754 -0
- stanag4609-0.1.0/src/stanag4609/st0903.py +1443 -0
- stanag4609-0.1.0/src/stanag4609/st0903_geo.py +615 -0
- stanag4609-0.1.0/src/stanag4609/st0903_state.py +244 -0
- stanag4609-0.1.0/src/stanag4609/st0903_tracker.py +204 -0
- stanag4609-0.1.0/src/stanag4609/st0903_vocab.py +766 -0
- stanag4609-0.1.0/src/stanag4609/st1001.py +447 -0
- stanag4609-0.1.0/src/stanag4609/st1002.py +858 -0
- stanag4609-0.1.0/src/stanag4609/st1010.py +522 -0
- stanag4609-0.1.0/src/stanag4609/st1202.py +508 -0
- stanag4609-0.1.0/src/stanag4609/st1204.py +248 -0
- stanag4609-0.1.0/src/stanag4609/st1206.py +375 -0
- stanag4609-0.1.0/src/stanag4609/st1303.py +663 -0
- stanag4609-0.1.0/src/stanag4609/st1402.py +279 -0
- stanag4609-0.1.0/src/stanag4609/st1601.py +478 -0
- stanag4609-0.1.0/src/stanag4609/st1602.py +269 -0
- stanag4609-0.1.0/src/stanag4609/st1607_state.py +598 -0
- stanag4609-0.1.0/src/stanag4609/transport/__init__.py +348 -0
- stanag4609-0.1.0/src/stanag4609/transport/access_unit_timing.py +255 -0
- stanag4609-0.1.0/src/stanag4609/transport/demux.py +503 -0
- stanag4609-0.1.0/src/stanag4609/transport/metadata.py +376 -0
- stanag4609-0.1.0/src/stanag4609/transport/metadata_stream.py +501 -0
- stanag4609-0.1.0/src/stanag4609/transport/mpegts.py +279 -0
- stanag4609-0.1.0/src/stanag4609/transport/mux.py +809 -0
- stanag4609-0.1.0/src/stanag4609/transport/pcr.py +419 -0
- stanag4609-0.1.0/src/stanag4609/transport/pes.py +231 -0
- stanag4609-0.1.0/src/stanag4609/transport/processor.py +264 -0
- stanag4609-0.1.0/src/stanag4609/transport/psi.py +589 -0
- stanag4609-0.1.0/src/stanag4609/transport/psi_timing.py +259 -0
- stanag4609-0.1.0/src/stanag4609/transport/pts.py +183 -0
- stanag4609-0.1.0/src/stanag4609/transport/rate.py +303 -0
- stanag4609-0.1.0/src/stanag4609/transport/rtcp.py +721 -0
- stanag4609-0.1.0/src/stanag4609/transport/rtp.py +552 -0
- stanag4609-0.1.0/src/stanag4609/transport/std.py +2090 -0
- stanag4609-0.1.0/src/stanag4609/transport/std_stream.py +576 -0
- stanag4609-0.1.0/src/stanag4609/transport/timing.py +74 -0
- stanag4609-0.1.0/src/stanag4609/transport/transformer.py +489 -0
- stanag4609-0.1.0/src/stanag4609/transport/udp.py +142 -0
- stanag4609-0.1.0/src/stanag4609/verification_html.py +227 -0
- stanag4609-0.1.0/src/stanag4609/verifier.py +2954 -0
- stanag4609-0.1.0/src/stanag4609/video.py +903 -0
- stanag4609-0.1.0/tests/browser/test_reference_player.py +364 -0
- stanag4609-0.1.0/tests/integration/test_public_fmv.py +414 -0
- stanag4609-0.1.0/tests/unit/test_access_unit_timing.py +179 -0
- stanag4609-0.1.0/tests/unit/test_async_std_model.py +340 -0
- stanag4609-0.1.0/tests/unit/test_audio_pyav.py +144 -0
- stanag4609-0.1.0/tests/unit/test_audio_timing.py +144 -0
- stanag4609-0.1.0/tests/unit/test_ber.py +73 -0
- stanag4609-0.1.0/tests/unit/test_correlation.py +225 -0
- stanag4609-0.1.0/tests/unit/test_csvexport.py +134 -0
- stanag4609-0.1.0/tests/unit/test_csvio.py +45 -0
- stanag4609-0.1.0/tests/unit/test_csvmux.py +181 -0
- stanag4609-0.1.0/tests/unit/test_demux.py +494 -0
- stanag4609-0.1.0/tests/unit/test_documentation.py +100 -0
- stanag4609-0.1.0/tests/unit/test_frame_queue.py +110 -0
- stanag4609-0.1.0/tests/unit/test_geojson.py +313 -0
- stanag4609-0.1.0/tests/unit/test_imap.py +152 -0
- stanag4609-0.1.0/tests/unit/test_klv_stream.py +96 -0
- stanag4609-0.1.0/tests/unit/test_live_player.py +446 -0
- stanag4609-0.1.0/tests/unit/test_local_set.py +35 -0
- stanag4609-0.1.0/tests/unit/test_metadata_stream.py +599 -0
- stanag4609-0.1.0/tests/unit/test_metadata_transport.py +325 -0
- stanag4609-0.1.0/tests/unit/test_mpegts.py +160 -0
- stanag4609-0.1.0/tests/unit/test_mux.py +434 -0
- stanag4609-0.1.0/tests/unit/test_payload_state.py +173 -0
- stanag4609-0.1.0/tests/unit/test_pcr_cadence.py +141 -0
- stanag4609-0.1.0/tests/unit/test_pcr_scheduler.py +173 -0
- stanag4609-0.1.0/tests/unit/test_pes.py +145 -0
- stanag4609-0.1.0/tests/unit/test_player_benchmark.py +123 -0
- stanag4609-0.1.0/tests/unit/test_player_timeline.py +673 -0
- stanag4609-0.1.0/tests/unit/test_processor.py +175 -0
- stanag4609-0.1.0/tests/unit/test_psi.py +270 -0
- stanag4609-0.1.0/tests/unit/test_psi_cadence.py +198 -0
- stanag4609-0.1.0/tests/unit/test_psi_scheduler.py +135 -0
- stanag4609-0.1.0/tests/unit/test_psi_timing.py +177 -0
- stanag4609-0.1.0/tests/unit/test_pts_cadence.py +129 -0
- stanag4609-0.1.0/tests/unit/test_requirement_inventory.py +277 -0
- stanag4609-0.1.0/tests/unit/test_rtcp.py +373 -0
- stanag4609-0.1.0/tests/unit/test_rtp.py +376 -0
- stanag4609-0.1.0/tests/unit/test_sidecar.py +936 -0
- stanag4609-0.1.0/tests/unit/test_sidecar_http.py +262 -0
- stanag4609-0.1.0/tests/unit/test_sidecar_metrics.py +134 -0
- stanag4609-0.1.0/tests/unit/test_sidecar_pyav.py +242 -0
- stanag4609-0.1.0/tests/unit/test_st0102.py +392 -0
- stanag4609-0.1.0/tests/unit/test_st0601.py +1825 -0
- stanag4609-0.1.0/tests/unit/test_st0601_packs.py +996 -0
- stanag4609-0.1.0/tests/unit/test_st0601_state.py +333 -0
- stanag4609-0.1.0/tests/unit/test_st0604.py +278 -0
- stanag4609-0.1.0/tests/unit/test_st0806.py +400 -0
- stanag4609-0.1.0/tests/unit/test_st0902.py +681 -0
- stanag4609-0.1.0/tests/unit/test_st0903.py +904 -0
- stanag4609-0.1.0/tests/unit/test_st0903_geo.py +379 -0
- stanag4609-0.1.0/tests/unit/test_st0903_state.py +111 -0
- stanag4609-0.1.0/tests/unit/test_st0903_tracker.py +113 -0
- stanag4609-0.1.0/tests/unit/test_st0903_vchip.py +143 -0
- stanag4609-0.1.0/tests/unit/test_st0903_vmask.py +171 -0
- stanag4609-0.1.0/tests/unit/test_st0903_vocab.py +381 -0
- stanag4609-0.1.0/tests/unit/test_st1001.py +242 -0
- stanag4609-0.1.0/tests/unit/test_st1002.py +548 -0
- stanag4609-0.1.0/tests/unit/test_st1010.py +383 -0
- stanag4609-0.1.0/tests/unit/test_st1202.py +337 -0
- stanag4609-0.1.0/tests/unit/test_st1204.py +153 -0
- stanag4609-0.1.0/tests/unit/test_st1206.py +273 -0
- stanag4609-0.1.0/tests/unit/test_st1303.py +610 -0
- stanag4609-0.1.0/tests/unit/test_st1402.py +140 -0
- stanag4609-0.1.0/tests/unit/test_st1601.py +356 -0
- stanag4609-0.1.0/tests/unit/test_st1602.py +165 -0
- stanag4609-0.1.0/tests/unit/test_st1607.py +323 -0
- stanag4609-0.1.0/tests/unit/test_st1607_state.py +516 -0
- stanag4609-0.1.0/tests/unit/test_std_delay.py +171 -0
- stanag4609-0.1.0/tests/unit/test_std_model.py +354 -0
- stanag4609-0.1.0/tests/unit/test_std_stream.py +369 -0
- stanag4609-0.1.0/tests/unit/test_timing.py +56 -0
- stanag4609-0.1.0/tests/unit/test_transformer.py +982 -0
- stanag4609-0.1.0/tests/unit/test_transport_rate.py +289 -0
- stanag4609-0.1.0/tests/unit/test_tutorial_examples.py +75 -0
- stanag4609-0.1.0/tests/unit/test_udp.py +81 -0
- stanag4609-0.1.0/tests/unit/test_universal_label.py +71 -0
- stanag4609-0.1.0/tests/unit/test_verifier.py +2045 -0
- stanag4609-0.1.0/tests/unit/test_video_properties.py +422 -0
- stanag4609-0.1.0/tests/unit/test_wavelength_state.py +161 -0
- stanag4609-0.1.0/tests/unit/test_waypoint_list_state.py +154 -0
- stanag4609-0.1.0/tests/unit/test_weapons_stores_state.py +161 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.DS_Store
|
|
2
|
+
.coverage
|
|
3
|
+
.hypothesis/
|
|
4
|
+
.mypy_cache/
|
|
5
|
+
.pytest_cache/
|
|
6
|
+
.ruff_cache/
|
|
7
|
+
.venv/
|
|
8
|
+
__pycache__/
|
|
9
|
+
*.egg-info/
|
|
10
|
+
*.py[cod]
|
|
11
|
+
*.pt
|
|
12
|
+
build/
|
|
13
|
+
dist/
|
|
14
|
+
references/standards/*.pdf
|
|
15
|
+
references/standards/*.docx
|
|
16
|
+
references/standards/*.xls
|
|
17
|
+
references/standards/*.txt
|
|
18
|
+
samples/private/
|
|
19
|
+
site/
|
|
20
|
+
tmp/
|
|
21
|
+
work/
|
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes are documented here. Releases use Semantic Versioning;
|
|
4
|
+
the pre-1.0 minor version and package classifier communicate API maturity.
|
|
5
|
+
|
|
6
|
+
## Unreleased
|
|
7
|
+
|
|
8
|
+
## 0.1.0 - 2026-09-05
|
|
9
|
+
|
|
10
|
+
- Add checksum-bound exact inventory and CI enforcement for all 65 active and
|
|
11
|
+
78 deprecated ST 0903.6 requirement identifiers, and remove deprecated
|
|
12
|
+
identifiers from the current conformance trace.
|
|
13
|
+
- Add an optional first-party PyAV video source that produces model-neutral
|
|
14
|
+
`FrameEnvelope` values with exact 90 kHz PTS conversion, BGR or native frame
|
|
15
|
+
output, deterministic stream selection, and safe container lifecycle; use it
|
|
16
|
+
in the real YOLO-to-VMTI player tutorial.
|
|
17
|
+
- Resolve ST 0601 Item 42's MSL/HAE datum from receiver-current frame-center
|
|
18
|
+
Items 25 and 78 across sparse Report-on-Change packets; expose the typed
|
|
19
|
+
result through the core API, GeoJSON, and player, and report ambiguous datum
|
|
20
|
+
state through the FMV verifier.
|
|
21
|
+
|
|
22
|
+
## 0.1.0a5 - 2026-09-05
|
|
23
|
+
|
|
24
|
+
- Enforce ST 1204.3's UUID version/variant and version-1 null-MAC rules for
|
|
25
|
+
ST 0601 Item 94, add explicit version 1/4/5 generators, implement the exact
|
|
26
|
+
namespace-free Appendix A.1 multi-UUID algorithm against normative Table 13,
|
|
27
|
+
and prove the inclusive 30-second MIIS cadence through ST 0902.
|
|
28
|
+
- Pin and exercise ImpleoTV's public 21-file negative STANAG 4609 corpus, with
|
|
29
|
+
authenticated member identities and 20 fault-specific verifier assertions;
|
|
30
|
+
add conservative PCR-bracketed PAT/PMT blackout proof and DVB SDT CRC
|
|
31
|
+
diagnostics, while retaining the in-bound PCR/PTS-drift member as a
|
|
32
|
+
documented non-claim.
|
|
33
|
+
- Add a first-party JSON live-player benchmark, an explicit per-call input
|
|
34
|
+
bound, fixed-window 100,000-event/10,000-fragment stress tests, and measured
|
|
35
|
+
baselines across all three checksum-pinned public FMV recordings.
|
|
36
|
+
- Add a bounded low-latency reference-player gateway that incrementally fans
|
|
37
|
+
live MPEG-TS into pure-Python ST 0601/VMTI state and FFmpeg fragmented MP4,
|
|
38
|
+
with numbered MSE fragments, resumable SSE, stdin CLI input, explicit
|
|
39
|
+
history-loss/backpressure semantics, and real-Chromium acceptance coverage.
|
|
40
|
+
- Exercise the reference player in real headless Chromium using deterministic
|
|
41
|
+
local media and metadata, covering playback, seeking, synchronized fields,
|
|
42
|
+
diagnostics, VMTI and map canvases, and SSE restart timing in dedicated CI.
|
|
43
|
+
- Reject both ST 1002.3 Table 2 retired-tag ranges (`2-10` and `51-54`) on
|
|
44
|
+
decode and encode while retaining adjacent non-retired extension items.
|
|
45
|
+
- Resolve omitted ST 1002 SPRM row and column coordinates independently to
|
|
46
|
+
the standard-mandated image center through an explicit frame-dimensions API,
|
|
47
|
+
including decoded ST 0601 Item 97 values.
|
|
48
|
+
- Gate the shipped reference-player JavaScript with Node's parser in CI, so a
|
|
49
|
+
parse-time browser failure cannot pass the existing HTML and timeline tests.
|
|
50
|
+
- Enforce ST 1601.2 uncertainty-to-geometry relationships for ST 0601 Item 98:
|
|
51
|
+
pixel uncertainty now requires a four-row correspondence-point array, and
|
|
52
|
+
geographic uncertainty requires latitude/longitude plus the matching
|
|
53
|
+
three-row or six-row elevation form on both encode and decode.
|
|
54
|
+
- Bound live verifier PMT-validation memory to the most recently validated PMT
|
|
55
|
+
identity per program, with a 128-revision churn regression, and acquire the
|
|
56
|
+
exact official ST 0801.6 edition conditionally referenced by MISP-2019.1.
|
|
57
|
+
- Inventory all 86 active and 34 deprecated MISP-2019.1 requirement
|
|
58
|
+
identifiers against the checksum-bound adopted source, and enforce the
|
|
59
|
+
MISP-2015.1-49 rule that security metadata use only one synchronous or
|
|
60
|
+
asynchronous MPEG-2 TS carriage mechanism per program.
|
|
61
|
+
- Add strict RFC 3550 RTCP framing, Sender/Receiver Reports, signed reception
|
|
62
|
+
blocks, SDES CNAME and compound validation/read/write; packetizer uint32
|
|
63
|
+
sender counters and SR+CNAME emission; plus exact wrap-safe RTP/NTP mapping
|
|
64
|
+
for synchronizing separate ST 0804 imagery and metadata streams.
|
|
65
|
+
- Add a count-bounded RTP sequence reorder buffer with wrap-aware contiguous
|
|
66
|
+
release, duplicate/late rejection, definite gap reporting under pressure or
|
|
67
|
+
flush, SSRC session locking, and zero-copy handoff to the MP2T receiver.
|
|
68
|
+
- Add dependency-free, bounded H.262, AVC, and HEVC sequence-property
|
|
69
|
+
inspection for dimensions, display ratio/frame rate, scan signalling,
|
|
70
|
+
chroma/bit depth, profile/level, and adopted MISP codec checks, including
|
|
71
|
+
HEVC VUI and bounded traversal of optional SPS structures.
|
|
72
|
+
- Add MISB ST 0604.6 embedded video timestamp read/write support for H.262,
|
|
73
|
+
AVC, and HEVC, including microsecond/nanosecond payloads, ST 0603 Time Status,
|
|
74
|
+
bounded Annex-B extraction, exact timestamp-to-access-unit association, and
|
|
75
|
+
verifier missing/duplicate/unassociated coverage diagnostics.
|
|
76
|
+
- Add MISB ST 0804.4 / RFC 2250 MPEG-2 Transport Stream over RTP parsing and
|
|
77
|
+
packetization, including complete RTP v2 header handling, 90 kHz clock and
|
|
78
|
+
discontinuity semantics, bounded MP2T payload validation, sequence-loss and
|
|
79
|
+
timestamp diagnostics, SSRC session locking, and late-packet protection.
|
|
80
|
+
- Add explicit, observable live-session reset APIs across the MPEG-TS demuxer,
|
|
81
|
+
metadata decoder, and in-transit transformer, preventing partial TS, PSI,
|
|
82
|
+
PES, KLV, Metadata AU, sequence, or topology state from crossing a reconnect.
|
|
83
|
+
- Retain the exact ST 0601 validation context on decoded metadata events and
|
|
84
|
+
report per-service birth-time, IMAP-precision, and VMTI external-assurance
|
|
85
|
+
counts in JSON, text, and HTML verifier output.
|
|
86
|
+
- Resolve typed ST 1601 Geo-Registration results at root or full ST 1607 MSID
|
|
87
|
+
paths, retaining independent parallel Amend results across Report-on-Change
|
|
88
|
+
packets and expiring them at the standard refresh boundary.
|
|
89
|
+
- Apply unique ST 1202 transformations in the mandatory Chipping,
|
|
90
|
+
Child-Parent, Default Pixel-to-Image, and Optical order, with automatic
|
|
91
|
+
reverse-order inverse execution for ground-to-image projection.
|
|
92
|
+
- Construct ST 1202 Chipping, centered Digital Zoom, and CSM default
|
|
93
|
+
pixel-to-image transformations directly from their standard-defined physical
|
|
94
|
+
parameters, with equation-based validation and dedicated API documentation.
|
|
95
|
+
- Gate the optional PyAV backend in CI with native decoding for every ST 1001
|
|
96
|
+
codec profile and add real AAC FMV demux, timestamp, reconstruction, and PCM
|
|
97
|
+
decode acceptance coverage.
|
|
98
|
+
- Add an objective-level completion audit and require every real Day/Night FMV
|
|
99
|
+
player sample to expose synchronized timestamp, sensor, platform, frame-center,
|
|
100
|
+
target-coordinate, and map-role telemetry.
|
|
101
|
+
|
|
102
|
+
## 0.1.0a4 - 2026-09-04
|
|
103
|
+
|
|
104
|
+
- Add bounded program selection for multi-program live inputs, selected-only
|
|
105
|
+
PES/clock/metadata output, source-PMT PID identity, and atomic versioned PAT
|
|
106
|
+
reassociation while retaining elementary-stream continuity.
|
|
107
|
+
- Assemble bounded multi-section PAT versions atomically, expose complete PAT
|
|
108
|
+
cycles on demux events, support multiple program-map sections sharing a PID,
|
|
109
|
+
and enforce H.222.0's zero-numbered single-section PMT rule.
|
|
110
|
+
- Reject CRC-valid PSI with invalid fixed/reserved bits, repeated PAT program
|
|
111
|
+
numbers, or non-`0xFF` bytes after section stuffing begins.
|
|
112
|
+
- Apply PMT stream-route updates transactionally: compatible retained PIDs may
|
|
113
|
+
finish an in-flight PES, while a rejected removal or redefinition leaves the
|
|
114
|
+
complete previous routing topology active.
|
|
115
|
+
- Add dependency-free ST 1002.3 plane fitting, subtraction, and reverse
|
|
116
|
+
reconstruction with one-based coordinates and unknown-range masking.
|
|
117
|
+
- Enforce ST 1602-04 Z-order uniqueness across report-on-change Segment
|
|
118
|
+
siblings and surface violations in FMV verification reports.
|
|
119
|
+
- Enforce ST 1602.1-10 by requiring a direct typed ST 1204 MIIS Core Identifier
|
|
120
|
+
in every child of a represented multi-sensor composite stream.
|
|
121
|
+
- Resolve an omitted ST 1602 Item 1 from the immediate parent timestamp while
|
|
122
|
+
preserving an explicit source/process timestamp for synchronized consumers.
|
|
123
|
+
- Enforce ST 0902.8 Note 1's Item 75/104 exclusive-OR across distributed
|
|
124
|
+
report-on-change packets, including the inclusive 30-second boundary, expiry,
|
|
125
|
+
ZLI clearing, validator reset, and an MPEG-TS-to-verifier report regression.
|
|
126
|
+
- Let AI sidecar detections carry an optional typed ST 0903 absolute Location;
|
|
127
|
+
the VMTI emitter now preserves its coordinates and uncertainty as VTarget
|
|
128
|
+
Item 17 for player, GIS, and downstream FMV consumers.
|
|
129
|
+
- Replace illustrative AI overlays with actual YOLO11n vehicle inference over
|
|
130
|
+
the checksum-pinned Esri Truck FMV, flowing every prediction through the
|
|
131
|
+
public sidecar and ST 0903 VMTI encode/decode path before browser rendering.
|
|
132
|
+
- Add an opt-in, media-timed Server-Sent Events feed to the reference player,
|
|
133
|
+
including current-state replay, bounded heartbeats and browser history,
|
|
134
|
+
seek/pause/stall/rate synchronization, and tested HTTP error handling.
|
|
135
|
+
|
|
136
|
+
## 0.1.0a3 - 2026-09-04
|
|
137
|
+
|
|
138
|
+
- Add reproducible real-fixture CLI output plus browser-captured dashboard and
|
|
139
|
+
verifier screenshots to the inspection and web-client tutorials.
|
|
140
|
+
- Add typed ST 0102 security classifications and caller-supplied enforcement
|
|
141
|
+
for exact classification, classifying country, SCI/SHI, caveats, and required
|
|
142
|
+
release/object countries across ST 0902 validators, the FMV verifier, and CLI.
|
|
143
|
+
- Add a versioned, searchable API-reference section generated from public
|
|
144
|
+
docstrings for KLV, MISB metadata, transport, verification, AI sidecars,
|
|
145
|
+
media exports, and the reference player, with strict target-resolution tests.
|
|
146
|
+
- Add explicit MISP/UTC conversion using ST 0601 Items 136 and 137, exact raw
|
|
147
|
+
Item 2 access, correct player/GeoJSON/verifier time-scale labels, verifier
|
|
148
|
+
Report-on-Change UTC evidence, and standards-safe UTC-to-MISP conversion in
|
|
149
|
+
the first-party AI/VMTI producer.
|
|
150
|
+
- Encode the mandatory ST 0601 `Out of Range` sentinel automatically when a
|
|
151
|
+
producer supplies a numeric measurement outside any applicable fixed mapped
|
|
152
|
+
field domain, without clipping or weakening unrelated range validation.
|
|
153
|
+
|
|
154
|
+
## 0.1.0a2 - 2026-09-04
|
|
155
|
+
|
|
156
|
+
- Add five task-oriented tutorials covering real-fixture inspection, raw
|
|
157
|
+
video/CSV FMV creation, parallel AI-to-VMTI emission, a custom video/map/feed
|
|
158
|
+
dashboard, and live transform fan-out, plus an explicit continuation roadmap.
|
|
159
|
+
- Add an executable dependency-free web dashboard example built on the public
|
|
160
|
+
player-asset boundary and browser-verify it against the daylight FMV fixture.
|
|
161
|
+
- Add an event-aware ST 0601 context provider to live metadata decoding and the
|
|
162
|
+
FMV verifier, making producer-known time-of-birth, variable-IMAP precision,
|
|
163
|
+
and embedded-VMTI facts enforceable per packet.
|
|
164
|
+
- Request a 20 ms PCR period when FFmpeg remuxes ordinary media for CSV/KLV
|
|
165
|
+
injection, keeping generated FMV inside the ST 1402 100 ms interval.
|
|
166
|
+
- Add an exact, bounded incremental asynchronous metadata STD model with
|
|
167
|
+
cross-batch occupancy, continuous output leakage, live watermarks, immediate
|
|
168
|
+
diagnostics, finite-model parity, PCR-window stream validation, and optional
|
|
169
|
+
per-program/PID FMV verifier configuration.
|
|
170
|
+
- Add conservative, bounded ST 1402-12 synchronous-metadata decoder-delay
|
|
171
|
+
auditing with PCR-bracketed delay ranges and FMV verifier diagnostics.
|
|
172
|
+
- Add a typed H.222.0 metadata STD descriptor with exact physical-unit
|
|
173
|
+
construction and direct synchronous-stream integration.
|
|
174
|
+
- Decode ST 0601 coded fields into integer-compatible enumerations, flags, and
|
|
175
|
+
legacy weapon packs, and enforce the exact Item 62 Laser PRF digit profile.
|
|
176
|
+
- Render those coded platform/sensor states in the reference player with stable
|
|
177
|
+
numeric values, operator labels, named flags, and decoded weapon components.
|
|
178
|
+
- Add a dependency-free, bounded JSON-over-HTTP inference adapter with typed
|
|
179
|
+
model-schema hooks and a complete BYO-service example.
|
|
180
|
+
- Add thread-safe, bounded per-stage inference counters and monotonic latency
|
|
181
|
+
metrics for successes, failures, timeouts, cancellations, and in-flight work.
|
|
182
|
+
- Keep reference-player telemetry and geospatial labels readable across desktop
|
|
183
|
+
and narrow browser layouts.
|
|
184
|
+
- Surface per-sample metadata diagnostics in the reference player, keep future
|
|
185
|
+
telemetry hidden before its timestamp, and distinguish empty, malformed, and
|
|
186
|
+
unavailable timelines.
|
|
187
|
+
- Restrict production publishing to version tags and approval by the repository
|
|
188
|
+
owner, and refresh artifact actions to their Node.js 24 releases.
|
|
189
|
+
|
|
190
|
+
## 0.1.0a1 - 2026-09-04
|
|
191
|
+
|
|
192
|
+
- Add the official Esri `Truck.ts` H.264/AAC/synchronous-KLVA fixture with
|
|
193
|
+
checksum-verified ZIP extraction and negative conformance assertions.
|
|
194
|
+
- Prepare a protected publishing workflow, cross-version CI, PyPI
|
|
195
|
+
discovery metadata, and versioned Read the Docs hosting.
|
|
196
|
+
- Audit the SMPTE RP 217:2001 transport-stream branch and reject asynchronous
|
|
197
|
+
KLVA PES packets with an unbounded length or asserted ESCR flag.
|
|
198
|
+
- Catalogue locally validated STANAG 4609 Edition 5, MISP-2019.1,
|
|
199
|
+
MISP-2023.2, SMPTE ST 336:2017, and SMPTE RP 217:2001 source documents.
|
|
200
|
+
- Add bounded constant-rate TS packet shaping with exact rational output slots,
|
|
201
|
+
null-packet idle fill, and H.222.0 byte-position-aware retained PCR restamping.
|
|
202
|
+
- Add a drift-free live PCR writer scheduler that derives clock samples from
|
|
203
|
+
actual output time and exposes skipped slots and noncompliant late gaps.
|
|
204
|
+
- Add per-elementary-stream ST 1402 PTS cadence validation with exact 0.7-second
|
|
205
|
+
boundaries, rollover/reordering handling, discontinuity resets, and verifier
|
|
206
|
+
integration.
|
|
207
|
+
- Add explicit ST 0903 VMTI frame/parent validation context for timestamp,
|
|
208
|
+
target-count, frame-dimension, differing-image-source, and stale-offset
|
|
209
|
+
requirements.
|
|
210
|
+
- Enforce ST 0903 two-corner and single-interior-area BoundarySeries geometry
|
|
211
|
+
with exact, antimeridian-aware topology and a configurable resource bound.
|
|
212
|
+
- Add a bounded incremental FMV verifier and CLI with human and JSON reports,
|
|
213
|
+
positive/negative findings, stream inventory, source context, configurable
|
|
214
|
+
profile policy, and real public-stream integration coverage.
|
|
215
|
+
- Add streaming, atomic GeoJSON-sequence export for reconstructed ST 0601
|
|
216
|
+
sensor, frame-center, target, and frame-footprint geometry.
|
|
217
|
+
- Add a synchronized, dependency-free local geospatial map to the reference
|
|
218
|
+
player alongside its VMTI video overlay and decoded field panel.
|
|
219
|
+
- Add an optional first-party Ultralytics YOLO adapter for strict frame-bounded
|
|
220
|
+
boxes, labels, confidence, algorithm attribution, and stable tracker IDs.
|
|
221
|
+
- Add an optional ONNX Runtime session adapter with strict named-input checks
|
|
222
|
+
and explicit model-specific preprocessing/postprocessing hooks.
|
|
223
|
+
- Add an optional NVIDIA Triton HTTP/gRPC AsyncIO adapter with request IDs,
|
|
224
|
+
timeout-compatible cancellation, and explicit tensor/result hooks.
|
|
225
|
+
- Add a high-level inference-result-to-VMTI emitter that preserves correlated
|
|
226
|
+
ST 0601 parents or creates a minimal synchronous parent for media-only input.
|
|
227
|
+
- Add ST 1402-compliant UDP datagram packetization and receiver validation with
|
|
228
|
+
a seven-TS-packet default and strict partial/sync/payload bounds.
|
|
229
|
+
- Add ST 1402-02 PAT/PMT recurrence validation with exact strict-boundary,
|
|
230
|
+
initial-acquisition, per-program, reconfiguration, and multi-section checks.
|
|
231
|
+
- Add a drift-free ST 1402-02 PAT/PMT writer scheduler with an eight-Hz default
|
|
232
|
+
and observable late polls, skipped repetitions, and mandatory-gap failures.
|
|
233
|
+
- Enforce asynchronous ST 1402 KLV alignment at every PES boundary and let the
|
|
234
|
+
high-level muxer span one validated KLV item across bounded PES packets.
|
|
235
|
+
- Add structured ST 1402 metadata PMT conformance reports for same-program
|
|
236
|
+
video, carriage types, `KLVA` registration, and synchronous descriptors.
|
|
237
|
+
- Integrate the exact ST 1402 PAT/PMT scheduler into timed live-transform calls,
|
|
238
|
+
including idle polling, early source-table suppression, and batch metrics.
|
|
239
|
+
- Add bounded streaming MPEG-1/2 Layer II and MPEG-2 AAC-LC frame
|
|
240
|
+
reconstruction with exact offsets, channels, samples, and durations.
|
|
241
|
+
- Add an optional direct PyAV/FFmpeg audio decoder with actual codec-context
|
|
242
|
+
coverage for all three ST 1001 formats and explicit flush/lifecycle metrics.
|
|
243
|
+
- Add per-PID audio PES timing that honors first-access-unit PTS semantics,
|
|
244
|
+
split frames, rollover, discontinuities, and exact rational sample duration.
|
|
245
|
+
- Add exact, program-aware ST 1402 PCR cadence auditing with 100 ms boundary,
|
|
246
|
+
rollover, shared-PID, PID-change, discontinuity, and regression handling.
|
|
247
|
+
- Add deterministic adaptation-only PCR construction on a muxer's declared
|
|
248
|
+
clock PID without consuming elementary-stream payload continuity counters.
|
|
249
|
+
- Render ST 0903 VMask polygon contours and compact row-major run masks in the
|
|
250
|
+
synchronized reference player, retaining JSON-ready mask geometry for apps.
|
|
251
|
+
|
|
252
|
+
- Added normalized ST 0903 target geometry to player timelines and synchronized
|
|
253
|
+
browser overlays for VMTI boxes, centroids, labels, confidence, and status.
|
|
254
|
+
- Added streaming and atomic ST 0601-to-ArcGIS CSV sidecar export with
|
|
255
|
+
per-stream Report-on-Change reconstruction and a dedicated CLI.
|
|
256
|
+
- Added bounded ST 0903.6 cross-frame target lifecycle state with transition,
|
|
257
|
+
missing-status, terminal-ID-reuse, live-join, and partial-list semantics.
|
|
258
|
+
- Made ST 0903 VMTI Item 13 a typed, structurally validated ST 1204 Core
|
|
259
|
+
Identifier while retaining validated binary input for wire-oriented callers.
|
|
260
|
+
- Added an atomic first-party ArcGIS FMV CSV multiplexer that losslessly remuxes
|
|
261
|
+
video/audio with FFmpeg, adds repeated synchronous KLVA signalling, aligns
|
|
262
|
+
microsecond metadata to rollover-safe video PTS, and preserves media PES.
|
|
263
|
+
- Added MISB ST 1001.1 audio codec-profile validation, typed Layer II and AAC-LC
|
|
264
|
+
ADTS frame-header inspection, and codec identity on live audio PES events.
|
|
265
|
+
- Added deterministic 33-bit PTS epoch unwrapping with rollover, reordering,
|
|
266
|
+
ambiguity handling, and a forward live-timeline watermark.
|
|
267
|
+
- Added bounded per-program synchronization of decoded frame envelopes with
|
|
268
|
+
synchronous KLV relevance PTS and absolute MISB Precision Time Stamps.
|
|
269
|
+
- Added bounded async decoded-frame queues with explicit overload policies,
|
|
270
|
+
per-enqueue drop identity, and cumulative accepted/drop observability.
|
|
271
|
+
- Added typed ST 0903.6 VChip Local Sets, including constrained media types,
|
|
272
|
+
image IRIs/embedded bytes, and VTarget single/multi-chip integration.
|
|
273
|
+
- Added typed ST 0903.6 VMask pixel contours and BER-framed run masks with
|
|
274
|
+
official vectors, parent-frame bounds, and clockwise geometry validation.
|
|
275
|
+
- Added typed ST 0903.6 Location, Velocity, and Acceleration DLPs, bounded
|
|
276
|
+
Location/Boundary Series framing, and VTarget absolute-location/contour fields.
|
|
277
|
+
- Added the typed ST 0903.6 VTracker Local Set and VTarget Item 104 integration,
|
|
278
|
+
including UUIDs, observation times, tracks, motion, and algorithm references.
|
|
279
|
+
- Added typed ST 0903.6 VTarget parent-relative geospatial Items 10-16 with
|
|
280
|
+
official IMAP vectors and standalone-versus-embedded context validation.
|
|
281
|
+
- Added first-PMT augmentation for introducing a fully signalled synchronous or
|
|
282
|
+
asynchronous KLVA PID into a media-only live MPEG-2 transport stream.
|
|
283
|
+
- Added an FFmpeg-backed local web reference player and a reusable JSON timeline
|
|
284
|
+
scanner synchronized to video PTS, including geospatial/state field panels.
|
|
285
|
+
- Added opt-out Metadata AU sequence validation for diagnostic consumers while
|
|
286
|
+
keeping strict validation as the default.
|
|
287
|
+
- Completed ST 0902.8 Table 1 requirement tracking for checksum, timestamp, and
|
|
288
|
+
UAS Local Set version; added finite-stream finalization, reset, malformed-field
|
|
289
|
+
diagnostics, and explicit ST 0102 context policy for SCI/SHI, Caveats, and
|
|
290
|
+
Releasing Instructions.
|
|
291
|
+
- Added bounded ST 0601/ST 0107 Report-on-Change receiver-state reconstruction
|
|
292
|
+
with inclusive refresh expiry, immediate ZLI clearing, multi-use ZLI
|
|
293
|
+
rejection, and sparse-state integration in the reference player.
|
|
294
|
+
- Added identity-aware ST 0601 Items 121/128 wavelength-table reconstruction,
|
|
295
|
+
including independently expiring distributed records and validation of
|
|
296
|
+
predefined, reserved, undefined, and duplicate-name references.
|
|
297
|
+
- Added identity-aware ST 0601 Items 138/139 payload-table reconstruction with
|
|
298
|
+
stable table generations, sequential completeness, per-record expiry, active
|
|
299
|
+
bit-reference validation, ZLI clearing, and bounded atomic updates.
|
|
300
|
+
- Added identity-aware ST 0601 Item 140 Weapons Stores reconstruction keyed by
|
|
301
|
+
four-part physical address, with distributed merging, per-record expiry,
|
|
302
|
+
replacement updates, ZLI clearing, and bounded atomic updates.
|
|
303
|
+
- Added identity-aware ST 0601 Item 141 Waypoint List reconstruction with
|
|
304
|
+
independent record expiry, transient distributed-reorder visibility,
|
|
305
|
+
cancellation/history views, historical-order validation, and bounded state.
|
|
306
|
+
- Added bounded ST 1607 Segment/Amend tree reconstruction with MSID lineage,
|
|
307
|
+
per-level Report-on-Change state, nested union/override evaluation, persistent
|
|
308
|
+
Amend deletions, branch expiry, and atomic identity/limit enforcement.
|
|
309
|
+
- Added context-correct ST 1607 child Security Local Sets, inherited effective
|
|
310
|
+
security views, and structured validation of Items 12/13-only country
|
|
311
|
+
overrides and prohibited root-security deletion.
|
|
312
|
+
- Added static ST 0902 minimum-profile validation for reconstructed receiver
|
|
313
|
+
views and ST 1607 policy checks at Amend roots and terminal Segment unions.
|
|
314
|
+
|
|
315
|
+
- Added strict-versus-preserve ST 0601 field decoding with structured issues.
|
|
316
|
+
- Added typed ST 0601.19 Items 26-47 with official mapping vectors, coded
|
|
317
|
+
value validation, and exact Off-Earth handling for corner/target locations.
|
|
318
|
+
- Added typed ST 0601.19 Items 49-64, including bounded call signs and exact
|
|
319
|
+
Out-of-Range handling for legacy platform-attitude fields.
|
|
320
|
+
- Added typed ST 0601.19 alternate-platform, event-time, operational-mode,
|
|
321
|
+
ellipsoid-height, and sensor-velocity Items 67-72 and 75-80.
|
|
322
|
+
- Added typed ST 0601.19 full corner-coordinate and platform-angle Items 82-93
|
|
323
|
+
with exact Off-Earth and Out-of-Range identities.
|
|
324
|
+
- Added typed ST 0601.19 Items 105-114 with bounded text, variable-width
|
|
325
|
+
integers, and per-item variable-length IMAP limits.
|
|
326
|
+
- Added typed ST 0601.19 sensor-rate, storage, navigation, platform-status,
|
|
327
|
+
and sensor-control Items 117-120 and 123-126.
|
|
328
|
+
- Added typed ST 0601.19 Items 129 and 131-137, including minimal-width signed
|
|
329
|
+
integers and variable-width take-off timestamps.
|
|
330
|
+
- Added a typed ST 1204.3 MIIS Core Identifier codec and ST 0601 Item 94 bridge.
|
|
331
|
+
- Added stateful ST 0902.8 minimum-item cadence validation with alternative
|
|
332
|
+
fields, ZLI diagnostics, and Security/MIIS stage policies.
|
|
333
|
+
- Added a typed ST 0102.12 Security Local Set codec for all current local tags,
|
|
334
|
+
including the ST 0601 Item 48 and ST 0902 profile bridges.
|
|
335
|
+
- Added the typed ST 0601 Item 81 Image Horizon Pixel Pack with truncatable
|
|
336
|
+
WGS-84 endpoints and explicit error-indicator preservation.
|
|
337
|
+
- Added the typed ST 0601 Item 127 Sensor Frame Rate Pack with exact BER-OID
|
|
338
|
+
ratios and canonical default-denominator truncation.
|
|
339
|
+
- Added typed ST 0601 Items 115-116 control-command packs, including repeated
|
|
340
|
+
Item 115 instances, optional command timestamps, and acknowledgement lists.
|
|
341
|
+
- Added typed ST 0601 Item 121 Active Wavelength identifiers and Item 122
|
|
342
|
+
country-code VLPs with explicit Unknown and truncation semantics.
|
|
343
|
+
- Added typed ST 0601 Item 128 custom wavelength records with nested VLP/FLP
|
|
344
|
+
framing, exact IMAPB bounds, and duplicate identifier/name validation.
|
|
345
|
+
- Added typed ST 0601 Item 130 take-off and recovery locations with WGS-84
|
|
346
|
+
IMAPB mappings, optional HAE, explicit Unknown, and round-trip truncation.
|
|
347
|
+
- Added typed ST 0601 Items 138-139 distributed payload-table records and
|
|
348
|
+
active-payload bit sets, with sequential-ID and bounds validation.
|
|
349
|
+
- Added typed ST 0601 Item 140 Weapons Stores records with physical addresses,
|
|
350
|
+
general status, engagement flags, reserved-bit checks, and UTF-8 types.
|
|
351
|
+
- Added typed ST 0601 Item 141 Waypoint List records with distributed-list
|
|
352
|
+
semantics, optional info/location fields, and official-vector coverage.
|
|
353
|
+
- Added typed ST 0601 Item 142 View Domain pairs with variable IMAP precision,
|
|
354
|
+
explicit unknowns, end truncation, and circular end-angle helpers.
|
|
355
|
+
- Added typed ST 0601 Item 143 Metadata Substream IDs in local and UUID forms,
|
|
356
|
+
including enforcement of the standard's root-level prohibition.
|
|
357
|
+
- Added recursive ST 1607.2 Segment/Amend Local Sets for ST 0601 Items 100-101,
|
|
358
|
+
including required MSIDs, hierarchy rules, unknown TLV preservation, and
|
|
359
|
+
explicit Amend deletion semantics.
|
|
360
|
+
- Added a bounded ST 1010.3 SDCC-FLP codec with Mode 1/2 Parse Control,
|
|
361
|
+
IEEE/IMAP values, full and sparse upper-triangle matrices, and ST 0601 Item
|
|
362
|
+
102 Refined Source List ordering for repeated packs.
|
|
363
|
+
- Added a typed ST 0806.4 RVT codec for independent CRC-protected packets and
|
|
364
|
+
embedded values, all Items 1-21, repeatable POI/AOI/User Defined subordinate
|
|
365
|
+
sets, and the ST 0601 Item 73 bridge.
|
|
366
|
+
- Added a bounded ST 1303.2 MDAP codec with Natural, IMAP, Boolean, biased
|
|
367
|
+
BER-OID unsigned, and ordered run-length algorithms, including byte-exact
|
|
368
|
+
official vectors and lazy RLE cell access.
|
|
369
|
+
- Added the official ST 1202.3 publication to the local non-redistributed
|
|
370
|
+
standards cache and corrected the ST 1303.2 manifest metadata.
|
|
371
|
+
- Added a typed ST 1202.3 Generalized Transformation codec with lossless
|
|
372
|
+
IEEE-width preservation, projective forward/inverse evaluation, and strict
|
|
373
|
+
ST 1010 Mode 2 Refined Source List processing.
|
|
374
|
+
- Added typed ST 1002.3 Range Image packets, Section Data VLPs, nested ST 1202
|
|
375
|
+
transformations and ST 1303 arrays, CRC-16-CCITT, and the ST 0601 Item 97
|
|
376
|
+
bridge.
|
|
377
|
+
- Added typed ST 1601.2 Geo-Registration metadata with tie-point MDAPs,
|
|
378
|
+
binary16 elevation arrays, heterogeneous IMAP uncertainty rows, UUIDs, and
|
|
379
|
+
the ST 0601 Item 98 bridge.
|
|
380
|
+
- Added typed ST 1602.2 Composite Imaging geometry, active-area helpers,
|
|
381
|
+
transparency and Z-order fields, and the ST 0601 Item 99 bridge.
|
|
382
|
+
- Added all ST 1206.1 SAR Motion Imagery items, standalone/embedded framing,
|
|
383
|
+
radiometric ST 1303 polynomial evaluation, and the ST 0601 Item 95 bridge.
|
|
384
|
+
- Added typed ST 0903.6 Algorithm, Ontology, VObject, and VFeature Local Sets,
|
|
385
|
+
strict packet-local ID references, and ontology-backed sidecar label emission.
|
|
386
|
+
- Added the checksum-validated official ST 1607.2 publication to the local,
|
|
387
|
+
non-redistributed standards manifest.
|
|
388
|
+
- Fixed IMAP normal-value decode/encode stability at quantization boundaries.
|
|
389
|
+
- Added reproducible full-file integration tests for two public FMV streams.
|
|
390
|
+
- Added first-party AI frame/detection contracts, composable inference graphs,
|
|
391
|
+
and a standards-aware ST 0903 pixel detection bridge.
|
|
392
|
+
- Added exact PCR/OPCR parsing, program-aware clock events, and full-file no-op
|
|
393
|
+
transform fingerprints for the public daylight FMV fixture.
|
|
394
|
+
- Preserved source TS payload/adaptation layouts and every PCR/OPCR observation
|
|
395
|
+
when remuxing unchanged video, audio, or data PES.
|
|
396
|
+
|
|
397
|
+
### Added
|
|
398
|
+
|
|
399
|
+
- Strict BER length and BER-OID primitives.
|
|
400
|
+
- Incremental Universal KLV and lossless Local Set parsing.
|
|
401
|
+
- Initial typed ST 0601 decoding, encoding, and checksum validation.
|
|
402
|
+
- ArcGIS FMV Multiplexer CSV adapter for the supplied development fixture.
|
|
403
|
+
- Enforcement of the mandatory ST 0601 timestamp/version/checksum structure
|
|
404
|
+
and uniqueness for the currently supported singleton items.
|
|
405
|
+
- Byte-exact ST 0902.8 Annex C dynamic-packet regression vector.
|
|
406
|
+
- Distinct public values for MISB Unknown, Out-of-Range, Off-Earth, and
|
|
407
|
+
Reserved semantics, including correct zero-length and empty-string encoding.
|
|
408
|
+
- Strict ST 0107 UTF-8 canonicalization checks for supported text fields.
|
|
409
|
+
- Bounded incremental MPEG-2 TS packet parsing with strict and recovery modes,
|
|
410
|
+
adaptation/payload separation, exact byte offsets, and streaming iteration.
|
|
411
|
+
- Incremental PSI section reconstruction, CRC-32/MPEG-2 validation, typed PAT
|
|
412
|
+
and PMT decoding, and synchronous/asynchronous KLVA PID discovery.
|
|
413
|
+
- Bounded per-PID PES reconstruction with exact packet lengths, 33-bit PTS/DTS
|
|
414
|
+
decoding, unbounded video-PES boundary handling, and live-join behavior.
|
|
415
|
+
- Exact ST 1201.5 IMAPA length selection and IMAPB forward/reverse mapping,
|
|
416
|
+
including zero offsets and lossless special/reserved code words.
|
|
417
|
+
- Typed variable-length IMAP support for ST 0601.19 Items 96, 103, and 104,
|
|
418
|
+
validated against their official publication examples.
|
|
419
|
+
- Strict standalone and embedded ST 0903.6 VMTI decoding with bounded VTarget
|
|
420
|
+
Series, lossless unknown tags, typed pixel fields, and lifecycle validation.
|
|
421
|
+
- Typed ST 0903.6 VMTI and VTarget encoding for pixel-space AI detections,
|
|
422
|
+
including BER-OID target IDs, automatic target counts, lifecycle validation,
|
|
423
|
+
explicit raw extensions, and encoder-owned standalone checksums.
|
|
424
|
+
- Automatic typed ST 0903.6 decoding and lossless re-encoding through ST 0601
|
|
425
|
+
Item 74.
|
|
426
|
+
- Program-aware incremental transport demuxing that discovers PAT/PMT updates,
|
|
427
|
+
classifies video, audio, KLVA, and other streams, and emits bounded PES events.
|
|
428
|
+
- Deterministic PAT/PMT/PES construction, 188-byte TS packetization with
|
|
429
|
+
per-PID continuity, and asynchronous KLVA insertion.
|
|
430
|
+
- Synchronous KLVA Metadata AU cells with PTS, PMT descriptor helpers,
|
|
431
|
+
sequence counters, and bounded complete/first/middle/last fragmentation.
|
|
432
|
+
- Incremental metadata stream reconstruction from asynchronous KLV fragments or
|
|
433
|
+
synchronous AU cells into timed, typed ST 0601/ST 0903 events.
|
|
434
|
+
- Lossless ST 0601 packet updates with explicit add/replace/delete operations,
|
|
435
|
+
raw extension values, mandatory-structure validation, and checksum repair.
|
|
436
|
+
- Immutable timed-KLV events and bounded processor chains with explicit
|
|
437
|
+
pass/drop/replace/inject decisions, strict output parsing, typed replacement
|
|
438
|
+
metadata, and deterministic multi-processor composition.
|
|
439
|
+
- Pull-driven single-program live TS transformation that preserves unchanged
|
|
440
|
+
video/audio PES bytes and descriptors, processes sync/async KLV at its source
|
|
441
|
+
timing, remuxes it, and exposes parallel typed metadata batches.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Contributing to stanag4609
|
|
2
|
+
|
|
3
|
+
Thank you for helping build a dependable, open FMV interoperability library.
|
|
4
|
+
Protocol changes are specification-led, test-driven, and deliberately small so
|
|
5
|
+
that every compatibility claim can be audited.
|
|
6
|
+
|
|
7
|
+
## Ground rules
|
|
8
|
+
|
|
9
|
+
- Do not commit or redistribute licensed standards, proprietary source code, or
|
|
10
|
+
restricted media. Record standards provenance in
|
|
11
|
+
`references/standards/manifest.json` and fixture provenance in
|
|
12
|
+
`references/fixtures.json`.
|
|
13
|
+
- Base behavior on the exact published standard edition. Cite the requirement,
|
|
14
|
+
section, table, or official vector in the test or requirement trace.
|
|
15
|
+
- Preserve unknown wire data losslessly. Typed encoders must reject unaudited
|
|
16
|
+
values unless the public API requires an explicit raw-value wrapper.
|
|
17
|
+
- Keep live processing bounded: additions need explicit limits, backpressure,
|
|
18
|
+
discontinuity behavior, and tests across arbitrary chunk boundaries.
|
|
19
|
+
- Keep the core package pure Python with no runtime dependencies. Optional
|
|
20
|
+
codec, inference, GIS, and UI integrations belong behind extras or adapters.
|
|
21
|
+
|
|
22
|
+
## Development workflow
|
|
23
|
+
|
|
24
|
+
Create a short-lived branch from `main` using one of these forms:
|
|
25
|
+
|
|
26
|
+
- `feat/<short-description>` for a new capability
|
|
27
|
+
- `fix/<short-description>` for a bug correction
|
|
28
|
+
- `docs/<short-description>` for documentation only
|
|
29
|
+
- `test/<short-description>` for test infrastructure or coverage
|
|
30
|
+
- `refactor/<short-description>` for behavior-preserving restructuring
|
|
31
|
+
- `perf/<short-description>` for measured performance work
|
|
32
|
+
- `chore/<short-description>` for maintenance
|
|
33
|
+
|
|
34
|
+
Use lowercase kebab-case after the slash, for example
|
|
35
|
+
`feat/live-vmti-injection` or `fix/pes-discontinuity`.
|
|
36
|
+
|
|
37
|
+
Follow Conventional Commits for commit and pull-request titles:
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
<type>(optional-scope): <imperative summary>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Allowed types are `feat`, `fix`, `docs`, `test`, `refactor`, `perf`, `build`,
|
|
44
|
+
`ci`, and `chore`. Useful scopes include `klv`, `st0601`, `st0903`,
|
|
45
|
+
`transport`, `audio`, `ui`, and `docs`. Use `fix`, rather than `bug`, as the
|
|
46
|
+
type for bug corrections. Mark an intentional breaking API or wire-behavior
|
|
47
|
+
change with `!` and explain it in the commit body.
|
|
48
|
+
|
|
49
|
+
Keep commits focused and independently understandable. Do not mix formatting,
|
|
50
|
+
generated artifacts, or unrelated cleanup into a protocol change.
|
|
51
|
+
|
|
52
|
+
## Test-driven protocol changes
|
|
53
|
+
|
|
54
|
+
1. Add or update the edition-specific requirement trace under
|
|
55
|
+
`docs/requirements/`.
|
|
56
|
+
2. Add a failing normative, boundary, malformed-input, or integration test.
|
|
57
|
+
3. Implement the smallest coherent bounded behavior.
|
|
58
|
+
4. Verify lossless round trips and live chunk boundaries where relevant.
|
|
59
|
+
5. Run every quality gate before requesting review.
|
|
60
|
+
|
|
61
|
+
```console
|
|
62
|
+
ruff check .
|
|
63
|
+
mypy src
|
|
64
|
+
pytest --cov=stanag4609 --cov-branch --cov-report=term-missing
|
|
65
|
+
python -m build
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The test suite requires at least 90% branch coverage, but protocol-critical
|
|
69
|
+
paths should be covered beyond that repository-wide floor.
|
|
70
|
+
|
|
71
|
+
Documentation changes also run a strict static-site build:
|
|
72
|
+
|
|
73
|
+
```console
|
|
74
|
+
python -m pip install -e '.[docs]'
|
|
75
|
+
mkdocs build --strict
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
API pages use `mkdocstrings` directives and resolve source modules from `src/`.
|
|
79
|
+
Keep user-facing symbols documented with type-complete docstrings; the strict
|
|
80
|
+
build must resolve every directive before a documentation change is accepted.
|
|
81
|
+
|
|
82
|
+
Examples must call real public APIs and either run in tests or name their
|
|
83
|
+
reproducible verification procedure. Clearly distinguish implemented,
|
|
84
|
+
experimental, and planned integrations; never imply vendor certification.
|
|
85
|
+
|
|
86
|
+
## Pull requests
|
|
87
|
+
|
|
88
|
+
The PR title follows the same Conventional Commit form and becomes the squash
|
|
89
|
+
commit subject. A PR description must include:
|
|
90
|
+
|
|
91
|
+
- **Why:** the user or interoperability problem being solved.
|
|
92
|
+
- **Standard basis:** exact editions and requirement/table/vector references.
|
|
93
|
+
- **What changed:** public API, wire behavior, limits, and error behavior.
|
|
94
|
+
- **Verification:** tests added and the quality-gate results.
|
|
95
|
+
- **Compatibility:** effects on API, transport streams, timing, audio/video
|
|
96
|
+
passthrough, and unknown KLV preservation.
|
|
97
|
+
- **Risk and rollback:** known risks, limitations, and the safe revert point.
|
|
98
|
+
|
|
99
|
+
Use the repository PR template and remove no checklist item without explaining
|
|
100
|
+
why it does not apply. Keep draft PRs out of conformance tables; only merged,
|
|
101
|
+
tested behavior may be listed as implemented.
|
|
102
|
+
|
|
103
|
+
Reviewers should trace claims back to official standards, look for unbounded
|
|
104
|
+
allocation or latency, verify malformed-stream behavior, and confirm that no
|
|
105
|
+
third-party implementation was copied. At least one approval and passing CI are
|
|
106
|
+
expected before merging once repository protections are enabled.
|
stanag4609-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 stanag4609 contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|