Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
33c9902
Start with v1.1.x schemas
garethsb Feb 25, 2026
7f4d4a6
Add schema changes for MXL as a built-in transport
garethsb Feb 25, 2026
f28ca6a
Add IS-05 schema cpp generation
lo-simon Feb 25, 2026
d0c600e
Add IS-05 v1.2 as copy of IS-05 v1.1
garethsb Feb 25, 2026
19db280
Add MXL senders and receivers
garethsb Feb 25, 2026
de4b223
Fix no_auto_constraints
garethsb Feb 25, 2026
5f8b468
nmos-cpp-node support for MXL senders and receivers
garethsb Feb 25, 2026
9fa1650
Add flow_id as initial value (next, try making it a /constraints valu…
jonathan-r-thorpe Feb 25, 2026
18a9097
Add support for "auto" to MXL sender flow_id transport parameter
garethsb Feb 25, 2026
e175986
Merge pull request #1 from jonathan-r-thorpe/feature/mxl-sender-flow_…
jonathan-r-thorpe Feb 26, 2026
e5c0105
Fix audio sender
jonathan-r-thorpe Feb 26, 2026
a8b7535
update config.json to include mxl ports
jonathan-r-thorpe Mar 4, 2026
cfb3726
Added mxl_domain_id transport parameter to MXL sender and receiver co…
jonathan-r-thorpe May 5, 2026
4fb707f
Add missing JSON fields for MXL sender and receiver connections
jonathan-r-thorpe May 5, 2026
d36cf53
Make mxl domain id configurable
jonathan-r-thorpe May 6, 2026
b4389a7
Added mxl_domain_id to config.json
jonathan-r-thorpe May 6, 2026
d2f8dbf
Ensure consistent mxl_domain_id and mxl_flow_id ordering
jonathan-r-thorpe May 6, 2026
6a31cab
Update MXL configuration and implementation according to latest draft…
jonathan-r-thorpe May 15, 2026
c70da56
Apply suggestions from code review
jonathan-r-thorpe May 18, 2026
255da9b
Patch to fix the build-test workflow.
jonathan-r-thorpe May 18, 2026
9aefbc4
Moved IS-05 v1.2.x schemas to v1.2-dev.
jonathan-r-thorpe May 18, 2026
a873136
Responded to review comments on pull request
jonathan-r-thorpe May 19, 2026
d499aac
Fix Windows CI host IP discovery on windows-2022 runners.
jonathan-r-thorpe May 19, 2026
5410b2f
Ignore IS-04-01 test_19 due to conflict with MXL sender and receivers
jonathan-r-thorpe May 19, 2026
6f3496e
Refactor audio flow creation in node implementation to use make_coded…
jonathan-r-thorpe May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -122,16 +122,22 @@ jobs:
run: |
# set compiler to cl.exe to avoid building with gcc.
echo "CMAKE_COMPILER_ARGS=-DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe" >> $env:GITHUB_ENV
# disable unused network interface
netsh interface set interface name="vEthernet (nat)" admin=DISABLED
# get host IP address
# disable unused network interface (may not exist on windows-2022 runners)
$nat = Get-NetAdapter -Name 'vEthernet (nat)' -ErrorAction SilentlyContinue
if ($nat) {
netsh interface set interface name="vEthernet (nat)" admin=DISABLED
}
# get host IP address (avoid Get-NetIPConfiguration which fails when multiple adapters map to one interface)
$ifIndex = (
Get-NetRoute -DestinationPrefix '0.0.0.0/0' |
Sort-Object RouteMetric |
Select-Object -First 1
).InterfaceIndex
$env:hostip = (
Get-NetIPConfiguration |
Where-Object {
$_.IPv4DefaultGateway -ne $null -and
$_.NetAdapter.Status -ne "Disconnected"
}
).IPv4Address.IPAddress
Get-NetIPAddress -InterfaceIndex $ifIndex -AddressFamily IPv4 |
Where-Object { $_.IPAddress -notlike '169.254.*' } |
Select-Object -First 1
).IPAddress
echo "HOST_IP_ADDRESS=$env:hostip" >> $env:GITHUB_ENV
ipconfig
# add the CRL Distribution Point to hosts so that it's discoverable when running the AMWA test suite in mDNS mode
Expand Down Expand Up @@ -429,6 +435,8 @@ jobs:
run_python="python"
fi
pip install -r utilities/run-test-suites/gsheetsImport/requirements.txt
# PyOpenSSL 26.2+ removed OpenSSL.crypto.X509Extension; nmos-testing still uses it for certificate tests.
$run_python -m pip install 'pyOpenSSL<26.2'

if [[ "${{ runner.os }}" == "Windows" ]]; then
# install certificates
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/src/amwa-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@
run_python="python"
fi
pip install -r utilities/run-test-suites/gsheetsImport/requirements.txt
# PyOpenSSL 26.2+ removed OpenSSL.crypto.X509Extension; nmos-testing still uses it for certificate tests.
$run_python -m pip install 'pyOpenSSL<26.2'

if [[ "${{ runner.os }}" == "Windows" ]]; then
# install certificates
Expand Down
24 changes: 15 additions & 9 deletions .github/workflows/src/build-setup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,22 @@
run: |
# set compiler to cl.exe to avoid building with gcc.
echo "CMAKE_COMPILER_ARGS=-DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe" >> $env:GITHUB_ENV
# disable unused network interface
netsh interface set interface name="vEthernet (nat)" admin=DISABLED
# get host IP address
# disable unused network interface (may not exist on windows-2022 runners)
$nat = Get-NetAdapter -Name 'vEthernet (nat)' -ErrorAction SilentlyContinue
if ($nat) {
netsh interface set interface name="vEthernet (nat)" admin=DISABLED
}
# get host IP address (avoid Get-NetIPConfiguration which fails when multiple adapters map to one interface)
$ifIndex = (
Get-NetRoute -DestinationPrefix '0.0.0.0/0' |
Sort-Object RouteMetric |
Select-Object -First 1
).InterfaceIndex
$env:hostip = (
Get-NetIPConfiguration |
Where-Object {
$_.IPv4DefaultGateway -ne $null -and
$_.NetAdapter.Status -ne "Disconnected"
}
).IPv4Address.IPAddress
Get-NetIPAddress -InterfaceIndex $ifIndex -AddressFamily IPv4 |
Where-Object { $_.IPAddress -notlike '169.254.*' } |
Select-Object -First 1
).IPAddress
echo "HOST_IP_ADDRESS=$env:hostip" >> $env:GITHUB_ENV
ipconfig
# add the CRL Distribution Point to hosts so that it's discoverable when running the AMWA test suite in mDNS mode
Expand Down
47 changes: 46 additions & 1 deletion Development/cmake/NmosCppLibraries.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -407,9 +407,50 @@ set(NMOS_IS05_SCHEMAS_HEADERS
nmos/is05_schemas/is05_schemas.h
)

set(NMOS_IS05_V1_2_TAG v1.2-dev)
set(NMOS_IS05_V1_1_TAG v1.1.x)
set(NMOS_IS05_V1_0_TAG v1.0.x)

set(NMOS_IS05_V1_2_SCHEMAS_JSON
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/activation-response-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/activation-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/bulk-receiver-post-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/bulk-response-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/bulk-sender-post-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/connectionapi-base.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/connectionapi-bulk.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/connectionapi-receiver.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/connectionapi-sender.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/connectionapi-single.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/constraint-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/constraints-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/constraints-schema-mqtt.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/constraints-schema-rtp.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/constraints-schema-websocket.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/error.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/receiver_transport_params.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/receiver_transport_params_dash.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/receiver_transport_params_ext.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/receiver_transport_params_mqtt.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/receiver_transport_params_mxl.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/receiver_transport_params_rtp.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/receiver_transport_params_websocket.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/receiver-response-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/receiver-stage-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/receiver-transport-file.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/sender_transport_params.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/sender_transport_params_dash.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/sender_transport_params_ext.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/sender_transport_params_mqtt.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/sender_transport_params_mxl.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/sender_transport_params_rtp.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/sender_transport_params_websocket.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/sender-receiver-base.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/sender-response-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/sender-stage-schema.json
third_party/is-05/${NMOS_IS05_V1_2_TAG}/APIs/schemas/transporttype-response-schema.json
)

set(NMOS_IS05_V1_1_SCHEMAS_JSON
third_party/is-05/${NMOS_IS05_V1_1_TAG}/APIs/schemas/activation-response-schema.json
third_party/is-05/${NMOS_IS05_V1_1_TAG}/APIs/schemas/activation-schema.json
Expand Down Expand Up @@ -474,10 +515,11 @@ set(NMOS_IS05_V1_0_SCHEMAS_JSON

set(NMOS_IS05_SCHEMAS_JSON_MATCH "third_party/is-05/([^/]+)/APIs/schemas/([^;]+)\\.json")
set(NMOS_IS05_SCHEMAS_SOURCE_REPLACE "${CMAKE_CURRENT_BINARY_DIR_REPLACE}/nmos/is05_schemas/\\1/\\2.cpp")
string(REGEX REPLACE "${NMOS_IS05_SCHEMAS_JSON_MATCH}(;|$)" "${NMOS_IS05_SCHEMAS_SOURCE_REPLACE}\\3" NMOS_IS05_V1_2_SCHEMAS_SOURCES "${NMOS_IS05_V1_2_SCHEMAS_JSON}")
string(REGEX REPLACE "${NMOS_IS05_SCHEMAS_JSON_MATCH}(;|$)" "${NMOS_IS05_SCHEMAS_SOURCE_REPLACE}\\3" NMOS_IS05_V1_1_SCHEMAS_SOURCES "${NMOS_IS05_V1_1_SCHEMAS_JSON}")
string(REGEX REPLACE "${NMOS_IS05_SCHEMAS_JSON_MATCH}(;|$)" "${NMOS_IS05_SCHEMAS_SOURCE_REPLACE}\\3" NMOS_IS05_V1_0_SCHEMAS_SOURCES "${NMOS_IS05_V1_0_SCHEMAS_JSON}")

foreach(JSON ${NMOS_IS05_V1_1_SCHEMAS_JSON} ${NMOS_IS05_V1_0_SCHEMAS_JSON})
foreach(JSON ${NMOS_IS05_V1_2_SCHEMAS_JSON} ${NMOS_IS05_V1_1_SCHEMAS_JSON} ${NMOS_IS05_V1_0_SCHEMAS_JSON})
string(REGEX REPLACE "${NMOS_IS05_SCHEMAS_JSON_MATCH}" "${NMOS_IS05_SCHEMAS_SOURCE_REPLACE}" SOURCE "${JSON}")
string(REGEX REPLACE "${NMOS_IS05_SCHEMAS_JSON_MATCH}" "\\1" NS "${JSON}")
string(REGEX REPLACE "${NMOS_IS05_SCHEMAS_JSON_MATCH}" "\\2" VAR "${JSON}")
Expand Down Expand Up @@ -509,11 +551,13 @@ endforeach()
add_library(
nmos_is05_schemas STATIC
${NMOS_IS05_SCHEMAS_HEADERS}
${NMOS_IS05_V1_2_SCHEMAS_SOURCES}
${NMOS_IS05_V1_1_SCHEMAS_SOURCES}
${NMOS_IS05_V1_0_SCHEMAS_SOURCES}
)

source_group("nmos\\is05_schemas\\Header Files" FILES ${NMOS_IS05_SCHEMAS_HEADERS})
source_group("nmos\\is05_schemas\\${NMOS_IS05_V1_2_TAG}\\Source Files" FILES ${NMOS_IS05_V1_2_SCHEMAS_SOURCES})
source_group("nmos\\is05_schemas\\${NMOS_IS05_V1_1_TAG}\\Source Files" FILES ${NMOS_IS05_V1_1_SCHEMAS_SOURCES})
source_group("nmos\\is05_schemas\\${NMOS_IS05_V1_0_TAG}\\Source Files" FILES ${NMOS_IS05_V1_0_SCHEMAS_SOURCES})

Expand Down Expand Up @@ -1170,6 +1214,7 @@ set(NMOS_CPP_NMOS_HEADERS
nmos/mdns_api.h
nmos/mdns_versions.h
nmos/media_type.h
nmos/mxl.h
nmos/model.h
nmos/mutex.h
nmos/node_api.h
Expand Down
11 changes: 9 additions & 2 deletions Development/nmos-cpp-node/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

// senders, receivers: controls which kinds of sender and receiver are instantiated by the example node
// the values must be an array of unique strings identifying the kinds of 'port', like ["v", "a", "d"], see impl::ports
// for MXL senders and receivers, the values must be like ["xv", "xa", "xd"]
// when omitted, all ports are instantiated
//"senders": ["v", "a"],
//"receivers": [],
Expand Down Expand Up @@ -51,8 +52,11 @@
// component_depth: controls the bits per component sample of video flows
//"component_depth": 10,

// video_type: media type of video flows, e.g. "video/raw" or "video/jxsv", see nmos::media_types
//"video_type": "video/jxsv",
// video_type: media type of video flows, e.g. "video/raw", "video/jxsv" for ST 2110 senders and receivers, see nmos::media_types
//"video_type": "video/raw",

// mxl_video_type: media type of MXL video flows and receivers, e.g. "video/v210" or "video/v210a", see nmos/mxl.h
//"mxl_video_type": "video/v210",

// channel_count: controls the number of channels in audio sources
//"channel_count": 8,
Expand Down Expand Up @@ -198,6 +202,9 @@
// seed id [registry, node]: optional, used to generate repeatable id values when running with the same configuration
//"seed_id": uuid-string,

// mxl_domain_id [node]: optional, overrides the generated MXL domain id used by MXL sender/receiver transport params
//"mxl_domain_id": uuid-string,

// label [registry, node]: used in resource label field
//"label": "",

Expand Down
Loading
Loading