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:
@ -85,13 +85,13 @@ bool TemporalLayers::ConfigureBitrates(int bitrateKbit,
|
|||||||
temporal_ids_,
|
temporal_ids_,
|
||||||
sizeof(unsigned int) * temporal_ids_length_);
|
sizeof(unsigned int) * temporal_ids_length_);
|
||||||
temporal_pattern_length_ = 8;
|
temporal_pattern_length_ = 8;
|
||||||
temporal_pattern_[0] = kTemporalUpdateLast;
|
temporal_pattern_[0] = kTemporalUpdateLastAndGoldenRefAltRef;
|
||||||
temporal_pattern_[1] = kTemporalUpdateAltrefWithoutDependency;
|
temporal_pattern_[1] = kTemporalUpdateNoneNoRefGoldenRefAltRef;
|
||||||
temporal_pattern_[2] = kTemporalUpdateGoldenWithoutDependency;
|
temporal_pattern_[2] = kTemporalUpdateGoldenWithoutDependencyRefAltRef;
|
||||||
temporal_pattern_[3] = kTemporalUpdateAltref;
|
temporal_pattern_[3] = kTemporalUpdateNone;
|
||||||
temporal_pattern_[4] = kTemporalUpdateLast;
|
temporal_pattern_[4] = kTemporalUpdateLastRefAltRef;
|
||||||
temporal_pattern_[5] = kTemporalUpdateAltref;
|
temporal_pattern_[5] = kTemporalUpdateNone;
|
||||||
temporal_pattern_[6] = kTemporalUpdateGolden;
|
temporal_pattern_[6] = kTemporalUpdateGoldenRefAltRef;
|
||||||
temporal_pattern_[7] = kTemporalUpdateNone;
|
temporal_pattern_[7] = kTemporalUpdateNone;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
@ -184,6 +184,31 @@ int TemporalLayers::EncodeFlags() {
|
|||||||
flags |= VP8_EFLAG_NO_UPD_LAST;
|
flags |= VP8_EFLAG_NO_UPD_LAST;
|
||||||
flags |= VP8_EFLAG_NO_UPD_ENTROPY;
|
flags |= VP8_EFLAG_NO_UPD_ENTROPY;
|
||||||
break;
|
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;
|
return flags;
|
||||||
}
|
}
|
||||||
@ -204,6 +229,8 @@ void TemporalLayers::PopulateCodecSpecific(bool key_frame,
|
|||||||
|
|
||||||
if (temporal_reference == kTemporalUpdateAltrefWithoutDependency ||
|
if (temporal_reference == kTemporalUpdateAltrefWithoutDependency ||
|
||||||
temporal_reference == kTemporalUpdateGoldenWithoutDependency ||
|
temporal_reference == kTemporalUpdateGoldenWithoutDependency ||
|
||||||
|
temporal_reference == kTemporalUpdateGoldenWithoutDependencyRefAltRef ||
|
||||||
|
temporal_reference == kTemporalUpdateNoneNoRefGoldenRefAltRef ||
|
||||||
(temporal_reference == kTemporalUpdateNone &&
|
(temporal_reference == kTemporalUpdateNone &&
|
||||||
number_of_temporal_layers_ == 4)) {
|
number_of_temporal_layers_ == 4)) {
|
||||||
vp8_info->layerSync = true;
|
vp8_info->layerSync = true;
|
||||||
|
@ -35,6 +35,18 @@ class TemporalLayers {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
enum TemporalReferences {
|
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.
|
// Second layer and last frame in cycle, for 2 layers.
|
||||||
kTemporalUpdateNoneNoRefAltref = 6,
|
kTemporalUpdateNoneNoRefAltref = 6,
|
||||||
// Highest enhancement layer.
|
// Highest enhancement layer.
|
||||||
|
@ -45,6 +45,21 @@ 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,
|
||||||
|
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) {
|
TEST(TemporalLayersTest, 2Layers) {
|
||||||
@ -92,21 +107,21 @@ TEST(TemporalLayersTest, 3Layers) {
|
|||||||
CodecSpecificInfoVP8 vp8_info;
|
CodecSpecificInfoVP8 vp8_info;
|
||||||
tl.ConfigureBitrates(500, &cfg);
|
tl.ConfigureBitrates(500, &cfg);
|
||||||
|
|
||||||
int expected_flags[16] = { kTemporalUpdateLast,
|
int expected_flags[16] = { kTemporalUpdateLastAndGoldenRefAltRef,
|
||||||
kTemporalUpdateAltrefWithoutDependency,
|
kTemporalUpdateNoneNoRefGolden,
|
||||||
kTemporalUpdateGoldenWithoutDependency,
|
kTemporalUpdateGoldenWithoutDependencyRefAltRef,
|
||||||
kTemporalUpdateAltref,
|
|
||||||
kTemporalUpdateLast,
|
|
||||||
kTemporalUpdateAltref,
|
|
||||||
kTemporalUpdateGolden,
|
|
||||||
kTemporalUpdateNone,
|
kTemporalUpdateNone,
|
||||||
kTemporalUpdateLast,
|
kTemporalUpdateLastRefAltRef,
|
||||||
kTemporalUpdateAltrefWithoutDependency,
|
kTemporalUpdateNone,
|
||||||
kTemporalUpdateGoldenWithoutDependency,
|
kTemporalUpdateGoldenRefAltRef,
|
||||||
kTemporalUpdateAltref,
|
kTemporalUpdateNone,
|
||||||
kTemporalUpdateLast,
|
kTemporalUpdateLastAndGoldenRefAltRef,
|
||||||
kTemporalUpdateAltref,
|
kTemporalUpdateNoneNoRefGolden,
|
||||||
kTemporalUpdateGolden,
|
kTemporalUpdateGoldenWithoutDependencyRefAltRef,
|
||||||
|
kTemporalUpdateNone,
|
||||||
|
kTemporalUpdateLastRefAltRef,
|
||||||
|
kTemporalUpdateNone,
|
||||||
|
kTemporalUpdateGoldenRefAltRef,
|
||||||
kTemporalUpdateNone,
|
kTemporalUpdateNone,
|
||||||
};
|
};
|
||||||
int expected_temporal_idx[16] =
|
int expected_temporal_idx[16] =
|
||||||
@ -171,13 +186,13 @@ TEST(TemporalLayersTest, KeyFrame) {
|
|||||||
tl.ConfigureBitrates(500, &cfg);
|
tl.ConfigureBitrates(500, &cfg);
|
||||||
|
|
||||||
int expected_flags[8] = {
|
int expected_flags[8] = {
|
||||||
kTemporalUpdateLast,
|
kTemporalUpdateLastAndGoldenRefAltRef,
|
||||||
kTemporalUpdateAltrefWithoutDependency,
|
kTemporalUpdateNoneNoRefGolden,
|
||||||
kTemporalUpdateGoldenWithoutDependency,
|
kTemporalUpdateGoldenWithoutDependencyRefAltRef,
|
||||||
kTemporalUpdateAltref,
|
kTemporalUpdateNone,
|
||||||
kTemporalUpdateLast,
|
kTemporalUpdateLastRefAltRef,
|
||||||
kTemporalUpdateAltref,
|
kTemporalUpdateNone,
|
||||||
kTemporalUpdateGolden,
|
kTemporalUpdateGoldenRefAltRef,
|
||||||
kTemporalUpdateNone,
|
kTemporalUpdateNone,
|
||||||
};
|
};
|
||||||
int expected_temporal_idx[8] =
|
int expected_temporal_idx[8] =
|
||||||
|
Reference in New Issue
Block a user