/** * @file src/video_encoder_probe_policy.h * @brief Value-level ownership rules for encoder capability probes. */ #pragma once #include #include namespace video::encoder_probe_policy { struct cache_key_t { std::string encoder_configuration; std::string adapter_identity; bool adapter_identity_resolved = false; bool operator==(const cache_key_t &other) const { return encoder_configuration == other.encoder_configuration && adapter_identity == other.adapter_identity && adapter_identity_resolved == other.adapter_identity_resolved; } }; struct probe_observation_t { std::optional required_adapter; std::optional observed_adapter; }; /** * A positive result belongs to the adapter returned by the initialized probe * display. A pending or selected adapter may reject a mismatched result, but * it cannot replace a missing observation or take ownership of the result. */ inline std::optional own_successful_cache_key( const cache_key_t &requested_key, const probe_observation_t &observation ) { if (!observation.observed_adapter || observation.observed_adapter->empty()) { return std::nullopt; } if (observation.required_adapter && (*observation.required_adapter != *observation.observed_adapter)) { return std::nullopt; } auto owned_key = requested_key; owned_key.adapter_identity = *observation.observed_adapter; owned_key.adapter_identity_resolved = true; return owned_key; } inline bool cache_key_matches( const cache_key_t &requested_key, const std::optional &cached_key ) { return requested_key.adapter_identity_resolved && cached_key && cached_key->adapter_identity_resolved && requested_key == *cached_key; } } // namespace video::encoder_probe_policy