#include "common.hpp"
#include "RTC/Codecs/H264_SVC.hpp"
#include <catch2/catch.hpp>
#include <cstring>
using namespace RTC;
SCENARIO("parse H264_SVC payload descriptor", "[codecs][h264_svc]")
{
SECTION("parse payload descriptor for NALU 7")
{
uint8_t originalBuffer[] =
{
0x67,0x42,0xc0,0x33
};
uint8_t buffer[4] = { 0 };
std::memcpy(buffer, originalBuffer, sizeof(buffer));
const auto* payloadDescriptor = Codecs::H264_SVC::Parse(buffer, sizeof(buffer));
REQUIRE(payloadDescriptor);
REQUIRE(payloadDescriptor->tlIndex == 0);
REQUIRE(payloadDescriptor->slIndex == 0);
REQUIRE(payloadDescriptor->isKeyFrame == true);
REQUIRE(payloadDescriptor->hasTlIndex == false);
REQUIRE(payloadDescriptor->hasSlIndex == false);
delete payloadDescriptor;
}
SECTION("parse payload descriptor for NALU 8")
{
uint8_t originalBuffer[] =
{
0x68,0xce,0x01,0xa8
};
uint8_t buffer[4] = { 0 };
std::memcpy(buffer, originalBuffer, sizeof(buffer));
const auto* payloadDescriptor = Codecs::H264_SVC::Parse(buffer, sizeof(buffer));
REQUIRE(payloadDescriptor);
REQUIRE(payloadDescriptor->tlIndex == 0);
REQUIRE(payloadDescriptor->slIndex == 0);
REQUIRE(payloadDescriptor->isKeyFrame == false);
REQUIRE(payloadDescriptor->hasTlIndex == false);
REQUIRE(payloadDescriptor->hasSlIndex == false);
delete payloadDescriptor;
}
SECTION("parse payload descriptor for NALU 1")
{
uint8_t originalBuffer[] =
{
0x81,0xe0,0x00,0x4e
};
uint8_t buffer[4] = { 0 };
std::memcpy(buffer, originalBuffer, sizeof(buffer));
const auto* payloadDescriptor = Codecs::H264_SVC::Parse(buffer, sizeof(buffer));
REQUIRE(payloadDescriptor);
REQUIRE(payloadDescriptor->tlIndex == 0);
REQUIRE(payloadDescriptor->slIndex == 0);
REQUIRE(payloadDescriptor->isKeyFrame == false);
REQUIRE(payloadDescriptor->hasTlIndex == false);
REQUIRE(payloadDescriptor->hasSlIndex == false);
delete payloadDescriptor;
}
SECTION("parse payload descriptor for NALU 5")
{
uint8_t originalBuffer[] =
{
0x85,0xb8,0x00,0x04
};
uint8_t buffer[4] = { 0 };
std::memcpy(buffer, originalBuffer, sizeof(buffer));
const auto* payloadDescriptor = Codecs::H264_SVC::Parse(buffer, sizeof(buffer));
REQUIRE(payloadDescriptor);
REQUIRE(payloadDescriptor->tlIndex == 0);
REQUIRE(payloadDescriptor->slIndex == 0);
REQUIRE(payloadDescriptor->isKeyFrame == true);
REQUIRE(payloadDescriptor->hasTlIndex == false);
REQUIRE(payloadDescriptor->hasSlIndex == false);
delete payloadDescriptor;
}
SECTION("parse payload descriptor for NALU 14")
{
uint8_t originalBuffer[] =
{
0x6e,0x80,0x90,0x20
};
uint8_t buffer[4] = { 0 };
std::memcpy(buffer, originalBuffer, sizeof(buffer));
const auto* payloadDescriptor = Codecs::H264_SVC::Parse(buffer, sizeof(buffer));
REQUIRE(payloadDescriptor);
REQUIRE(payloadDescriptor->idr == 0);
REQUIRE(payloadDescriptor->tlIndex == 1);
REQUIRE(payloadDescriptor->slIndex == 1);
REQUIRE(payloadDescriptor->isKeyFrame == false);
REQUIRE(payloadDescriptor->hasTlIndex == true);
REQUIRE(payloadDescriptor->hasSlIndex == true);
delete payloadDescriptor;
}
SECTION("parse payload descriptor for NALU 20")
{
uint8_t originalBuffer[] =
{
0x74,0x80,0x90,0x20
};
uint8_t buffer[4] = { 0 };
std::memcpy(buffer, originalBuffer, sizeof(buffer));
const auto* payloadDescriptor = Codecs::H264_SVC::Parse(buffer, sizeof(buffer));
REQUIRE(payloadDescriptor);
REQUIRE(payloadDescriptor->idr == 0);
REQUIRE(payloadDescriptor->tlIndex == 1);
REQUIRE(payloadDescriptor->slIndex == 1);
REQUIRE(payloadDescriptor->isKeyFrame == false);
REQUIRE(payloadDescriptor->hasTlIndex == true);
REQUIRE(payloadDescriptor->hasSlIndex == true);
delete payloadDescriptor;
}
}