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

Side by Side Diff: webrtc/media/engine/webrtcvideoengine.cc

Issue 3011823002: Remove wrapping in AllocatedDecoder struct (Closed)
Patch Set: Rebase Created 3 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 | « no previous file | no next file » | 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) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 const VideoCodec& codec, 67 const VideoCodec& codec,
68 bool is_conference_mode_screenshare) const = 0; 68 bool is_conference_mode_screenshare) const = 0;
69 69
70 virtual std::vector<VideoCodec> GetSupportedCodecs() const = 0; 70 virtual std::vector<VideoCodec> GetSupportedCodecs() const = 0;
71 71
72 virtual std::unique_ptr<EncoderFactoryAdapter> clone() const = 0; 72 virtual std::unique_ptr<EncoderFactoryAdapter> clone() const = 0;
73 }; 73 };
74 74
75 class DecoderFactoryAdapter { 75 class DecoderFactoryAdapter {
76 public: 76 public:
77 struct AllocatedDecoder {
78 AllocatedDecoder() = default;
79 AllocatedDecoder(std::unique_ptr<webrtc::VideoDecoder> decoder,
80 bool is_hardware_accelerated);
81
82 std::unique_ptr<webrtc::VideoDecoder> decoder;
83 bool is_hardware_accelerated;
84 };
85
86 virtual ~DecoderFactoryAdapter() {} 77 virtual ~DecoderFactoryAdapter() {}
87 78
88 virtual AllocatedDecoder CreateVideoDecoder( 79 virtual std::unique_ptr<webrtc::VideoDecoder> CreateVideoDecoder(
89 webrtc::VideoCodecType type, 80 webrtc::VideoCodecType type,
90 const VideoDecoderParams& decoder_params) const = 0; 81 const VideoDecoderParams& decoder_params) const = 0;
91 82
92 virtual std::unique_ptr<DecoderFactoryAdapter> clone() const = 0; 83 virtual std::unique_ptr<DecoderFactoryAdapter> clone() const = 0;
93 }; 84 };
94 85
95 namespace { 86 namespace {
96 87
97 // Wraps cricket::WebRtcVideoEncoderFactory* into common EncoderFactoryAdapter 88 // Wraps cricket::WebRtcVideoEncoderFactory* into common EncoderFactoryAdapter
98 // interface. 89 // interface.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 explicit CricketDecoderFactoryAdapter( 121 explicit CricketDecoderFactoryAdapter(
131 WebRtcVideoDecoderFactory* external_decoder_factory) 122 WebRtcVideoDecoderFactory* external_decoder_factory)
132 : internal_decoder_factory_(new InternalDecoderFactory()), 123 : internal_decoder_factory_(new InternalDecoderFactory()),
133 external_decoder_factory_(external_decoder_factory) {} 124 external_decoder_factory_(external_decoder_factory) {}
134 125
135 private: 126 private:
136 explicit CricketDecoderFactoryAdapter( 127 explicit CricketDecoderFactoryAdapter(
137 const CricketDecoderFactoryAdapter& other) 128 const CricketDecoderFactoryAdapter& other)
138 : CricketDecoderFactoryAdapter(other.external_decoder_factory_) {} 129 : CricketDecoderFactoryAdapter(other.external_decoder_factory_) {}
139 130
140 AllocatedDecoder CreateVideoDecoder( 131 std::unique_ptr<webrtc::VideoDecoder> CreateVideoDecoder(
141 webrtc::VideoCodecType type, 132 webrtc::VideoCodecType type,
142 const VideoDecoderParams& decoder_params) const override; 133 const VideoDecoderParams& decoder_params) const override;
143 134
144 std::unique_ptr<DecoderFactoryAdapter> clone() const override { 135 std::unique_ptr<DecoderFactoryAdapter> clone() const override {
145 return std::unique_ptr<DecoderFactoryAdapter>( 136 return std::unique_ptr<DecoderFactoryAdapter>(
146 new CricketDecoderFactoryAdapter(*this)); 137 new CricketDecoderFactoryAdapter(*this));
147 } 138 }
148 139
149 const std::unique_ptr<WebRtcVideoDecoderFactory> internal_decoder_factory_; 140 const std::unique_ptr<WebRtcVideoDecoderFactory> internal_decoder_factory_;
150 WebRtcVideoDecoderFactory* const external_decoder_factory_; 141 WebRtcVideoDecoderFactory* const external_decoder_factory_;
(...skipping 1977 matching lines...) Expand 10 before | Expand all | Expand 10 after
2128 config_.renderer = this; 2119 config_.renderer = this;
2129 std::map<webrtc::VideoCodecType, std::unique_ptr<webrtc::VideoDecoder>> 2120 std::map<webrtc::VideoCodecType, std::unique_ptr<webrtc::VideoDecoder>>
2130 old_decoders; 2121 old_decoders;
2131 ConfigureCodecs(recv_codecs, &old_decoders); 2122 ConfigureCodecs(recv_codecs, &old_decoders);
2132 ConfigureFlexfecCodec(flexfec_config.payload_type); 2123 ConfigureFlexfecCodec(flexfec_config.payload_type);
2133 MaybeRecreateWebRtcFlexfecStream(); 2124 MaybeRecreateWebRtcFlexfecStream();
2134 RecreateWebRtcVideoStream(); 2125 RecreateWebRtcVideoStream();
2135 RTC_DCHECK(old_decoders.empty()); 2126 RTC_DCHECK(old_decoders.empty());
2136 } 2127 }
2137 2128
2138 DecoderFactoryAdapter::AllocatedDecoder::AllocatedDecoder(
2139 std::unique_ptr<webrtc::VideoDecoder> decoder,
2140 bool is_hardware_accelerated)
2141 : decoder(std::move(decoder)),
2142 is_hardware_accelerated(is_hardware_accelerated) {}
2143
2144 WebRtcVideoChannel::WebRtcVideoReceiveStream::~WebRtcVideoReceiveStream() { 2129 WebRtcVideoChannel::WebRtcVideoReceiveStream::~WebRtcVideoReceiveStream() {
2145 if (flexfec_stream_) { 2130 if (flexfec_stream_) {
2146 MaybeDissociateFlexfecFromVideo(); 2131 MaybeDissociateFlexfecFromVideo();
2147 call_->DestroyFlexfecReceiveStream(flexfec_stream_); 2132 call_->DestroyFlexfecReceiveStream(flexfec_stream_);
2148 } 2133 }
2149 call_->DestroyVideoReceiveStream(stream_); 2134 call_->DestroyVideoReceiveStream(stream_);
2150 allocated_decoders_.clear(); 2135 allocated_decoders_.clear();
2151 } 2136 }
2152 2137
2153 const std::vector<uint32_t>& 2138 const std::vector<uint32_t>&
2154 WebRtcVideoChannel::WebRtcVideoReceiveStream::GetSsrcs() const { 2139 WebRtcVideoChannel::WebRtcVideoReceiveStream::GetSsrcs() const {
2155 return stream_params_.ssrcs; 2140 return stream_params_.ssrcs;
2156 } 2141 }
2157 2142
2158 rtc::Optional<uint32_t> 2143 rtc::Optional<uint32_t>
2159 WebRtcVideoChannel::WebRtcVideoReceiveStream::GetFirstPrimarySsrc() const { 2144 WebRtcVideoChannel::WebRtcVideoReceiveStream::GetFirstPrimarySsrc() const {
2160 std::vector<uint32_t> primary_ssrcs; 2145 std::vector<uint32_t> primary_ssrcs;
2161 stream_params_.GetPrimarySsrcs(&primary_ssrcs); 2146 stream_params_.GetPrimarySsrcs(&primary_ssrcs);
2162 2147
2163 if (primary_ssrcs.empty()) { 2148 if (primary_ssrcs.empty()) {
2164 LOG(LS_WARNING) << "Empty primary ssrcs vector, returning empty optional"; 2149 LOG(LS_WARNING) << "Empty primary ssrcs vector, returning empty optional";
2165 return rtc::Optional<uint32_t>(); 2150 return rtc::Optional<uint32_t>();
2166 } else { 2151 } else {
2167 return rtc::Optional<uint32_t>(primary_ssrcs[0]); 2152 return rtc::Optional<uint32_t>(primary_ssrcs[0]);
2168 } 2153 }
2169 } 2154 }
2170 2155
2171 DecoderFactoryAdapter::AllocatedDecoder 2156 std::unique_ptr<webrtc::VideoDecoder>
2172 CricketDecoderFactoryAdapter::CreateVideoDecoder( 2157 CricketDecoderFactoryAdapter::CreateVideoDecoder(
2173 webrtc::VideoCodecType type, 2158 webrtc::VideoCodecType type,
2174 const VideoDecoderParams& decoder_params) const { 2159 const VideoDecoderParams& decoder_params) const {
2175 if (external_decoder_factory_ != nullptr) { 2160 if (external_decoder_factory_ != nullptr) {
2176 std::unique_ptr<webrtc::VideoDecoder> external_decoder = 2161 std::unique_ptr<webrtc::VideoDecoder> external_decoder =
2177 CreateScopedVideoDecoder(external_decoder_factory_, type, 2162 CreateScopedVideoDecoder(external_decoder_factory_, type,
2178 decoder_params); 2163 decoder_params);
2179 if (external_decoder) { 2164 if (external_decoder) {
2180 std::unique_ptr<webrtc::VideoDecoder> internal_decoder( 2165 std::unique_ptr<webrtc::VideoDecoder> internal_decoder(
2181 new webrtc::VideoDecoderSoftwareFallbackWrapper( 2166 new webrtc::VideoDecoderSoftwareFallbackWrapper(
2182 type, std::move(external_decoder))); 2167 type, std::move(external_decoder)));
2183 return AllocatedDecoder(std::move(internal_decoder), 2168 return internal_decoder;
2184 true /* is_hardware_accelerated */);
2185 } 2169 }
2186 } 2170 }
2187 2171
2188 std::unique_ptr<webrtc::VideoDecoder> internal_decoder( 2172 std::unique_ptr<webrtc::VideoDecoder> internal_decoder(
2189 internal_decoder_factory_->CreateVideoDecoderWithParams(type, 2173 internal_decoder_factory_->CreateVideoDecoderWithParams(type,
2190 decoder_params)); 2174 decoder_params));
2191 return AllocatedDecoder(std::move(internal_decoder), 2175 return internal_decoder;
2192 false /* is_hardware_accelerated */);
2193 } 2176 }
2194 2177
2195 void WebRtcVideoChannel::WebRtcVideoReceiveStream::ConfigureCodecs( 2178 void WebRtcVideoChannel::WebRtcVideoReceiveStream::ConfigureCodecs(
2196 const std::vector<VideoCodecSettings>& recv_codecs, 2179 const std::vector<VideoCodecSettings>& recv_codecs,
2197 std::map<webrtc::VideoCodecType, std::unique_ptr<webrtc::VideoDecoder>>* 2180 std::map<webrtc::VideoCodecType, std::unique_ptr<webrtc::VideoDecoder>>*
2198 old_decoders) { 2181 old_decoders) {
2199 *old_decoders = std::move(allocated_decoders_); 2182 *old_decoders = std::move(allocated_decoders_);
2200 allocated_decoders_.clear(); 2183 allocated_decoders_.clear();
2201 config_.decoders.clear(); 2184 config_.decoders.clear();
2202 for (size_t i = 0; i < recv_codecs.size(); ++i) { 2185 for (size_t i = 0; i < recv_codecs.size(); ++i) {
2203 webrtc::VideoCodecType type = 2186 webrtc::VideoCodecType type =
2204 webrtc::PayloadStringToCodecType(recv_codecs[i].codec.name); 2187 webrtc::PayloadStringToCodecType(recv_codecs[i].codec.name);
2205 std::unique_ptr<webrtc::VideoDecoder> new_decoder; 2188 std::unique_ptr<webrtc::VideoDecoder> new_decoder;
2206 2189
2207 auto it = old_decoders->find(type); 2190 auto it = old_decoders->find(type);
2208 if (it != old_decoders->end()) { 2191 if (it != old_decoders->end()) {
2209 new_decoder = std::move(it->second); 2192 new_decoder = std::move(it->second);
2210 old_decoders->erase(it); 2193 old_decoders->erase(it);
2211 } 2194 }
2212 2195
2213 if (!new_decoder) { 2196 if (!new_decoder) {
2214 DecoderFactoryAdapter::AllocatedDecoder new_allocated_decoder = 2197 new_decoder =
2215 decoder_factory_->CreateVideoDecoder(type, {stream_params_.id}); 2198 decoder_factory_->CreateVideoDecoder(type, {stream_params_.id});
2216 new_decoder = std::unique_ptr<webrtc::VideoDecoder>(
2217 std::move(new_allocated_decoder.decoder));
2218 // TODO(andersc): are we using the is_hardware_accelerated field for
2219 // anything?
2220 } 2199 }
2221 2200
2222 webrtc::VideoReceiveStream::Decoder decoder; 2201 webrtc::VideoReceiveStream::Decoder decoder;
2223 decoder.decoder = new_decoder.get(); 2202 decoder.decoder = new_decoder.get();
2224 decoder.payload_type = recv_codecs[i].codec.id; 2203 decoder.payload_type = recv_codecs[i].codec.id;
2225 decoder.payload_name = recv_codecs[i].codec.name; 2204 decoder.payload_name = recv_codecs[i].codec.name;
2226 decoder.codec_params = recv_codecs[i].codec.params; 2205 decoder.codec_params = recv_codecs[i].codec.params;
2227 config_.decoders.push_back(decoder); 2206 config_.decoders.push_back(decoder);
2228 2207
2229 allocated_decoders_.insert(std::make_pair(type, std::move(new_decoder))); 2208 allocated_decoders_.insert(std::make_pair(type, std::move(new_decoder)));
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
2647 stream.temporal_layer_thresholds_bps.resize(GetDefaultVp9TemporalLayers() - 2626 stream.temporal_layer_thresholds_bps.resize(GetDefaultVp9TemporalLayers() -
2648 1); 2627 1);
2649 } 2628 }
2650 2629
2651 std::vector<webrtc::VideoStream> streams; 2630 std::vector<webrtc::VideoStream> streams;
2652 streams.push_back(stream); 2631 streams.push_back(stream);
2653 return streams; 2632 return streams;
2654 } 2633 }
2655 2634
2656 } // namespace cricket 2635 } // namespace cricket
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698