| Index: webrtc/modules/video_coding/receiver.cc
|
| diff --git a/webrtc/modules/video_coding/receiver.cc b/webrtc/modules/video_coding/receiver.cc
|
| index 91cdd5e7297cd9735ba13ea192fb6a982c227059..fa2a2dca299c4945b41f9eb7225c22ba2b9d0a1c 100644
|
| --- a/webrtc/modules/video_coding/receiver.cc
|
| +++ b/webrtc/modules/video_coding/receiver.cc
|
| @@ -14,6 +14,7 @@
|
|
|
| #include <cstdlib>
|
| #include <utility>
|
| +#include <vector>
|
|
|
| #include "webrtc/base/logging.h"
|
| #include "webrtc/base/trace_event.h"
|
| @@ -72,8 +73,8 @@ int32_t VCMReceiver::InsertPacket(const VCMPacket& packet,
|
| // Insert the packet into the jitter buffer. The packet can either be empty or
|
| // contain media at this point.
|
| bool retransmitted = false;
|
| - const VCMFrameBufferEnum ret = jitter_buffer_.InsertPacket(packet,
|
| - &retransmitted);
|
| + const VCMFrameBufferEnum ret =
|
| + jitter_buffer_.InsertPacket(packet, &retransmitted);
|
| if (ret == kOldPacket) {
|
| return VCM_OK;
|
| } else if (ret == kFlushIndicator) {
|
| @@ -96,13 +97,13 @@ void VCMReceiver::TriggerDecoderShutdown() {
|
| }
|
|
|
| VCMEncodedFrame* VCMReceiver::FrameForDecoding(uint16_t max_wait_time_ms,
|
| - int64_t& next_render_time_ms,
|
| + int64_t* next_render_time_ms,
|
| bool prefer_late_decoding) {
|
| const int64_t start_time_ms = clock_->TimeInMilliseconds();
|
| uint32_t frame_timestamp = 0;
|
| // Exhaust wait time to get a complete frame for decoding.
|
| - bool found_frame = jitter_buffer_.NextCompleteTimestamp(
|
| - max_wait_time_ms, &frame_timestamp);
|
| + bool found_frame =
|
| + jitter_buffer_.NextCompleteTimestamp(max_wait_time_ms, &frame_timestamp);
|
|
|
| if (!found_frame)
|
| found_frame = jitter_buffer_.NextMaybeIncompleteTimestamp(&frame_timestamp);
|
| @@ -114,14 +115,14 @@ VCMEncodedFrame* VCMReceiver::FrameForDecoding(uint16_t max_wait_time_ms,
|
| timing_->SetJitterDelay(jitter_buffer_.EstimatedJitterMs());
|
| const int64_t now_ms = clock_->TimeInMilliseconds();
|
| timing_->UpdateCurrentDelay(frame_timestamp);
|
| - next_render_time_ms = timing_->RenderTimeMs(frame_timestamp, now_ms);
|
| + *next_render_time_ms = timing_->RenderTimeMs(frame_timestamp, now_ms);
|
| // Check render timing.
|
| bool timing_error = false;
|
| // Assume that render timing errors are due to changes in the video stream.
|
| - if (next_render_time_ms < 0) {
|
| + if (*next_render_time_ms < 0) {
|
| timing_error = true;
|
| - } else if (std::abs(next_render_time_ms - now_ms) > max_video_delay_ms_) {
|
| - int frame_delay = static_cast<int>(std::abs(next_render_time_ms - now_ms));
|
| + } else if (std::abs(*next_render_time_ms - now_ms) > max_video_delay_ms_) {
|
| + int frame_delay = static_cast<int>(std::abs(*next_render_time_ms - now_ms));
|
| LOG(LS_WARNING) << "A frame about to be decoded is out of the configured "
|
| << "delay bounds (" << frame_delay << " > "
|
| << max_video_delay_ms_
|
| @@ -143,12 +144,13 @@ VCMEncodedFrame* VCMReceiver::FrameForDecoding(uint16_t max_wait_time_ms,
|
|
|
| if (prefer_late_decoding) {
|
| // Decode frame as close as possible to the render timestamp.
|
| - const int32_t available_wait_time = max_wait_time_ms -
|
| + const int32_t available_wait_time =
|
| + max_wait_time_ms -
|
| static_cast<int32_t>(clock_->TimeInMilliseconds() - start_time_ms);
|
| - uint16_t new_max_wait_time = static_cast<uint16_t>(
|
| - VCM_MAX(available_wait_time, 0));
|
| + uint16_t new_max_wait_time =
|
| + static_cast<uint16_t>(VCM_MAX(available_wait_time, 0));
|
| uint32_t wait_time_ms = timing_->MaxWaitingTime(
|
| - next_render_time_ms, clock_->TimeInMilliseconds());
|
| + *next_render_time_ms, clock_->TimeInMilliseconds());
|
| if (new_max_wait_time < wait_time_ms) {
|
| // We're not allowed to wait until the frame is supposed to be rendered,
|
| // waiting as long as we're allowed to avoid busy looping, and then return
|
| @@ -165,9 +167,9 @@ VCMEncodedFrame* VCMReceiver::FrameForDecoding(uint16_t max_wait_time_ms,
|
| if (frame == NULL) {
|
| return NULL;
|
| }
|
| - frame->SetRenderTime(next_render_time_ms);
|
| - TRACE_EVENT_ASYNC_STEP1("webrtc", "Video", frame->TimeStamp(),
|
| - "SetRenderTS", "render_time", next_render_time_ms);
|
| + frame->SetRenderTime(*next_render_time_ms);
|
| + TRACE_EVENT_ASYNC_STEP1("webrtc", "Video", frame->TimeStamp(), "SetRenderTS",
|
| + "render_time", *next_render_time_ms);
|
| if (!frame->Complete()) {
|
| // Update stats for incomplete frames.
|
| bool retransmitted = false;
|
| @@ -187,8 +189,7 @@ void VCMReceiver::ReleaseFrame(VCMEncodedFrame* frame) {
|
| jitter_buffer_.ReleaseFrame(frame);
|
| }
|
|
|
| -void VCMReceiver::ReceiveStatistics(uint32_t* bitrate,
|
| - uint32_t* framerate) {
|
| +void VCMReceiver::ReceiveStatistics(uint32_t* bitrate, uint32_t* framerate) {
|
| assert(bitrate);
|
| assert(framerate);
|
| jitter_buffer_.IncomingRateStatistics(framerate, bitrate);
|
| @@ -210,8 +211,7 @@ void VCMReceiver::SetNackMode(VCMNackMode nackMode,
|
| void VCMReceiver::SetNackSettings(size_t max_nack_list_size,
|
| int max_packet_age_to_nack,
|
| int max_incomplete_time_ms) {
|
| - jitter_buffer_.SetNackSettings(max_nack_list_size,
|
| - max_packet_age_to_nack,
|
| + jitter_buffer_.SetNackSettings(max_nack_list_size, max_packet_age_to_nack,
|
| max_incomplete_time_ms);
|
| }
|
|
|
|
|