For TL(temporal layers) = 2, the alt-ref frame should not be used as a reference.

Correction for the last frame in the cycle.
Review URL: https://webrtc-codereview.appspot.com/343015

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1479 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
marpan@webrtc.org 2012-01-19 18:25:23 +00:00
parent 0074187436
commit 20cd06123c
3 changed files with 13 additions and 3 deletions

View File

@ -63,7 +63,7 @@ bool TemporalLayers::ConfigureBitrates(int bitrateKbit,
temporal_pattern_[4] = kTemporalUpdateLast; temporal_pattern_[4] = kTemporalUpdateLast;
temporal_pattern_[5] = kTemporalUpdateGolden; temporal_pattern_[5] = kTemporalUpdateGolden;
temporal_pattern_[6] = kTemporalUpdateLast; temporal_pattern_[6] = kTemporalUpdateLast;
temporal_pattern_[7] = kTemporalUpdateNone; temporal_pattern_[7] = kTemporalUpdateNoneNoRefAltref;
break; break;
case 3: case 3:
temporal_ids_length_ = 4; temporal_ids_length_ = 4;
@ -175,6 +175,9 @@ int TemporalLayers::EncodeFlags() {
flags |= VP8_EFLAG_NO_UPD_GF; flags |= VP8_EFLAG_NO_UPD_GF;
flags |= VP8_EFLAG_NO_UPD_LAST; flags |= VP8_EFLAG_NO_UPD_LAST;
break; break;
case kTemporalUpdateNoneNoRefAltref:
flags |= VP8_EFLAG_NO_REF_ARF;
// Deliberately no break here.
case kTemporalUpdateNone: case kTemporalUpdateNone:
flags |= VP8_EFLAG_NO_UPD_GF; flags |= VP8_EFLAG_NO_UPD_GF;
flags |= VP8_EFLAG_NO_UPD_ARF; flags |= VP8_EFLAG_NO_UPD_ARF;

View File

@ -35,6 +35,8 @@ class TemporalLayers {
private: private:
enum TemporalReferences { enum TemporalReferences {
// Second layer and last frame in cycle, for 2 layers.
kTemporalUpdateNoneNoRefAltref = 6,
// Highest enhancement layer. // Highest enhancement layer.
kTemporalUpdateNone = 5, kTemporalUpdateNone = 5,
// Second enhancement layer. // Second enhancement layer.

View File

@ -40,6 +40,11 @@ enum {
VP8_EFLAG_NO_UPD_ARF | VP8_EFLAG_NO_UPD_ARF |
VP8_EFLAG_NO_UPD_LAST | VP8_EFLAG_NO_UPD_LAST |
VP8_EFLAG_NO_UPD_ENTROPY, 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) { TEST(TemporalLayersTest, 2Layers) {
@ -55,7 +60,7 @@ TEST(TemporalLayersTest, 2Layers) {
kTemporalUpdateLast, kTemporalUpdateLast,
kTemporalUpdateGolden, kTemporalUpdateGolden,
kTemporalUpdateLast, kTemporalUpdateLast,
kTemporalUpdateNone, kTemporalUpdateNoneNoRefAltRef,
kTemporalUpdateLast, kTemporalUpdateLast,
kTemporalUpdateGoldenWithoutDependency, kTemporalUpdateGoldenWithoutDependency,
kTemporalUpdateLast, kTemporalUpdateLast,
@ -63,7 +68,7 @@ TEST(TemporalLayersTest, 2Layers) {
kTemporalUpdateLast, kTemporalUpdateLast,
kTemporalUpdateGolden, kTemporalUpdateGolden,
kTemporalUpdateLast, kTemporalUpdateLast,
kTemporalUpdateNone kTemporalUpdateNoneNoRefAltRef
}; };
int expected_temporal_idx[16] = int expected_temporal_idx[16] =
{ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }; { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };