Update the 3 layer temporal pattern and apply the current fix to issue 6992310.
Review URL: https://webrtc-codereview.appspot.com/753006 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2694 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
31eac6082d
commit
1e68577499
@ -85,13 +85,13 @@ bool TemporalLayers::ConfigureBitrates(int bitrateKbit,
|
||||
temporal_ids_,
|
||||
sizeof(unsigned int) * temporal_ids_length_);
|
||||
temporal_pattern_length_ = 8;
|
||||
temporal_pattern_[0] = kTemporalUpdateLast;
|
||||
temporal_pattern_[1] = kTemporalUpdateAltrefWithoutDependency;
|
||||
temporal_pattern_[2] = kTemporalUpdateGoldenWithoutDependency;
|
||||
temporal_pattern_[3] = kTemporalUpdateAltref;
|
||||
temporal_pattern_[4] = kTemporalUpdateLast;
|
||||
temporal_pattern_[5] = kTemporalUpdateAltref;
|
||||
temporal_pattern_[6] = kTemporalUpdateGolden;
|
||||
temporal_pattern_[0] = kTemporalUpdateLastAndGoldenRefAltRef;
|
||||
temporal_pattern_[1] = kTemporalUpdateNoneNoRefGoldenRefAltRef;
|
||||
temporal_pattern_[2] = kTemporalUpdateGoldenWithoutDependencyRefAltRef;
|
||||
temporal_pattern_[3] = kTemporalUpdateNone;
|
||||
temporal_pattern_[4] = kTemporalUpdateLastRefAltRef;
|
||||
temporal_pattern_[5] = kTemporalUpdateNone;
|
||||
temporal_pattern_[6] = kTemporalUpdateGoldenRefAltRef;
|
||||
temporal_pattern_[7] = kTemporalUpdateNone;
|
||||
break;
|
||||
case 4:
|
||||
@ -184,6 +184,31 @@ int TemporalLayers::EncodeFlags() {
|
||||
flags |= VP8_EFLAG_NO_UPD_LAST;
|
||||
flags |= VP8_EFLAG_NO_UPD_ENTROPY;
|
||||
break;
|
||||
case kTemporalUpdateNoneNoRefGoldenRefAltRef:
|
||||
flags |= VP8_EFLAG_NO_REF_GF;
|
||||
flags |= VP8_EFLAG_NO_UPD_GF;
|
||||
flags |= VP8_EFLAG_NO_UPD_ARF;
|
||||
flags |= VP8_EFLAG_NO_UPD_LAST;
|
||||
flags |= VP8_EFLAG_NO_UPD_ENTROPY;
|
||||
break;
|
||||
case kTemporalUpdateGoldenWithoutDependencyRefAltRef:
|
||||
flags |= VP8_EFLAG_NO_REF_GF;
|
||||
flags |= VP8_EFLAG_NO_UPD_ARF;
|
||||
flags |= VP8_EFLAG_NO_UPD_LAST;
|
||||
break;
|
||||
case kTemporalUpdateLastRefAltRef:
|
||||
flags |= VP8_EFLAG_NO_UPD_GF;
|
||||
flags |= VP8_EFLAG_NO_UPD_ARF;
|
||||
flags |= VP8_EFLAG_NO_REF_GF;
|
||||
break;
|
||||
case kTemporalUpdateGoldenRefAltRef:
|
||||
flags |= VP8_EFLAG_NO_UPD_ARF;
|
||||
flags |= VP8_EFLAG_NO_UPD_LAST;
|
||||
break;
|
||||
case kTemporalUpdateLastAndGoldenRefAltRef:
|
||||
flags |= VP8_EFLAG_NO_UPD_ARF;
|
||||
flags |= VP8_EFLAG_NO_REF_GF;
|
||||
break;
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
@ -204,6 +229,8 @@ void TemporalLayers::PopulateCodecSpecific(bool key_frame,
|
||||
|
||||
if (temporal_reference == kTemporalUpdateAltrefWithoutDependency ||
|
||||
temporal_reference == kTemporalUpdateGoldenWithoutDependency ||
|
||||
temporal_reference == kTemporalUpdateGoldenWithoutDependencyRefAltRef ||
|
||||
temporal_reference == kTemporalUpdateNoneNoRefGoldenRefAltRef ||
|
||||
(temporal_reference == kTemporalUpdateNone &&
|
||||
number_of_temporal_layers_ == 4)) {
|
||||
vp8_info->layerSync = true;
|
||||
|
@ -35,6 +35,18 @@ class TemporalLayers {
|
||||
|
||||
private:
|
||||
enum TemporalReferences {
|
||||
// First base layer frame for 3 temporal layers, which updates last and
|
||||
// golden with alt ref dependency.
|
||||
kTemporalUpdateLastAndGoldenRefAltRef = 11,
|
||||
// First enhancement layer with alt ref dependency.
|
||||
kTemporalUpdateGoldenRefAltRef = 10,
|
||||
// First enhancement layer with alt ref dependency.
|
||||
kTemporalUpdateGoldenWithoutDependencyRefAltRef = 9,
|
||||
// Base layer with alt ref dependency.
|
||||
kTemporalUpdateLastRefAltRef = 8,
|
||||
// Highest enhacement layer without dependency on golden with alt ref
|
||||
// dependency.
|
||||
kTemporalUpdateNoneNoRefGoldenRefAltRef = 7,
|
||||
// Second layer and last frame in cycle, for 2 layers.
|
||||
kTemporalUpdateNoneNoRefAltref = 6,
|
||||
// Highest enhancement layer.
|
||||
|
@ -45,6 +45,21 @@ enum {
|
||||
VP8_EFLAG_NO_UPD_ARF |
|
||||
VP8_EFLAG_NO_UPD_LAST |
|
||||
VP8_EFLAG_NO_UPD_ENTROPY,
|
||||
kTemporalUpdateNoneNoRefGolden = VP8_EFLAG_NO_REF_GF |
|
||||
VP8_EFLAG_NO_UPD_GF |
|
||||
VP8_EFLAG_NO_UPD_ARF |
|
||||
VP8_EFLAG_NO_UPD_LAST |
|
||||
VP8_EFLAG_NO_UPD_ENTROPY,
|
||||
kTemporalUpdateGoldenWithoutDependencyRefAltRef = VP8_EFLAG_NO_REF_GF |
|
||||
VP8_EFLAG_NO_UPD_ARF |
|
||||
VP8_EFLAG_NO_UPD_LAST,
|
||||
kTemporalUpdateGoldenRefAltRef = VP8_EFLAG_NO_UPD_ARF |
|
||||
VP8_EFLAG_NO_UPD_LAST,
|
||||
kTemporalUpdateLastRefAltRef = VP8_EFLAG_NO_UPD_GF |
|
||||
VP8_EFLAG_NO_UPD_ARF |
|
||||
VP8_EFLAG_NO_REF_GF,
|
||||
kTemporalUpdateLastAndGoldenRefAltRef = VP8_EFLAG_NO_UPD_ARF |
|
||||
VP8_EFLAG_NO_REF_GF,
|
||||
};
|
||||
|
||||
TEST(TemporalLayersTest, 2Layers) {
|
||||
@ -92,21 +107,21 @@ TEST(TemporalLayersTest, 3Layers) {
|
||||
CodecSpecificInfoVP8 vp8_info;
|
||||
tl.ConfigureBitrates(500, &cfg);
|
||||
|
||||
int expected_flags[16] = { kTemporalUpdateLast,
|
||||
kTemporalUpdateAltrefWithoutDependency,
|
||||
kTemporalUpdateGoldenWithoutDependency,
|
||||
kTemporalUpdateAltref,
|
||||
kTemporalUpdateLast,
|
||||
kTemporalUpdateAltref,
|
||||
kTemporalUpdateGolden,
|
||||
int expected_flags[16] = { kTemporalUpdateLastAndGoldenRefAltRef,
|
||||
kTemporalUpdateNoneNoRefGolden,
|
||||
kTemporalUpdateGoldenWithoutDependencyRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateLast,
|
||||
kTemporalUpdateAltrefWithoutDependency,
|
||||
kTemporalUpdateGoldenWithoutDependency,
|
||||
kTemporalUpdateAltref,
|
||||
kTemporalUpdateLast,
|
||||
kTemporalUpdateAltref,
|
||||
kTemporalUpdateGolden,
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateGoldenRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateLastAndGoldenRefAltRef,
|
||||
kTemporalUpdateNoneNoRefGolden,
|
||||
kTemporalUpdateGoldenWithoutDependencyRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateGoldenRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
};
|
||||
int expected_temporal_idx[16] =
|
||||
@ -171,13 +186,13 @@ TEST(TemporalLayersTest, KeyFrame) {
|
||||
tl.ConfigureBitrates(500, &cfg);
|
||||
|
||||
int expected_flags[8] = {
|
||||
kTemporalUpdateLast,
|
||||
kTemporalUpdateAltrefWithoutDependency,
|
||||
kTemporalUpdateGoldenWithoutDependency,
|
||||
kTemporalUpdateAltref,
|
||||
kTemporalUpdateLast,
|
||||
kTemporalUpdateAltref,
|
||||
kTemporalUpdateGolden,
|
||||
kTemporalUpdateLastAndGoldenRefAltRef,
|
||||
kTemporalUpdateNoneNoRefGolden,
|
||||
kTemporalUpdateGoldenWithoutDependencyRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateGoldenRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
};
|
||||
int expected_temporal_idx[8] =
|
||||
|
Loading…
x
Reference in New Issue
Block a user