Skip to content

Commit

Permalink
Merge pull request #3 from jmillan/issue_989
Browse files Browse the repository at this point in the history
Merge mediasoup issue versatica#1009, don't forward VP8 layers if not requested.
  • Loading branch information
namello-gather authored Oct 22, 2024
2 parents 1d9372f + c1db768 commit e349ce3
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 1 deletion.
8 changes: 7 additions & 1 deletion worker/src/RTC/Codecs/VP8.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ namespace RTC
// clang-format off
if (
this->payloadDescriptor->hasTlIndex &&
this->payloadDescriptor->tlIndex > context->GetCurrentTemporalLayer()
this->payloadDescriptor->tlIndex == context->GetTargetTemporalLayer()
)
// clang-format on
{
Expand All @@ -375,6 +375,12 @@ namespace RTC
context->SetCurrentTemporalLayer(context->GetTargetTemporalLayer());
}

// Do not send tlIndex higher than current one.
if (this->payloadDescriptor->tlIndex > context->GetCurrentTemporalLayer())
{
return false;
}

// clang-format off
if (
this->payloadDescriptor->hasPictureId &&
Expand Down
64 changes: 64 additions & 0 deletions worker/test/src/RTC/Codecs/TestVP8.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -322,4 +322,68 @@ SCENARIO("process VP8 payload descriptor", "[codecs][vp8]")
forwarded = ProcessPacket(context, 1, 0, 1);
REQUIRE_FALSE(forwarded);
}

SECTION("old packets with higher temporal layer than current are dropped")
{
RTC::Codecs::EncodingContext::Params params;
params.spatialLayers = 0;
params.temporalLayers = 2;
Codecs::VP8::EncodingContext context(params);
context.SyncRequired();

context.SetCurrentTemporalLayer(0);
context.SetTargetTemporalLayer(0);

// Frame 1.
auto forwarded = ProcessPacket(context, 1, 0, 0);
REQUIRE(forwarded);
REQUIRE(forwarded->pictureId == 1);
REQUIRE(forwarded->tlIndex == 0);
REQUIRE(forwarded->tl0PictureIndex == 1);

// Frame 2.
forwarded = ProcessPacket(context, 2, 0, 0);
REQUIRE(forwarded);
REQUIRE(forwarded->pictureId == 2);
REQUIRE(forwarded->tlIndex == 0);
REQUIRE(forwarded->tl0PictureIndex == 1);

// Frame 3. Old packet with higher temporal layer than current.
forwarded = ProcessPacket(context, 0, 0, 1);
REQUIRE_FALSE(forwarded);
REQUIRE(context.GetCurrentTemporalLayer() == 0);
}

SECTION("packets with higher temporal layer than current are dropped")
{
RTC::Codecs::EncodingContext::Params params;
params.spatialLayers = 0;
params.temporalLayers = 2;
Codecs::VP8::EncodingContext context(params);
context.SyncRequired();

context.SetCurrentTemporalLayer(0);
context.SetTargetTemporalLayer(0);

// Frame 1.
auto forwarded = ProcessPacket(context, 1, 0, 0);
REQUIRE(forwarded);
REQUIRE(forwarded->pictureId == 1);
REQUIRE(forwarded->tlIndex == 0);
REQUIRE(forwarded->tl0PictureIndex == 1);

// Frame 2.
forwarded = ProcessPacket(context, 2, 0, 0);
REQUIRE(forwarded);
REQUIRE(forwarded->pictureId == 2);
REQUIRE(forwarded->tlIndex == 0);
REQUIRE(forwarded->tl0PictureIndex == 1);

context.SetTargetTemporalLayer(2);

// Frame 3. Old packet with higher temporal layer than current.
forwarded = ProcessPacket(context, 3, 0, 1);
REQUIRE_FALSE(forwarded);
REQUIRE(context.GetCurrentTemporalLayer() == 0);
}
}

0 comments on commit e349ce3

Please sign in to comment.