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

Side by Side Diff: talk/media/webrtc/webrtcvideoengine2.cc

Issue 1594973006: New rtc::VideoSinkInterface. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Workaround to not break chrome. Created 4 years, 10 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 | « talk/media/webrtc/webrtcvideoengine2.h ('k') | talk/session/media/channelmanager.h » ('j') | 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 * libjingle 2 * libjingle
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 1167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 return true; 1178 return true;
1179 } 1179 }
1180 1180
1181 rtc::CritScope stream_lock(&stream_crit_); 1181 rtc::CritScope stream_lock(&stream_crit_);
1182 std::map<uint32_t, WebRtcVideoReceiveStream*>::iterator it = 1182 std::map<uint32_t, WebRtcVideoReceiveStream*>::iterator it =
1183 receive_streams_.find(ssrc); 1183 receive_streams_.find(ssrc);
1184 if (it == receive_streams_.end()) { 1184 if (it == receive_streams_.end()) {
1185 return false; 1185 return false;
1186 } 1186 }
1187 1187
1188 it->second->SetRenderer(renderer); 1188 it->second->SetSink(renderer);
1189 return true; 1189 return true;
1190 } 1190 }
1191 1191
1192 bool WebRtcVideoChannel2::GetStats(VideoMediaInfo* info) { 1192 bool WebRtcVideoChannel2::GetStats(VideoMediaInfo* info) {
1193 info->Clear(); 1193 info->Clear();
1194 FillSenderStats(info); 1194 FillSenderStats(info);
1195 FillReceiverStats(info); 1195 FillReceiverStats(info);
1196 webrtc::Call::Stats stats = call_->GetStats(); 1196 webrtc::Call::Stats stats = call_->GetStats();
1197 FillBandwidthEstimationStats(stats, info); 1197 FillBandwidthEstimationStats(stats, info);
1198 if (stats.rtt_ms != -1) { 1198 if (stats.rtt_ms != -1) {
(...skipping 1025 matching lines...) Expand 10 before | Expand all | Expand 10 after
2224 const std::vector<VideoCodecSettings>& recv_codecs, 2224 const std::vector<VideoCodecSettings>& recv_codecs,
2225 bool disable_prerenderer_smoothing) 2225 bool disable_prerenderer_smoothing)
2226 : call_(call), 2226 : call_(call),
2227 ssrcs_(sp.ssrcs), 2227 ssrcs_(sp.ssrcs),
2228 ssrc_groups_(sp.ssrc_groups), 2228 ssrc_groups_(sp.ssrc_groups),
2229 stream_(NULL), 2229 stream_(NULL),
2230 default_stream_(default_stream), 2230 default_stream_(default_stream),
2231 config_(config), 2231 config_(config),
2232 external_decoder_factory_(external_decoder_factory), 2232 external_decoder_factory_(external_decoder_factory),
2233 disable_prerenderer_smoothing_(disable_prerenderer_smoothing), 2233 disable_prerenderer_smoothing_(disable_prerenderer_smoothing),
2234 renderer_(NULL), 2234 sink_(NULL),
2235 last_width_(-1), 2235 last_width_(-1),
2236 last_height_(-1), 2236 last_height_(-1),
2237 first_frame_timestamp_(-1), 2237 first_frame_timestamp_(-1),
2238 estimated_remote_start_ntp_time_ms_(0) { 2238 estimated_remote_start_ntp_time_ms_(0) {
2239 config_.renderer = this; 2239 config_.renderer = this;
2240 // SetRecvCodecs will also reset (start) the VideoReceiveStream. 2240 // SetRecvCodecs will also reset (start) the VideoReceiveStream.
2241 LOG(LS_INFO) << "SetRecvCodecs (recv) because we are creating the receive " 2241 LOG(LS_INFO) << "SetRecvCodecs (recv) because we are creating the receive "
2242 "stream for the first time: " 2242 "stream for the first time: "
2243 << CodecSettingsVectorToString(recv_codecs); 2243 << CodecSettingsVectorToString(recv_codecs);
2244 SetRecvCodecs(recv_codecs); 2244 SetRecvCodecs(recv_codecs);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
2417 (*allocated_decoders)[i].external_decoder); 2417 (*allocated_decoders)[i].external_decoder);
2418 } 2418 }
2419 delete (*allocated_decoders)[i].decoder; 2419 delete (*allocated_decoders)[i].decoder;
2420 } 2420 }
2421 allocated_decoders->clear(); 2421 allocated_decoders->clear();
2422 } 2422 }
2423 2423
2424 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::RenderFrame( 2424 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::RenderFrame(
2425 const webrtc::VideoFrame& frame, 2425 const webrtc::VideoFrame& frame,
2426 int time_to_render_ms) { 2426 int time_to_render_ms) {
2427 rtc::CritScope crit(&renderer_lock_); 2427 rtc::CritScope crit(&sink_lock_);
2428 2428
2429 if (first_frame_timestamp_ < 0) 2429 if (first_frame_timestamp_ < 0)
2430 first_frame_timestamp_ = frame.timestamp(); 2430 first_frame_timestamp_ = frame.timestamp();
2431 int64_t rtp_time_elapsed_since_first_frame = 2431 int64_t rtp_time_elapsed_since_first_frame =
2432 (timestamp_wraparound_handler_.Unwrap(frame.timestamp()) - 2432 (timestamp_wraparound_handler_.Unwrap(frame.timestamp()) -
2433 first_frame_timestamp_); 2433 first_frame_timestamp_);
2434 int64_t elapsed_time_ms = rtp_time_elapsed_since_first_frame / 2434 int64_t elapsed_time_ms = rtp_time_elapsed_since_first_frame /
2435 (cricket::kVideoCodecClockrate / 1000); 2435 (cricket::kVideoCodecClockrate / 1000);
2436 if (frame.ntp_time_ms() > 0) 2436 if (frame.ntp_time_ms() > 0)
2437 estimated_remote_start_ntp_time_ms_ = frame.ntp_time_ms() - elapsed_time_ms; 2437 estimated_remote_start_ntp_time_ms_ = frame.ntp_time_ms() - elapsed_time_ms;
2438 2438
2439 if (renderer_ == NULL) { 2439 if (sink_ == NULL) {
2440 LOG(LS_WARNING) << "VideoReceiveStream not connected to a VideoRenderer."; 2440 LOG(LS_WARNING) << "VideoReceiveStream not connected to a VideoSink.";
2441 return; 2441 return;
2442 } 2442 }
2443 2443
2444 last_width_ = frame.width(); 2444 last_width_ = frame.width();
2445 last_height_ = frame.height(); 2445 last_height_ = frame.height();
2446 2446
2447 const WebRtcVideoFrame render_frame( 2447 const WebRtcVideoFrame render_frame(
2448 frame.video_frame_buffer(), 2448 frame.video_frame_buffer(),
2449 frame.render_time_ms() * rtc::kNumNanosecsPerMillisec, frame.rotation()); 2449 frame.render_time_ms() * rtc::kNumNanosecsPerMillisec, frame.rotation());
2450 renderer_->RenderFrame(&render_frame); 2450 sink_->OnFrame(render_frame);
2451 } 2451 }
2452 2452
2453 bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::IsTextureSupported() const { 2453 bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::IsTextureSupported() const {
2454 return true; 2454 return true;
2455 } 2455 }
2456 2456
2457 bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::SmoothsRenderedFrames() 2457 bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::SmoothsRenderedFrames()
2458 const { 2458 const {
2459 return disable_prerenderer_smoothing_; 2459 return disable_prerenderer_smoothing_;
2460 } 2460 }
2461 2461
2462 bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::IsDefaultStream() const { 2462 bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::IsDefaultStream() const {
2463 return default_stream_; 2463 return default_stream_;
2464 } 2464 }
2465 2465
2466 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRenderer( 2466 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetSink(
2467 cricket::VideoRenderer* renderer) { 2467 rtc::VideoSinkInterface<cricket::VideoFrame>* sink) {
2468 rtc::CritScope crit(&renderer_lock_); 2468 rtc::CritScope crit(&sink_lock_);
2469 renderer_ = renderer; 2469 sink_ = sink;
2470 } 2470 }
2471 2471
2472 std::string 2472 std::string
2473 WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetCodecNameFromPayloadType( 2473 WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetCodecNameFromPayloadType(
2474 int payload_type) { 2474 int payload_type) {
2475 for (const webrtc::VideoReceiveStream::Decoder& decoder : config_.decoders) { 2475 for (const webrtc::VideoReceiveStream::Decoder& decoder : config_.decoders) {
2476 if (decoder.payload_type == payload_type) { 2476 if (decoder.payload_type == payload_type) {
2477 return decoder.payload_name; 2477 return decoder.payload_name;
2478 } 2478 }
2479 } 2479 }
(...skipping 13 matching lines...) Expand all
2493 info.packets_rcvd = stats.rtp_stats.transmitted.packets; 2493 info.packets_rcvd = stats.rtp_stats.transmitted.packets;
2494 info.packets_lost = stats.rtcp_stats.cumulative_lost; 2494 info.packets_lost = stats.rtcp_stats.cumulative_lost;
2495 info.fraction_lost = 2495 info.fraction_lost =
2496 static_cast<float>(stats.rtcp_stats.fraction_lost) / (1 << 8); 2496 static_cast<float>(stats.rtcp_stats.fraction_lost) / (1 << 8);
2497 2497
2498 info.framerate_rcvd = stats.network_frame_rate; 2498 info.framerate_rcvd = stats.network_frame_rate;
2499 info.framerate_decoded = stats.decode_frame_rate; 2499 info.framerate_decoded = stats.decode_frame_rate;
2500 info.framerate_output = stats.render_frame_rate; 2500 info.framerate_output = stats.render_frame_rate;
2501 2501
2502 { 2502 {
2503 rtc::CritScope frame_cs(&renderer_lock_); 2503 rtc::CritScope frame_cs(&sink_lock_);
2504 info.frame_width = last_width_; 2504 info.frame_width = last_width_;
2505 info.frame_height = last_height_; 2505 info.frame_height = last_height_;
2506 info.capture_start_ntp_time_ms = estimated_remote_start_ntp_time_ms_; 2506 info.capture_start_ntp_time_ms = estimated_remote_start_ntp_time_ms_;
2507 } 2507 }
2508 2508
2509 info.decode_ms = stats.decode_ms; 2509 info.decode_ms = stats.decode_ms;
2510 info.max_decode_ms = stats.max_decode_ms; 2510 info.max_decode_ms = stats.max_decode_ms;
2511 info.current_delay_ms = stats.current_delay_ms; 2511 info.current_delay_ms = stats.current_delay_ms;
2512 info.target_delay_ms = stats.target_delay_ms; 2512 info.target_delay_ms = stats.target_delay_ms;
2513 info.jitter_buffer_ms = stats.jitter_buffer_ms; 2513 info.jitter_buffer_ms = stats.jitter_buffer_ms;
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
2631 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2631 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2632 } 2632 }
2633 } 2633 }
2634 2634
2635 return video_codecs; 2635 return video_codecs;
2636 } 2636 }
2637 2637
2638 } // namespace cricket 2638 } // namespace cricket
2639 2639
2640 #endif // HAVE_WEBRTC_VIDEO 2640 #endif // HAVE_WEBRTC_VIDEO
OLDNEW
« no previous file with comments | « talk/media/webrtc/webrtcvideoengine2.h ('k') | talk/session/media/channelmanager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698