| Index: webrtc/call/rtp_stream_receiver_controller.h
 | 
| diff --git a/webrtc/call/rtp_stream_receiver_controller.h b/webrtc/call/rtp_stream_receiver_controller.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..6aa2a1587feb0d2d711f566cc42ae6d79a77b03a
 | 
| --- /dev/null
 | 
| +++ b/webrtc/call/rtp_stream_receiver_controller.h
 | 
| @@ -0,0 +1,67 @@
 | 
| +/*
 | 
| + *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
 | 
| + *
 | 
| + *  Use of this source code is governed by a BSD-style license
 | 
| + *  that can be found in the LICENSE file in the root of the source
 | 
| + *  tree. An additional intellectual property rights grant can be found
 | 
| + *  in the file PATENTS.  All contributing project authors may
 | 
| + *  be found in the AUTHORS file in the root of the source tree.
 | 
| + */
 | 
| +#ifndef WEBRTC_CALL_RTP_STREAM_RECEIVER_CONTROLLER_H_
 | 
| +#define WEBRTC_CALL_RTP_STREAM_RECEIVER_CONTROLLER_H_
 | 
| +
 | 
| +#include <memory>
 | 
| +
 | 
| +#include "webrtc/base/array_view.h"
 | 
| +#include "webrtc/base/criticalsection.h"
 | 
| +
 | 
| +#include "webrtc/call/rtp_demuxer.h"
 | 
| +#include "webrtc/call/rtp_stream_receiver_controller_interface.h"
 | 
| +
 | 
| +namespace webrtc {
 | 
| +
 | 
| +class ReceiveSideCongestionController;
 | 
| +class RtpPacketReceived;
 | 
| +
 | 
| +// This class represents the RTP receive parsing and demuxing, for a
 | 
| +// single RTP session.
 | 
| +// TODO(nisse): Add RTCP processing, we should aim to terminate RTCP
 | 
| +// and not leave any RTCP processing to individual receive streams.
 | 
| +// TODO(nisse): Extract per-packet processing, including parsing and
 | 
| +// demuxing, into a separate class.
 | 
| +class RtpStreamReceiverController
 | 
| +    : public RtpStreamReceiverControllerInterface {
 | 
| + public:
 | 
| +  // Implements RtpStreamReceiverControllerInterface.
 | 
| +  std::unique_ptr<RtpStreamReceiverInterface> CreateReceiver(
 | 
| +      uint32_t ssrc,
 | 
| +      RtpPacketSinkInterface* sink) override;
 | 
| +
 | 
| +  // Thread-safe wrappers for the corresponding RtpDemuxer methods.
 | 
| +  void AddSink(uint32_t ssrc, RtpPacketSinkInterface* sink) override;
 | 
| +  size_t RemoveSink(const RtpPacketSinkInterface* sink) override;
 | 
| +
 | 
| +  // TODO(nisse): Not yet responsible for parsing.
 | 
| +  bool OnRtpPacket(const RtpPacketReceived& packet);
 | 
| +
 | 
| + private:
 | 
| +  class Receiver : public RtpStreamReceiverInterface {
 | 
| +   public:
 | 
| +    Receiver(RtpStreamReceiverController* controller,
 | 
| +             uint32_t ssrc,
 | 
| +             RtpPacketSinkInterface* sink);
 | 
| +
 | 
| +    ~Receiver() override;
 | 
| +
 | 
| +   private:
 | 
| +    RtpStreamReceiverController* const controller_;
 | 
| +    RtpPacketSinkInterface* const sink_;
 | 
| +  };
 | 
| +
 | 
| +  rtc::CriticalSection lock_;
 | 
| +  RtpDemuxer demuxer_ GUARDED_BY(&lock_);
 | 
| +};
 | 
| +
 | 
| +}  // namespace webrtc
 | 
| +
 | 
| +#endif  // WEBRTC_CALL_RTP_STREAM_RECEIVER_CONTROLLER_H_
 | 
| 
 |