| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 |
| 11 #include "webrtc/modules/video_coding/test/vcm_payload_sink_factory.h" | 11 #include "webrtc/modules/video_coding/test/vcm_payload_sink_factory.h" |
| 12 | 12 |
| 13 #include <assert.h> | 13 #include <assert.h> |
| 14 | 14 |
| 15 #include <algorithm> | 15 #include <algorithm> |
| 16 | 16 |
| 17 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" | 17 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" |
| 18 #include "webrtc/modules/video_coding/test/test_util.h" | 18 #include "webrtc/modules/video_coding/test/test_util.h" |
| 19 #include "webrtc/system_wrappers/include/clock.h" | 19 #include "webrtc/system_wrappers/include/clock.h" |
| 20 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" | 20 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" |
| 21 | 21 |
| 22 namespace webrtc { | 22 namespace webrtc { |
| 23 namespace rtpplayer { | 23 namespace rtpplayer { |
| 24 | 24 |
| 25 class VcmPayloadSinkFactory::VcmPayloadSink : public PayloadSinkInterface, | 25 class VcmPayloadSinkFactory::VcmPayloadSink : public PayloadSinkInterface, |
| 26 public VCMPacketRequestCallback { | 26 public VCMPacketRequestCallback { |
| 27 public: | 27 public: |
| 28 VcmPayloadSink(VcmPayloadSinkFactory* factory, | 28 VcmPayloadSink(VcmPayloadSinkFactory* factory, |
| 29 RtpStreamInterface* stream, | 29 RtpStreamInterface* stream, |
| 30 rtc::scoped_ptr<VideoCodingModule>* vcm, | 30 std::unique_ptr<VideoCodingModule>* vcm, |
| 31 rtc::scoped_ptr<FileOutputFrameReceiver>* frame_receiver) | 31 std::unique_ptr<FileOutputFrameReceiver>* frame_receiver) |
| 32 : factory_(factory), stream_(stream), vcm_(), frame_receiver_() { | 32 : factory_(factory), stream_(stream), vcm_(), frame_receiver_() { |
| 33 assert(factory); | 33 assert(factory); |
| 34 assert(stream); | 34 assert(stream); |
| 35 assert(vcm); | 35 assert(vcm); |
| 36 assert(vcm->get()); | 36 assert(vcm->get()); |
| 37 assert(frame_receiver); | 37 assert(frame_receiver); |
| 38 assert(frame_receiver->get()); | 38 assert(frame_receiver->get()); |
| 39 vcm_.swap(*vcm); | 39 vcm_.swap(*vcm); |
| 40 frame_receiver_.swap(*frame_receiver); | 40 frame_receiver_.swap(*frame_receiver); |
| 41 vcm_->RegisterPacketRequestCallback(this); | 41 vcm_->RegisterPacketRequestCallback(this); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 } | 82 } |
| 83 | 83 |
| 84 bool Decode() { | 84 bool Decode() { |
| 85 vcm_->Decode(10000); | 85 vcm_->Decode(10000); |
| 86 return true; | 86 return true; |
| 87 } | 87 } |
| 88 | 88 |
| 89 private: | 89 private: |
| 90 VcmPayloadSinkFactory* factory_; | 90 VcmPayloadSinkFactory* factory_; |
| 91 RtpStreamInterface* stream_; | 91 RtpStreamInterface* stream_; |
| 92 rtc::scoped_ptr<VideoCodingModule> vcm_; | 92 std::unique_ptr<VideoCodingModule> vcm_; |
| 93 rtc::scoped_ptr<FileOutputFrameReceiver> frame_receiver_; | 93 std::unique_ptr<FileOutputFrameReceiver> frame_receiver_; |
| 94 | 94 |
| 95 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(VcmPayloadSink); | 95 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(VcmPayloadSink); |
| 96 }; | 96 }; |
| 97 | 97 |
| 98 VcmPayloadSinkFactory::VcmPayloadSinkFactory( | 98 VcmPayloadSinkFactory::VcmPayloadSinkFactory( |
| 99 const std::string& base_out_filename, | 99 const std::string& base_out_filename, |
| 100 Clock* clock, | 100 Clock* clock, |
| 101 bool protection_enabled, | 101 bool protection_enabled, |
| 102 VCMVideoProtection protection_method, | 102 VCMVideoProtection protection_method, |
| 103 int64_t rtt_ms, | 103 int64_t rtt_ms, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 119 | 119 |
| 120 VcmPayloadSinkFactory::~VcmPayloadSinkFactory() { | 120 VcmPayloadSinkFactory::~VcmPayloadSinkFactory() { |
| 121 assert(sinks_.empty()); | 121 assert(sinks_.empty()); |
| 122 } | 122 } |
| 123 | 123 |
| 124 PayloadSinkInterface* VcmPayloadSinkFactory::Create( | 124 PayloadSinkInterface* VcmPayloadSinkFactory::Create( |
| 125 RtpStreamInterface* stream) { | 125 RtpStreamInterface* stream) { |
| 126 assert(stream); | 126 assert(stream); |
| 127 CriticalSectionScoped cs(crit_sect_.get()); | 127 CriticalSectionScoped cs(crit_sect_.get()); |
| 128 | 128 |
| 129 rtc::scoped_ptr<VideoCodingModule> vcm( | 129 std::unique_ptr<VideoCodingModule> vcm( |
| 130 VideoCodingModule::Create(clock_, null_event_factory_.get())); | 130 VideoCodingModule::Create(clock_, null_event_factory_.get())); |
| 131 if (vcm.get() == NULL) { | 131 if (vcm.get() == NULL) { |
| 132 return NULL; | 132 return NULL; |
| 133 } | 133 } |
| 134 | 134 |
| 135 const PayloadTypes& plt = stream->payload_types(); | 135 const PayloadTypes& plt = stream->payload_types(); |
| 136 for (PayloadTypesIterator it = plt.begin(); it != plt.end(); ++it) { | 136 for (PayloadTypesIterator it = plt.begin(); it != plt.end(); ++it) { |
| 137 if (it->codec_type() != kVideoCodecULPFEC && | 137 if (it->codec_type() != kVideoCodecULPFEC && |
| 138 it->codec_type() != kVideoCodecRED) { | 138 it->codec_type() != kVideoCodecRED) { |
| 139 VideoCodec codec; | 139 VideoCodec codec; |
| 140 VideoCodingModule::Codec(it->codec_type(), &codec); | 140 VideoCodingModule::Codec(it->codec_type(), &codec); |
| 141 codec.plType = it->payload_type(); | 141 codec.plType = it->payload_type(); |
| 142 if (vcm->RegisterReceiveCodec(&codec, 1) < 0) { | 142 if (vcm->RegisterReceiveCodec(&codec, 1) < 0) { |
| 143 return NULL; | 143 return NULL; |
| 144 } | 144 } |
| 145 } | 145 } |
| 146 } | 146 } |
| 147 | 147 |
| 148 vcm->SetChannelParameters(0, 0, rtt_ms_); | 148 vcm->SetChannelParameters(0, 0, rtt_ms_); |
| 149 vcm->SetVideoProtection(protection_method_, protection_enabled_); | 149 vcm->SetVideoProtection(protection_method_, protection_enabled_); |
| 150 vcm->SetRenderDelay(render_delay_ms_); | 150 vcm->SetRenderDelay(render_delay_ms_); |
| 151 vcm->SetMinimumPlayoutDelay(min_playout_delay_ms_); | 151 vcm->SetMinimumPlayoutDelay(min_playout_delay_ms_); |
| 152 vcm->SetNackSettings(kMaxNackListSize, kMaxPacketAgeToNack, 0); | 152 vcm->SetNackSettings(kMaxNackListSize, kMaxPacketAgeToNack, 0); |
| 153 | 153 |
| 154 rtc::scoped_ptr<FileOutputFrameReceiver> frame_receiver( | 154 std::unique_ptr<FileOutputFrameReceiver> frame_receiver( |
| 155 new FileOutputFrameReceiver(base_out_filename_, stream->ssrc())); | 155 new FileOutputFrameReceiver(base_out_filename_, stream->ssrc())); |
| 156 rtc::scoped_ptr<VcmPayloadSink> sink( | 156 std::unique_ptr<VcmPayloadSink> sink( |
| 157 new VcmPayloadSink(this, stream, &vcm, &frame_receiver)); | 157 new VcmPayloadSink(this, stream, &vcm, &frame_receiver)); |
| 158 | 158 |
| 159 sinks_.push_back(sink.get()); | 159 sinks_.push_back(sink.get()); |
| 160 return sink.release(); | 160 return sink.release(); |
| 161 } | 161 } |
| 162 | 162 |
| 163 int VcmPayloadSinkFactory::DecodeAndProcessAll(bool decode_dual_frame) { | 163 int VcmPayloadSinkFactory::DecodeAndProcessAll(bool decode_dual_frame) { |
| 164 CriticalSectionScoped cs(crit_sect_.get()); | 164 CriticalSectionScoped cs(crit_sect_.get()); |
| 165 assert(clock_); | 165 assert(clock_); |
| 166 bool should_decode = (clock_->TimeInMilliseconds() % 5) == 0; | 166 bool should_decode = (clock_->TimeInMilliseconds() % 5) == 0; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 195 void VcmPayloadSinkFactory::Remove(VcmPayloadSink* sink) { | 195 void VcmPayloadSinkFactory::Remove(VcmPayloadSink* sink) { |
| 196 assert(sink); | 196 assert(sink); |
| 197 CriticalSectionScoped cs(crit_sect_.get()); | 197 CriticalSectionScoped cs(crit_sect_.get()); |
| 198 Sinks::iterator it = std::find(sinks_.begin(), sinks_.end(), sink); | 198 Sinks::iterator it = std::find(sinks_.begin(), sinks_.end(), sink); |
| 199 assert(it != sinks_.end()); | 199 assert(it != sinks_.end()); |
| 200 sinks_.erase(it); | 200 sinks_.erase(it); |
| 201 } | 201 } |
| 202 | 202 |
| 203 } // namespace rtpplayer | 203 } // namespace rtpplayer |
| 204 } // namespace webrtc | 204 } // namespace webrtc |
| OLD | NEW |