webrtc/api/video_codecs/vp8_frame_config.cc
Elad Alon b64af4b168 Add retransmission_allowed flag to encoder output
Using this flag, an encoder may inform the RTP sender module that
the packet is not elligible for retransmission. Specifically, it
may not be retransmitted in response to a NACK message,
nor because of early loss detection (see CL #135881).

Bug: webrtc:10702
Change-Id: Ib6a9cc361cf10ea7214cf672e05940c27899a6be
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/140105
Commit-Queue: Elad Alon <eladalon@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28169}
2019-06-05 12:08:07 +00:00

78 lines
2.5 KiB
C++

/*
* Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "api/video_codecs/vp8_frame_config.h"
#include "modules/video_coding/codecs/interface/common_constants.h"
#include "rtc_base/checks.h"
namespace webrtc {
Vp8FrameConfig::Vp8FrameConfig() : Vp8FrameConfig(kNone, kNone, kNone, false) {}
Vp8FrameConfig::Vp8FrameConfig(BufferFlags last,
BufferFlags golden,
BufferFlags arf)
: Vp8FrameConfig(last, golden, arf, false) {}
Vp8FrameConfig::Vp8FrameConfig(BufferFlags last,
BufferFlags golden,
BufferFlags arf,
FreezeEntropy)
: Vp8FrameConfig(last, golden, arf, true) {}
Vp8FrameConfig::Vp8FrameConfig(BufferFlags last,
BufferFlags golden,
BufferFlags arf,
bool freeze_entropy)
: drop_frame(last == BufferFlags::kNone && golden == BufferFlags::kNone &&
arf == BufferFlags::kNone),
last_buffer_flags(last),
golden_buffer_flags(golden),
arf_buffer_flags(arf),
encoder_layer_id(0),
packetizer_temporal_idx(kNoTemporalIdx),
layer_sync(false),
freeze_entropy(freeze_entropy),
first_reference(Vp8BufferReference::kNone),
second_reference(Vp8BufferReference::kNone),
retransmission_allowed(true) {}
bool Vp8FrameConfig::References(Buffer buffer) const {
switch (buffer) {
case Buffer::kLast:
return (last_buffer_flags & kReference) != 0;
case Buffer::kGolden:
return (golden_buffer_flags & kReference) != 0;
case Buffer::kArf:
return (arf_buffer_flags & kReference) != 0;
case Buffer::kCount:
break;
}
RTC_NOTREACHED();
return false;
}
bool Vp8FrameConfig::Updates(Buffer buffer) const {
switch (buffer) {
case Buffer::kLast:
return (last_buffer_flags & kUpdate) != 0;
case Buffer::kGolden:
return (golden_buffer_flags & kUpdate) != 0;
case Buffer::kArf:
return (arf_buffer_flags & kUpdate) != 0;
case Buffer::kCount:
break;
}
RTC_NOTREACHED();
return false;
}
} // namespace webrtc