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_[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;

View File

@ -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.

View File

@ -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 };