Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(187)

Unified Diff: webrtc/video/rtp_stream_receiver.h

Issue 2480293002: New jitter buffer experiment. (Closed)
Patch Set: Nit fix. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/video/rtp_stream_receiver.h
diff --git a/webrtc/video/rtp_stream_receiver.h b/webrtc/video/rtp_stream_receiver.h
index 0a3b3159a1b1d7e90306b6fbf1c5fd24a08889a1..b1273017c625abe36620dd4ec9eb3ccdc753c58d 100644
--- a/webrtc/video/rtp_stream_receiver.h
+++ b/webrtc/video/rtp_stream_receiver.h
@@ -12,57 +12,74 @@
#define WEBRTC_VIDEO_RTP_STREAM_RECEIVER_H_
#include <list>
+#include <map>
#include <memory>
#include <string>
#include <vector>
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/criticalsection.h"
+#include "webrtc/modules/include/module_common_types.h"
#include "webrtc/modules/rtp_rtcp/include/receive_statistics.h"
#include "webrtc/modules/rtp_rtcp/include/remote_ntp_time_estimator.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_payload_registry.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
+#include "webrtc/modules/video_coding/h264_sps_pps_tracker.h"
#include "webrtc/modules/video_coding/include/video_coding_defines.h"
+#include "webrtc/modules/video_coding/packet_buffer.h"
+#include "webrtc/modules/video_coding/rtp_frame_reference_finder.h"
+#include "webrtc/modules/video_coding/sequence_number_util.h"
#include "webrtc/typedefs.h"
#include "webrtc/video_receive_stream.h"
namespace webrtc {
+class NackModule;
class PacedSender;
class PacketRouter;
class ProcessThread;
-class RemoteNtpTimeEstimator;
class ReceiveStatistics;
class ReceiveStatisticsProxy;
class RemoteBitrateEstimator;
+class RemoteNtpTimeEstimator;
class RtcpRttStats;
class RtpHeaderParser;
class RTPPayloadRegistry;
class RtpReceiver;
class Transport;
class UlpfecReceiver;
+class VCMTiming;
class VieRemb;
namespace vcm {
class VideoReceiver;
} // namespace vcm
-class RtpStreamReceiver : public RtpData, public RtpFeedback,
+class RtpStreamReceiver : public RtpData,
+ public RtpFeedback,
public VCMFrameTypeCallback,
- public VCMPacketRequestCallback {
+ public VCMPacketRequestCallback,
+ public video_coding::OnReceivedFrameCallback,
+ public video_coding::OnCompleteFrameCallback,
+ public CallStatsObserver {
public:
- RtpStreamReceiver(vcm::VideoReceiver* video_receiver,
- RemoteBitrateEstimator* remote_bitrate_estimator,
- Transport* transport,
- RtcpRttStats* rtt_stats,
- PacedSender* paced_sender,
- PacketRouter* packet_router,
- VieRemb* remb,
- const VideoReceiveStream::Config* config,
- ReceiveStatisticsProxy* receive_stats_proxy,
- ProcessThread* process_thread,
- RateLimiter* retransmission_rate_limiter);
+ RtpStreamReceiver(
+ vcm::VideoReceiver* video_receiver,
+ RemoteBitrateEstimator* remote_bitrate_estimator,
+ Transport* transport,
+ RtcpRttStats* rtt_stats,
+ PacedSender* paced_sender,
+ PacketRouter* packet_router,
+ VieRemb* remb,
+ const VideoReceiveStream::Config* config,
+ ReceiveStatisticsProxy* receive_stats_proxy,
+ ProcessThread* process_thread,
+ RateLimiter* retransmission_rate_limiter,
+ NackSender* nack_sender,
+ KeyFrameRequestSender* keyframe_request_sender,
+ video_coding::OnCompleteFrameCallback* complete_frame_callback,
+ VCMTiming* timing);
~RtpStreamReceiver();
bool SetReceiveCodec(const VideoCodec& video_codec);
@@ -81,6 +98,10 @@ class RtpStreamReceiver : public RtpData, public RtpFeedback,
const PacketTime& packet_time);
bool DeliverRtcp(const uint8_t* rtcp_packet, size_t rtcp_packet_length);
+ void FrameContinuous(uint16_t seq_num);
+
+ void FrameDecoded(uint16_t seq_num);
+
void SignalNetworkState(NetworkState state);
// Implements RtpData.
@@ -111,6 +132,16 @@ class RtpStreamReceiver : public RtpData, public RtpFeedback,
int32_t ResendPackets(const uint16_t* sequenceNumbers,
uint16_t length) override;
+ // Implements OnReceivedFrameCallback.
+ void OnReceivedFrame(
+ std::unique_ptr<video_coding::RtpFrameObject> frame) override;
+
+ // Implements OnCompleteFrameCallback.
+ void OnCompleteFrame(
+ std::unique_ptr<video_coding::FrameObject> frame) override;
+
+ void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override;
+
private:
bool ReceivePacket(const uint8_t* packet,
size_t packet_length,
@@ -151,6 +182,19 @@ class RtpStreamReceiver : public RtpData, public RtpFeedback,
int64_t last_packet_log_ms_ GUARDED_BY(receive_cs_);
const std::unique_ptr<RtpRtcp> rtp_rtcp_;
+
+ // Members for the new jitter buffer experiment.
+ bool jitter_buffer_experiment_;
+ video_coding::OnCompleteFrameCallback* complete_frame_callback_;
+ KeyFrameRequestSender* keyframe_request_sender_;
+ VCMTiming* timing_;
+ std::unique_ptr<NackModule> nack_module_;
+ rtc::scoped_refptr<video_coding::PacketBuffer> packet_buffer_;
+ std::unique_ptr<video_coding::RtpFrameReferenceFinder> reference_finder_;
+ rtc::CriticalSection last_seq_num_cs_;
+ std::map<uint16_t, uint16_t, DescendingSeqNumComp<uint16_t>>
+ last_seq_num_for_pic_id_ GUARDED_BY(last_seq_num_cs_);
+ video_coding::H264SpsPpsTracker tracker_;
};
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698