diff --git a/src/modules/video_coding/codecs/vp8/main/source/temporal_layers.cc b/src/modules/video_coding/codecs/vp8/main/source/temporal_layers.cc index 28c270d550..59ad9c2646 100644 --- a/src/modules/video_coding/codecs/vp8/main/source/temporal_layers.cc +++ b/src/modules/video_coding/codecs/vp8/main/source/temporal_layers.cc @@ -63,7 +63,7 @@ bool TemporalLayers::ConfigureBitrates(int bitrateKbit, temporal_pattern_[4] = kTemporalUpdateLast; temporal_pattern_[5] = kTemporalUpdateGolden; temporal_pattern_[6] = kTemporalUpdateLast; - temporal_pattern_[7] = kTemporalUpdateNone; + temporal_pattern_[7] = kTemporalUpdateNoneNoRefAltref; break; case 3: temporal_ids_length_ = 4; @@ -175,6 +175,9 @@ int TemporalLayers::EncodeFlags() { flags |= VP8_EFLAG_NO_UPD_GF; flags |= VP8_EFLAG_NO_UPD_LAST; break; + case kTemporalUpdateNoneNoRefAltref: + flags |= VP8_EFLAG_NO_REF_ARF; + // Deliberately no break here. case kTemporalUpdateNone: flags |= VP8_EFLAG_NO_UPD_GF; flags |= VP8_EFLAG_NO_UPD_ARF; diff --git a/src/modules/video_coding/codecs/vp8/main/source/temporal_layers.h b/src/modules/video_coding/codecs/vp8/main/source/temporal_layers.h index 6be0582a08..2ca7229170 100644 --- a/src/modules/video_coding/codecs/vp8/main/source/temporal_layers.h +++ b/src/modules/video_coding/codecs/vp8/main/source/temporal_layers.h @@ -35,6 +35,8 @@ class TemporalLayers { private: enum TemporalReferences { + // Second layer and last frame in cycle, for 2 layers. + kTemporalUpdateNoneNoRefAltref = 6, // Highest enhancement layer. kTemporalUpdateNone = 5, // Second enhancement layer. diff --git a/src/modules/video_coding/codecs/vp8/main/source/temporal_layers_unittest.cc b/src/modules/video_coding/codecs/vp8/main/source/temporal_layers_unittest.cc index 69f35a5f64..7b35c6f5e3 100644 --- a/src/modules/video_coding/codecs/vp8/main/source/temporal_layers_unittest.cc +++ b/src/modules/video_coding/codecs/vp8/main/source/temporal_layers_unittest.cc @@ -40,6 +40,11 @@ enum { VP8_EFLAG_NO_UPD_ARF | VP8_EFLAG_NO_UPD_LAST | VP8_EFLAG_NO_UPD_ENTROPY, + kTemporalUpdateNoneNoRefAltRef = VP8_EFLAG_NO_REF_ARF | + VP8_EFLAG_NO_UPD_GF | + VP8_EFLAG_NO_UPD_ARF | + VP8_EFLAG_NO_UPD_LAST | + VP8_EFLAG_NO_UPD_ENTROPY, }; TEST(TemporalLayersTest, 2Layers) { @@ -55,7 +60,7 @@ TEST(TemporalLayersTest, 2Layers) { kTemporalUpdateLast, kTemporalUpdateGolden, kTemporalUpdateLast, - kTemporalUpdateNone, + kTemporalUpdateNoneNoRefAltRef, kTemporalUpdateLast, kTemporalUpdateGoldenWithoutDependency, kTemporalUpdateLast, @@ -63,7 +68,7 @@ TEST(TemporalLayersTest, 2Layers) { kTemporalUpdateLast, kTemporalUpdateGolden, kTemporalUpdateLast, - kTemporalUpdateNone + kTemporalUpdateNoneNoRefAltRef }; int expected_temporal_idx[16] = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };