Skip to content

Add IS-11 support#474

Open
lo-simon wants to merge 162 commits intosony:masterfrom
lo-simon:IS-11-patch
Open

Add IS-11 support#474
lo-simon wants to merge 162 commits intosony:masterfrom
lo-simon:IS-11-patch

Conversation

@lo-simon
Copy link
Copy Markdown
Collaborator

…move Flow Compatibility API helper functions into details namespace
@lo-simon lo-simon marked this pull request as ready for review November 25, 2025 15:18
Comment thread Development/nmos-cpp-node/node_implementation.cpp
…callback to parse "transport_file" and Stream Compatibility Management API callback to perform application-specific receiver validation with its transport file.
Comment on lines +1061 to +1063
auto output = edid_support
? nmos::experimental::make_streamcompatibility_output(output_id, device_id, true, boost::variant<utility::string_t, web::uri>(edid), receiver_ids, model.settings)
: nmos::experimental::make_streamcompatibility_output(output_id, device_id, true, receiver_ids, model.settings);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmmm, what's the behaviour if EDID support is set to true in the config? Does this pass any of the EDID tests in the NMOS Testing tool?

Comment thread Development/nmos-cpp-node/node_implementation.cpp Outdated
Comment thread Development/nmos-cpp-node/node_implementation.cpp Outdated
if (!nmos::caps::meta::enabled(constraint_set)) continue;
for (const auto& sender_caps_constraint_set : sender_capabilities)
{
const auto intersection = nmos::experimental::get_constraint_set_intersection(sender_caps_constraint_set, constraint_set);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we worry about the Windows 2022 warning?
declaration of 'intersection' hides function parameter

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rename the variable intersection to constraint_set_intersection to prevent declaration of 'intersection' hides function parameter warning.

Comment thread Development/nmos/constraints.cpp
}

// Constraint B is a subconstraint of Constraint A if:
// 1. Constraint B has enum keyword when Constraint A has it and enumerated values of Constraint B are a subset of enumerated values of Constraint A
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Constraint B has enum keyword when Constraint also has it" perhaps?

lo-simon and others added 8 commits January 22, 2026 09:05
Co-authored-by: jonathan-r-thorpe <64410119+jonathan-r-thorpe@users.noreply.github.com>
Co-authored-by: jonathan-r-thorpe <64410119+jonathan-r-thorpe@users.noreply.github.com>
…o prevent `declaration of 'intersection' hides function parameter` warning
# Conflicts:
#	Development/nmos-cpp-node/node_implementation.cpp
@simonbaren
Copy link
Copy Markdown
Contributor

Hi @lo-simon and @jonathan-r-thorpe thanks for reviving this PR. I've been using the fork for long time now and will be glad to see it in main.
@lo-simon If you need additional set of hands, feel free to contact me.

@jonathan-r-thorpe
Copy link
Copy Markdown
Contributor

Hi @lo-simon and @jonathan-r-thorpe thanks for reviving this PR. I've been using the fork for long time now and will be glad to see it in main. @lo-simon If you need additional set of hands, feel free to contact me.

Hi @simonbaren - have you tried running this branch against the NMOS Testing tool IS-11 test suite? We're having a problem when we run the test suite with EDID switched on that we're trying to understand.

@simonbaren
Copy link
Copy Markdown
Contributor

@jonathan-r-thorpe yes we did. But we have a custom node-implementation (to interact with our low-level stuff).
I know that we did fail some of the IS-11 EDID tests with errors COULDN'T TEST.
I can try to gather which specific tests it was.

If you want I can try to run the code as-is against nmos-testing to see what is missing.
Note - that there are tests (can't recall the test case number) that in the testing procedure you need to read the advertised EDID with an external tool to verify the test - i.e there is a manual test for it. It happens on the tests with the active constraints_sets.

@simonbaren
Copy link
Copy Markdown
Contributor

@jonathan-r-thorpe I had another look on the IS-11 project - the EDID code (constraints_sets) is just a stub and doesn't actually modify the effective_edid. Might that be the issue you are seeing?

@N-Nagorny
Copy link
Copy Markdown
Contributor

Hello guys! Glad to see the PR was revived.

Yes, three tests fail.

Test ID Test name Description Resolution
test_01_03 Inputs with Base EDID support reject an invalid EDID The test PUTs a nulled binary to Base EDID. EDID parsing was out of scope for the reference impementation, so nmos-cpp accepts any EDID (returns 204). We can implement basic EDID support. https://github.com/N-Nagorny/libedid could come in handy here, though I can't commit to maintaining it. Alternatively, we can --ignore it in run_nmos_testing.sh.
test_02_03_05_01, test_02_03_05_02 Verify for inputs supporting EDID that the version and the effective EDID change when applying constraints The test tries to constrain a Sender to certain grain_rate for video and sample_rate for audio respectively. node_implementation.cpp declares Sender Capabilities that allow only single value of grain_rate and sample_rate, so Node can't adhere to constraint_sets from the tests and returns 422. This valid response should result into "Could Not Test" but the test suite has a bug in it (fixed in AMWA-TV/nmos-testing#852). Revive AMWA-TV/nmos-testing#852

@simonbaren
Copy link
Copy Markdown
Contributor

Hi @N-Nagorny .
About test_02_03_05_01 and test_02_03_05_02 - those are very Generator reliant.
I mean - if your source Generator comply to EDID changes - test will fail.
The solution to that (was applied by IPMX I think) is to add a manual step for those tests. When test runs, the tester is prompted to go and read the EDID from the device and check that it changed.

As a semi-automatic test, it is possible to read the effective_edid and validate that it was constrained according to the request, but this is kind of wrong, because the test should check what is on the wire side and not the nmos side.

regarding test_01_03 - it pass for the implementation we run (we do use the libedid: Edid::parse_edid_binary(edid)) .

@N-Nagorny
Copy link
Copy Markdown
Contributor

N-Nagorny commented Apr 28, 2026

I mean - if your source Generator comply to EDID changes - test will fail.

Should it have been "doesn't comply" or I'm missing something?

was applied by IPMX I think

Could you please share links?

because the test should check what is on the wire side and not the nmos side

Effective EDID just tells what the modeled device gives to its upstream input. NMOS Tests don't check deeper than the NMOS side by design, like they don't capture UDP streams after activating a Sender.

Could you please tell more about your implementation and run AMWA-TV/nmos-testing#852 against it?

@simonbaren
Copy link
Copy Markdown
Contributor

@N-Nagorny

Should it have been "doesn't comply" or I'm missing something?

Yes, "doesn't comply" is correct — my mistake.

Could you please share links?

Sorry but I don't have a direct link. It's an additional test configuration where the tester is prompted to read the EDID from the DUT at a certain point and verify it changed on the wire.

Effective EDID just tells what the modeled device gives to its upstream input. NMOS Tests don't check deeper than the NMOS side by design, like they don't capture UDP streams after activating a Sender.

The UDP analogy doesn't hold here. A sender that doesn't stream what it's supposed to would still fail downstream — the UDP stream itself is independently verifiable. But an EDID change that never reaches the wire has no such natural verification. A node could trivially update effective_edid on the NMOS side without ever pushing the change to the physical input — making it look compliant while not actually being so. The example node_implementation is actually a perfect illustration of this: there is no real HW behind it, so effective_edid is just a value in memory with no physical effect. That's exactly the gap the manual step is designed to close, and it's also why a node that only "looks good" on the NMOS side is not truly IS-11 compliant.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants