OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 kResilienceOff, // The stream produced by the encoder requires a | 562 kResilienceOff, // The stream produced by the encoder requires a |
563 // recovery frame (typically a key frame) to be | 563 // recovery frame (typically a key frame) to be |
564 // decodable after a packet loss. | 564 // decodable after a packet loss. |
565 kResilientStream, // A stream produced by the encoder is resilient to | 565 kResilientStream, // A stream produced by the encoder is resilient to |
566 // packet losses, but packets within a frame subsequent | 566 // packet losses, but packets within a frame subsequent |
567 // to a loss can't be decoded. | 567 // to a loss can't be decoded. |
568 kResilientFrames // Same as kResilientStream but with added resilience | 568 kResilientFrames // Same as kResilientStream but with added resilience |
569 // within a frame. | 569 // within a frame. |
570 }; | 570 }; |
571 | 571 |
| 572 class TemporalLayersFactory; |
572 // VP8 specific | 573 // VP8 specific |
573 struct VideoCodecVP8 { | 574 struct VideoCodecVP8 { |
574 bool pictureLossIndicationOn; | 575 bool pictureLossIndicationOn; |
575 bool feedbackModeOn; | 576 bool feedbackModeOn; |
576 VideoCodecComplexity complexity; | 577 VideoCodecComplexity complexity; |
577 VP8ResilienceMode resilience; | 578 VP8ResilienceMode resilience; |
578 unsigned char numberOfTemporalLayers; | 579 unsigned char numberOfTemporalLayers; |
579 bool denoisingOn; | 580 bool denoisingOn; |
580 bool errorConcealmentOn; | 581 bool errorConcealmentOn; |
581 bool automaticResizeOn; | 582 bool automaticResizeOn; |
582 bool frameDroppingOn; | 583 bool frameDroppingOn; |
583 int keyFrameInterval; | 584 int keyFrameInterval; |
584 | 585 const TemporalLayersFactory* tl_factory; |
585 bool operator==(const VideoCodecVP8& other) const { | |
586 return pictureLossIndicationOn == other.pictureLossIndicationOn && | |
587 feedbackModeOn == other.feedbackModeOn && | |
588 complexity == other.complexity && | |
589 resilience == other.resilience && | |
590 numberOfTemporalLayers == other.numberOfTemporalLayers && | |
591 denoisingOn == other.denoisingOn && | |
592 errorConcealmentOn == other.errorConcealmentOn && | |
593 automaticResizeOn == other.automaticResizeOn && | |
594 frameDroppingOn == other.frameDroppingOn && | |
595 keyFrameInterval == other.keyFrameInterval; | |
596 } | |
597 | |
598 bool operator!=(const VideoCodecVP8& other) const { | |
599 return !(*this == other); | |
600 } | |
601 }; | 586 }; |
602 | 587 |
603 // VP9 specific. | 588 // VP9 specific. |
604 struct VideoCodecVP9 { | 589 struct VideoCodecVP9 { |
605 VideoCodecComplexity complexity; | 590 VideoCodecComplexity complexity; |
606 int resilience; | 591 int resilience; |
607 unsigned char numberOfTemporalLayers; | 592 unsigned char numberOfTemporalLayers; |
608 bool denoisingOn; | 593 bool denoisingOn; |
609 bool frameDroppingOn; | 594 bool frameDroppingOn; |
610 int keyFrameInterval; | 595 int keyFrameInterval; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
648 // Simulcast is when the same stream is encoded multiple times with different | 633 // Simulcast is when the same stream is encoded multiple times with different |
649 // settings such as resolution. | 634 // settings such as resolution. |
650 struct SimulcastStream { | 635 struct SimulcastStream { |
651 unsigned short width; | 636 unsigned short width; |
652 unsigned short height; | 637 unsigned short height; |
653 unsigned char numberOfTemporalLayers; | 638 unsigned char numberOfTemporalLayers; |
654 unsigned int maxBitrate; // kilobits/sec. | 639 unsigned int maxBitrate; // kilobits/sec. |
655 unsigned int targetBitrate; // kilobits/sec. | 640 unsigned int targetBitrate; // kilobits/sec. |
656 unsigned int minBitrate; // kilobits/sec. | 641 unsigned int minBitrate; // kilobits/sec. |
657 unsigned int qpMax; // minimum quality | 642 unsigned int qpMax; // minimum quality |
658 | |
659 bool operator==(const SimulcastStream& other) const { | |
660 return width == other.width && | |
661 height == other.height && | |
662 numberOfTemporalLayers == other.numberOfTemporalLayers && | |
663 maxBitrate == other.maxBitrate && | |
664 targetBitrate == other.targetBitrate && | |
665 minBitrate == other.minBitrate && | |
666 qpMax == other.qpMax; | |
667 } | |
668 | |
669 bool operator!=(const SimulcastStream& other) const { | |
670 return !(*this == other); | |
671 } | |
672 }; | 643 }; |
673 | 644 |
674 struct SpatialLayer { | 645 struct SpatialLayer { |
675 int scaling_factor_num; | 646 int scaling_factor_num; |
676 int scaling_factor_den; | 647 int scaling_factor_den; |
677 int target_bitrate_bps; | 648 int target_bitrate_bps; |
678 // TODO(ivica): Add max_quantizer and min_quantizer? | 649 // TODO(ivica): Add max_quantizer and min_quantizer? |
679 }; | 650 }; |
680 | 651 |
681 enum VideoCodecMode { | 652 enum VideoCodecMode { |
(...skipping 19 matching lines...) Expand all Loading... |
701 | 672 |
702 VideoCodecUnion codecSpecific; | 673 VideoCodecUnion codecSpecific; |
703 | 674 |
704 unsigned int qpMax; | 675 unsigned int qpMax; |
705 unsigned char numberOfSimulcastStreams; | 676 unsigned char numberOfSimulcastStreams; |
706 SimulcastStream simulcastStream[kMaxSimulcastStreams]; | 677 SimulcastStream simulcastStream[kMaxSimulcastStreams]; |
707 SpatialLayer spatialLayers[kMaxSpatialLayers]; | 678 SpatialLayer spatialLayers[kMaxSpatialLayers]; |
708 | 679 |
709 VideoCodecMode mode; | 680 VideoCodecMode mode; |
710 | 681 |
711 // When using an external encoder/decoder this allows to pass | 682 bool operator==(const VideoCodec& other) const = delete; |
712 // extra options without requiring webrtc to be aware of them. | 683 bool operator!=(const VideoCodec& other) const = delete; |
713 Config* extra_options; | |
714 | |
715 bool operator==(const VideoCodec& other) const { | |
716 bool ret = codecType == other.codecType && | |
717 (STR_CASE_CMP(plName, other.plName) == 0) && | |
718 plType == other.plType && | |
719 width == other.width && | |
720 height == other.height && | |
721 startBitrate == other.startBitrate && | |
722 maxBitrate == other.maxBitrate && | |
723 minBitrate == other.minBitrate && | |
724 targetBitrate == other.targetBitrate && | |
725 maxFramerate == other.maxFramerate && | |
726 qpMax == other.qpMax && | |
727 numberOfSimulcastStreams == other.numberOfSimulcastStreams && | |
728 mode == other.mode; | |
729 if (ret && codecType == kVideoCodecVP8) { | |
730 ret &= (codecSpecific.VP8 == other.codecSpecific.VP8); | |
731 } | |
732 | |
733 for (unsigned char i = 0; i < other.numberOfSimulcastStreams && ret; ++i) { | |
734 ret &= (simulcastStream[i] == other.simulcastStream[i]); | |
735 } | |
736 return ret; | |
737 } | |
738 | |
739 bool operator!=(const VideoCodec& other) const { | |
740 return !(*this == other); | |
741 } | |
742 }; | 684 }; |
743 | 685 |
744 // Bandwidth over-use detector options. These are used to drive | 686 // Bandwidth over-use detector options. These are used to drive |
745 // experimentation with bandwidth estimation parameters. | 687 // experimentation with bandwidth estimation parameters. |
746 // See modules/remote_bitrate_estimator/overuse_detector.h | 688 // See modules/remote_bitrate_estimator/overuse_detector.h |
747 struct OverUseDetectorOptions { | 689 struct OverUseDetectorOptions { |
748 OverUseDetectorOptions() | 690 OverUseDetectorOptions() |
749 : initial_slope(8.0/512.0), | 691 : initial_slope(8.0/512.0), |
750 initial_offset(0), | 692 initial_offset(0), |
751 initial_e(), | 693 initial_e(), |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
896 uint32_t ssrc) = 0; | 838 uint32_t ssrc) = 0; |
897 }; | 839 }; |
898 | 840 |
899 // RTCP mode to use. Compound mode is described by RFC 4585 and reduced-size | 841 // RTCP mode to use. Compound mode is described by RFC 4585 and reduced-size |
900 // RTCP mode is described by RFC 5506. | 842 // RTCP mode is described by RFC 5506. |
901 enum class RtcpMode { kOff, kCompound, kReducedSize }; | 843 enum class RtcpMode { kOff, kCompound, kReducedSize }; |
902 | 844 |
903 } // namespace webrtc | 845 } // namespace webrtc |
904 | 846 |
905 #endif // WEBRTC_COMMON_TYPES_H_ | 847 #endif // WEBRTC_COMMON_TYPES_H_ |
OLD | NEW |