vp8_frame_config.cc (2598B)
1 /* 2 * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "api/video_codecs/vp8_frame_config.h" 12 13 #include "modules/video_coding/codecs/interface/common_constants.h" 14 #include "rtc_base/checks.h" 15 16 namespace webrtc { 17 18 Vp8FrameConfig::Vp8FrameConfig() : Vp8FrameConfig(kNone, kNone, kNone, false) {} 19 20 Vp8FrameConfig::Vp8FrameConfig(BufferFlags last, 21 BufferFlags golden, 22 BufferFlags arf) 23 : Vp8FrameConfig(last, golden, arf, false) {} 24 25 Vp8FrameConfig::Vp8FrameConfig(BufferFlags last, 26 BufferFlags golden, 27 BufferFlags arf, 28 FreezeEntropy) 29 : Vp8FrameConfig(last, golden, arf, true) {} 30 31 Vp8FrameConfig::Vp8FrameConfig(BufferFlags last, 32 BufferFlags golden, 33 BufferFlags arf, 34 bool freeze_entropy) 35 : drop_frame(last == BufferFlags::kNone && golden == BufferFlags::kNone && 36 arf == BufferFlags::kNone), 37 last_buffer_flags(last), 38 golden_buffer_flags(golden), 39 arf_buffer_flags(arf), 40 encoder_layer_id(0), 41 packetizer_temporal_idx(kNoTemporalIdx), 42 layer_sync(false), 43 freeze_entropy(freeze_entropy), 44 first_reference(Vp8BufferReference::kNone), 45 second_reference(Vp8BufferReference::kNone), 46 retransmission_allowed(true) {} 47 48 bool Vp8FrameConfig::References(Buffer buffer) const { 49 switch (buffer) { 50 case Buffer::kLast: 51 return (last_buffer_flags & kReference) != 0; 52 case Buffer::kGolden: 53 return (golden_buffer_flags & kReference) != 0; 54 case Buffer::kArf: 55 return (arf_buffer_flags & kReference) != 0; 56 case Buffer::kCount: 57 break; 58 } 59 RTC_DCHECK_NOTREACHED(); 60 return false; 61 } 62 63 bool Vp8FrameConfig::Updates(Buffer buffer) const { 64 switch (buffer) { 65 case Buffer::kLast: 66 return (last_buffer_flags & kUpdate) != 0; 67 case Buffer::kGolden: 68 return (golden_buffer_flags & kUpdate) != 0; 69 case Buffer::kArf: 70 return (arf_buffer_flags & kUpdate) != 0; 71 case Buffer::kCount: 72 break; 73 } 74 RTC_DCHECK_NOTREACHED(); 75 return false; 76 } 77 78 } // namespace webrtc