VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /usr/local/lib/node_modules/mediasoup/worker/test/src/RTC/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/local/lib/node_modules/mediasoup/worker/test/src/RTC/TestRtpEncodingParameters.cpp
#include "common.hpp"
#include <catch.hpp>
#include <regex>

static const std::regex ScalabilityModeRegex(
  "^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})(_KEY)?.*", std::regex_constants::ECMAScript);

struct scalabilityMode
{
	uint8_t spatialLayers  = 1;
	uint8_t temporalLayers = 1;
	bool ksvc              = false;
};

static struct scalabilityMode parseScalabilityMode(const std::string& scalabilityMode)
{
	struct scalabilityMode result;
	std::smatch match;

	std::regex_match(scalabilityMode, match, ScalabilityModeRegex);

	if (!match.empty())
	{
		try
		{
			result.spatialLayers  = std::stoul(match[1].str());
			result.temporalLayers = std::stoul(match[2].str());
			result.ksvc           = match.size() >= 4 && match[3].str() == "_KEY";
		}
		catch (std::exception& e)
		{
		}
	}

	return result;
}

SCENARIO("parseScalabilityMode", "[rtc]")
{
	SECTION("parse L1T3")
	{
		const auto scalabilityMode = parseScalabilityMode("L1T3");

		REQUIRE(scalabilityMode.spatialLayers == 1);
		REQUIRE(scalabilityMode.temporalLayers == 3);
		REQUIRE(scalabilityMode.ksvc == false);
	}

	SECTION("parse S1T3")
	{
		const auto scalabilityMode = parseScalabilityMode("S1T3");

		REQUIRE(scalabilityMode.spatialLayers == 1);
		REQUIRE(scalabilityMode.temporalLayers == 3);
		REQUIRE(scalabilityMode.ksvc == false);
	}

	SECTION("parse L3T2_KEY")
	{
		const auto scalabilityMode = parseScalabilityMode("L3T2_KEY");

		REQUIRE(scalabilityMode.spatialLayers == 3);
		REQUIRE(scalabilityMode.temporalLayers == 2);
		REQUIRE(scalabilityMode.ksvc == true);
	}

	SECTION("parse S2T3")
	{
		const auto scalabilityMode = parseScalabilityMode("S2T3");

		REQUIRE(scalabilityMode.spatialLayers == 2);
		REQUIRE(scalabilityMode.temporalLayers == 3);
		REQUIRE(scalabilityMode.ksvc == false);
	}

	SECTION("parse foo")
	{
		const auto scalabilityMode = parseScalabilityMode("foo");

		REQUIRE(scalabilityMode.spatialLayers == 1);
		REQUIRE(scalabilityMode.temporalLayers == 1);
		REQUIRE(scalabilityMode.ksvc == false);
	}

	SECTION("parse ''")
	{
		const auto scalabilityMode = parseScalabilityMode("");

		REQUIRE(scalabilityMode.spatialLayers == 1);
		REQUIRE(scalabilityMode.temporalLayers == 1);
		REQUIRE(scalabilityMode.ksvc == false);
	}

	SECTION("parse S0T3")
	{
		const auto scalabilityMode = parseScalabilityMode("S0T3");

		REQUIRE(scalabilityMode.spatialLayers == 1);
		REQUIRE(scalabilityMode.temporalLayers == 1);
		REQUIRE(scalabilityMode.ksvc == false);
	}

	SECTION("parse S1T0")
	{
		const auto scalabilityMode = parseScalabilityMode("S1T0");

		REQUIRE(scalabilityMode.spatialLayers == 1);
		REQUIRE(scalabilityMode.temporalLayers == 1);
		REQUIRE(scalabilityMode.ksvc == false);
	}

	SECTION("parse S20T3")
	{
		const auto scalabilityMode = parseScalabilityMode("S20T3");

		REQUIRE(scalabilityMode.spatialLayers == 20);
		REQUIRE(scalabilityMode.temporalLayers == 3);
		REQUIRE(scalabilityMode.ksvc == false);
	}

	SECTION("parse S200T3")
	{
		const auto scalabilityMode = parseScalabilityMode("S200T3");

		REQUIRE(scalabilityMode.spatialLayers == 1);
		REQUIRE(scalabilityMode.temporalLayers == 1);
		REQUIRE(scalabilityMode.ksvc == false);
	}
}

VaKeR 2022