Reland of Add path for recovered packets from internal::Call to RtpStreamReceiver. (patchset #1 id:1 of https://codereview.webrtc.org/2427733002/ )

Reason for revert:
Flaky test has been fixed.

Original issue's description:
> Revert of Add path for recovered packets from internal::Call to RtpStreamReceiver. (patchset #2 id:60001 of https://codereview.webrtc.org/2390823009/ )
>
> Reason for revert:
> Speculative revert as it may be the cause of the DrMemory test failure:
> https://build.chromium.org/p/client.webrtc/builders/Win%20DrMemory%20Full/builds/5115
>
> Original issue's description:
> > Add path for recovered packets from internal::Call to RtpStreamReceiver.
> >
> > When the FlexfecReceiver recovers media packets, it inserts these into
> > internal::Call, which then distributes them to the appropriate
> > VideoReceiveStream/RtpStreamReceiver.
> >
> > BUG=webrtc:5654
> >
> > Committed: https://crrev.com/9c4b4b47f4325b48e1856566a30983f9e4e30dd0
> > Cr-Commit-Position: refs/heads/master@{#14642}
>
> TBR=stefan@webrtc.org,brandtr@webrtc.org
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=webrtc:5654
>
> Committed: https://crrev.com/862d74d0176fa762b3c96cf20bd36f27e7001a47
> Cr-Commit-Position: refs/heads/master@{#14652}

TBR=stefan@webrtc.org,honghaiz@webrtc.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG=webrtc:5654

Review-Url: https://codereview.webrtc.org/2428303004
Cr-Commit-Position: refs/heads/master@{#14677}
This commit is contained in:
brandtr 2016-10-18 23:50:45 -07:00 committed by Commit bot
parent 249beee124
commit 4e52386339
4 changed files with 27 additions and 1 deletions

View File

@ -18,6 +18,7 @@
#include "webrtc/audio/audio_send_stream.h"
#include "webrtc/audio/audio_state.h"
#include "webrtc/audio/scoped_voe_interface.h"
#include "webrtc/base/basictypes.h"
#include "webrtc/base/checks.h"
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/logging.h"
@ -32,6 +33,7 @@
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
#include "webrtc/modules/congestion_controller/include/congestion_controller.h"
#include "webrtc/modules/pacing/paced_sender.h"
#include "webrtc/modules/rtp_rtcp/include/flexfec_receiver.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
#include "webrtc/modules/utility/include/process_thread.h"
@ -57,6 +59,7 @@ namespace internal {
class Call : public webrtc::Call,
public PacketReceiver,
public RecoveredPacketReceiver,
public CongestionController::Observer,
public BitrateAllocator::LimitObserver {
public:
@ -91,6 +94,9 @@ class Call : public webrtc::Call,
size_t length,
const PacketTime& packet_time) override;
// Implements RecoveredPacketReceiver.
bool OnRecoveredPacket(const uint8_t* packet, size_t length) override;
void SetBitrateConfig(
const webrtc::Call::Config::BitrateConfig& bitrate_config) override;
@ -940,5 +946,16 @@ PacketReceiver::DeliveryStatus Call::DeliverPacket(
return DeliverRtp(media_type, packet, length, packet_time);
}
// TODO(brandtr): Update this member function when we support protecting
// audio packets with FlexFEC.
bool Call::OnRecoveredPacket(const uint8_t* packet, size_t length) {
uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(&packet[8]);
ReadLockScoped read_lock(*receive_crit_);
auto it = video_receive_ssrcs_.find(ssrc);
if (it == video_receive_ssrcs_.end())
return false;
return it->second->OnRecoveredPacket(packet, length);
}
} // namespace internal
} // namespace webrtc

View File

@ -18,7 +18,8 @@
namespace webrtc {
// Callback interface for packets recovered by FlexFEC.
// Callback interface for packets recovered by FlexFEC. The implementation
// should be able to demultiplex the recovered RTP packets based on SSRC.
class RecoveredPacketReceiver {
public:
virtual bool OnRecoveredPacket(const uint8_t* packet, size_t length) = 0;

View File

@ -259,6 +259,11 @@ bool VideoReceiveStream::DeliverRtp(const uint8_t* packet,
return rtp_stream_receiver_.DeliverRtp(packet, length, packet_time);
}
bool VideoReceiveStream::OnRecoveredPacket(const uint8_t* packet,
size_t length) {
return rtp_stream_receiver_.OnRecoveredPacket(packet, length);
}
void VideoReceiveStream::Start() {
if (decode_thread_.IsRunning())
return;

View File

@ -18,6 +18,7 @@
#include "webrtc/call/transport_adapter.h"
#include "webrtc/common_video/include/incoming_video_stream.h"
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
#include "webrtc/modules/rtp_rtcp/include/flexfec_receiver.h"
#include "webrtc/modules/video_coding/video_coding_impl.h"
#include "webrtc/system_wrappers/include/clock.h"
#include "webrtc/video/receive_statistics_proxy.h"
@ -59,6 +60,8 @@ class VideoReceiveStream : public webrtc::VideoReceiveStream,
size_t length,
const PacketTime& packet_time);
bool OnRecoveredPacket(const uint8_t* packet, size_t length);
// webrtc::VideoReceiveStream implementation.
void Start() override;
void Stop() override;