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

Side by Side Diff: webrtc/video_engine/vie_channel.h

Issue 1315413002: Wire up currently-received video codec to stats. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: feedback Created 5 years, 3 months 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 unified diff | Download patch
« no previous file with comments | « webrtc/video/video_receive_stream.cc ('k') | webrtc/video_engine/vie_channel.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 26 matching lines...) Expand all
37 class IncomingVideoStream; 37 class IncomingVideoStream;
38 class PacedSender; 38 class PacedSender;
39 class PacketRouter; 39 class PacketRouter;
40 class PayloadRouter; 40 class PayloadRouter;
41 class ProcessThread; 41 class ProcessThread;
42 class ReceiveStatisticsProxy; 42 class ReceiveStatisticsProxy;
43 class ReportBlockStats; 43 class ReportBlockStats;
44 class RtcpRttStats; 44 class RtcpRttStats;
45 class ThreadWrapper; 45 class ThreadWrapper;
46 class ViEChannelProtectionCallback; 46 class ViEChannelProtectionCallback;
47 class ViEDecoderObserver;
48 class ViERTPObserver; 47 class ViERTPObserver;
49 class VideoCodingModule; 48 class VideoCodingModule;
50 class VideoDecoder; 49 class VideoDecoder;
51 class VideoRenderCallback; 50 class VideoRenderCallback;
52 class VoEVideoSync; 51 class VoEVideoSync;
53 52
54 enum StreamType { 53 enum StreamType {
55 kViEStreamTypeNormal = 0, // Normal media stream 54 kViEStreamTypeNormal = 0, // Normal media stream
56 kViEStreamTypeRtx = 1 // Retransmission media stream 55 kViEStreamTypeRtx = 1 // Retransmission media stream
57 }; 56 };
58 57
59 // This class declares an abstract interface for a user defined observer. It is
60 // up to the VideoEngine user to implement a derived class which implements the
61 // observer class. The observer is registered using RegisterDecoderObserver()
62 // and deregistered using DeregisterDecoderObserver().
63 class ViEDecoderObserver {
64 public:
65 // This method is called when a new incoming stream is detected, normally
66 // triggered by a new incoming SSRC or payload type.
67 virtual void IncomingCodecChanged(const int video_channel,
68 const VideoCodec& video_codec) = 0;
69
70 // This method is called once per second containing the frame rate and bit
71 // rate for the incoming stream
72 virtual void IncomingRate(const int video_channel,
73 const unsigned int framerate,
74 const unsigned int bitrate) = 0;
75
76 // Called periodically with decoder timing information. All values are
77 // "current" snapshots unless decorated with a min_/max_ prefix.
78 virtual void DecoderTiming(int decode_ms,
79 int max_decode_ms,
80 int current_delay_ms,
81 int target_delay_ms,
82 int jitter_buffer_ms,
83 int min_playout_delay_ms,
84 int render_delay_ms) = 0;
85
86 protected:
87 virtual ~ViEDecoderObserver() {}
88 };
89 class ViEChannel : public VCMFrameTypeCallback, 58 class ViEChannel : public VCMFrameTypeCallback,
90 public VCMReceiveCallback, 59 public VCMReceiveCallback,
91 public VCMReceiveStatisticsCallback, 60 public VCMReceiveStatisticsCallback,
92 public VCMDecoderTimingCallback, 61 public VCMDecoderTimingCallback,
93 public VCMPacketRequestCallback, 62 public VCMPacketRequestCallback,
94 public RtpFeedback { 63 public RtpFeedback {
95 public: 64 public:
96 friend class ChannelStatsObserver; 65 friend class ChannelStatsObserver;
97 friend class ViEChannelProtectionCallback; 66 friend class ViEChannelProtectionCallback;
98 67
(...skipping 12 matching lines...) Expand all
111 size_t max_rtp_streams, 80 size_t max_rtp_streams,
112 bool sender); 81 bool sender);
113 ~ViEChannel(); 82 ~ViEChannel();
114 83
115 int32_t Init(); 84 int32_t Init();
116 85
117 // Sets the encoder to use for the channel. |new_stream| indicates the encoder 86 // Sets the encoder to use for the channel. |new_stream| indicates the encoder
118 // type has changed and we should start a new RTP stream. 87 // type has changed and we should start a new RTP stream.
119 int32_t SetSendCodec(const VideoCodec& video_codec, bool new_stream = true); 88 int32_t SetSendCodec(const VideoCodec& video_codec, bool new_stream = true);
120 int32_t SetReceiveCodec(const VideoCodec& video_codec); 89 int32_t SetReceiveCodec(const VideoCodec& video_codec);
121 int32_t RegisterCodecObserver(ViEDecoderObserver* observer);
122 // Registers an external decoder. |buffered_rendering| means that the decoder 90 // Registers an external decoder. |buffered_rendering| means that the decoder
123 // will render frames after decoding according to the render timestamp 91 // will render frames after decoding according to the render timestamp
124 // provided by the video coding module. |render_delay| indicates the time 92 // provided by the video coding module. |render_delay| indicates the time
125 // needed to decode and render a frame. 93 // needed to decode and render a frame.
126 int32_t RegisterExternalDecoder(const uint8_t pl_type, 94 int32_t RegisterExternalDecoder(const uint8_t pl_type,
127 VideoDecoder* decoder, 95 VideoDecoder* decoder,
128 bool buffered_rendering, 96 bool buffered_rendering,
129 int32_t render_delay); 97 int32_t render_delay);
130 int32_t DeRegisterExternalDecoder(const uint8_t pl_type); 98 int32_t DeRegisterExternalDecoder(const uint8_t pl_type);
131 int32_t ReceiveCodecStatistics(uint32_t* num_key_frames, 99 int32_t ReceiveCodecStatistics(uint32_t* num_key_frames,
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 CallStatsObserver* GetStatsObserver(); 232 CallStatsObserver* GetStatsObserver();
265 233
266 // Implements VCMReceiveCallback. 234 // Implements VCMReceiveCallback.
267 virtual int32_t FrameToRender(VideoFrame& video_frame); // NOLINT 235 virtual int32_t FrameToRender(VideoFrame& video_frame); // NOLINT
268 236
269 // Implements VCMReceiveCallback. 237 // Implements VCMReceiveCallback.
270 virtual int32_t ReceivedDecodedReferenceFrame( 238 virtual int32_t ReceivedDecodedReferenceFrame(
271 const uint64_t picture_id); 239 const uint64_t picture_id);
272 240
273 // Implements VCMReceiveCallback. 241 // Implements VCMReceiveCallback.
274 virtual void IncomingCodecChanged(const VideoCodec& codec); 242 void OnIncomingPayloadType(int payload_type) override;
275 243
276 // Implements VCMReceiveStatisticsCallback. 244 // Implements VCMReceiveStatisticsCallback.
277 void OnReceiveRatesUpdated(uint32_t bit_rate, uint32_t frame_rate) override; 245 void OnReceiveRatesUpdated(uint32_t bit_rate, uint32_t frame_rate) override;
278 void OnDiscardedPacketsUpdated(int discarded_packets) override; 246 void OnDiscardedPacketsUpdated(int discarded_packets) override;
279 void OnFrameCountsUpdated(const FrameCounts& frame_counts) override; 247 void OnFrameCountsUpdated(const FrameCounts& frame_counts) override;
280 248
281 // Implements VCMDecoderTimingCallback. 249 // Implements VCMDecoderTimingCallback.
282 virtual void OnDecoderTiming(int decode_ms, 250 virtual void OnDecoderTiming(int decode_ms,
283 int max_decode_ms, 251 int max_decode_ms,
284 int current_delay_ms, 252 int current_delay_ms,
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 rtc::scoped_ptr<ViEChannelProtectionCallback> vcm_protection_callback_; 425 rtc::scoped_ptr<ViEChannelProtectionCallback> vcm_protection_callback_;
458 426
459 VideoCodingModule* const vcm_; 427 VideoCodingModule* const vcm_;
460 ViEReceiver vie_receiver_; 428 ViEReceiver vie_receiver_;
461 ViESyncModule vie_sync_; 429 ViESyncModule vie_sync_;
462 430
463 // Helper to report call statistics. 431 // Helper to report call statistics.
464 rtc::scoped_ptr<ChannelStatsObserver> stats_observer_; 432 rtc::scoped_ptr<ChannelStatsObserver> stats_observer_;
465 433
466 // Not owned. 434 // Not owned.
467 VCMReceiveStatisticsCallback* vcm_receive_stats_callback_ 435 ReceiveStatisticsProxy* receive_stats_callback_ GUARDED_BY(crit_);
468 GUARDED_BY(crit_);
469 FrameCounts receive_frame_counts_ GUARDED_BY(crit_); 436 FrameCounts receive_frame_counts_ GUARDED_BY(crit_);
470 IncomingVideoStream* incoming_video_stream_ GUARDED_BY(crit_); 437 IncomingVideoStream* incoming_video_stream_ GUARDED_BY(crit_);
471 ViEDecoderObserver* codec_observer_ GUARDED_BY(crit_);
472 RtcpIntraFrameObserver* const intra_frame_observer_; 438 RtcpIntraFrameObserver* const intra_frame_observer_;
473 RtcpRttStats* const rtt_stats_; 439 RtcpRttStats* const rtt_stats_;
474 PacedSender* const paced_sender_; 440 PacedSender* const paced_sender_;
475 PacketRouter* const packet_router_; 441 PacketRouter* const packet_router_;
476 442
477 const rtc::scoped_ptr<RtcpBandwidthObserver> bandwidth_observer_; 443 const rtc::scoped_ptr<RtcpBandwidthObserver> bandwidth_observer_;
478 SendTimeObserver* const send_time_observer_; 444 SendTimeObserver* const send_time_observer_;
479 445
480 bool decoder_reset_ GUARDED_BY(crit_);
481 // Current receive codec used for codec change callback.
482 VideoCodec receive_codec_ GUARDED_BY(crit_);
483 rtc::scoped_ptr<ThreadWrapper> decode_thread_; 446 rtc::scoped_ptr<ThreadWrapper> decode_thread_;
484 447
485 int nack_history_size_sender_; 448 int nack_history_size_sender_;
486 int max_nack_reordering_threshold_; 449 int max_nack_reordering_threshold_;
487 I420FrameCallback* pre_render_callback_ GUARDED_BY(crit_); 450 I420FrameCallback* pre_render_callback_ GUARDED_BY(crit_);
488 451
489 const rtc::scoped_ptr<ReportBlockStats> report_block_stats_sender_; 452 const rtc::scoped_ptr<ReportBlockStats> report_block_stats_sender_;
490 453
491 int64_t time_of_first_rtt_ms_ GUARDED_BY(crit_); 454 int64_t time_of_first_rtt_ms_ GUARDED_BY(crit_);
492 int64_t rtt_sum_ms_ GUARDED_BY(crit_); 455 int64_t rtt_sum_ms_ GUARDED_BY(crit_);
493 size_t num_rtts_ GUARDED_BY(crit_); 456 size_t num_rtts_ GUARDED_BY(crit_);
494 457
495 // RtpRtcp modules, declared last as they use other members on construction. 458 // RtpRtcp modules, declared last as they use other members on construction.
496 const std::vector<RtpRtcp*> rtp_rtcp_modules_; 459 const std::vector<RtpRtcp*> rtp_rtcp_modules_;
497 size_t num_active_rtp_rtcp_modules_ GUARDED_BY(crit_); 460 size_t num_active_rtp_rtcp_modules_ GUARDED_BY(crit_);
498 }; 461 };
499 462
500 } // namespace webrtc 463 } // namespace webrtc
501 464
502 #endif // WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_ 465 #endif // WEBRTC_VIDEO_ENGINE_VIE_CHANNEL_H_
OLDNEW
« no previous file with comments | « webrtc/video/video_receive_stream.cc ('k') | webrtc/video_engine/vie_channel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698