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

Side by Side Diff: remoting/protocol/webrtc_video_renderer_adapter.cc

Issue 2113523007: More cleanups in FrameStats (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix android Created 4 years, 5 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 | « remoting/protocol/webrtc_video_renderer_adapter.h ('k') | remoting/test/protocol_perftest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/protocol/webrtc_video_renderer_adapter.h" 5 #include "remoting/protocol/webrtc_video_renderer_adapter.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/location.h" 12 #include "base/location.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
15 #include "base/task_runner_util.h" 15 #include "base/task_runner_util.h"
16 #include "base/threading/thread_task_runner_handle.h" 16 #include "base/threading/thread_task_runner_handle.h"
17 #include "base/threading/worker_pool.h" 17 #include "base/threading/worker_pool.h"
18 #include "remoting/protocol/frame_consumer.h" 18 #include "remoting/protocol/frame_consumer.h"
19 #include "remoting/protocol/frame_stats.h" 19 #include "remoting/protocol/frame_stats.h"
20 #include "remoting/protocol/video_renderer.h"
20 #include "third_party/libyuv/include/libyuv/convert_argb.h" 21 #include "third_party/libyuv/include/libyuv/convert_argb.h"
21 #include "third_party/libyuv/include/libyuv/video_common.h" 22 #include "third_party/libyuv/include/libyuv/video_common.h"
22 #include "third_party/webrtc/media/base/videoframe.h" 23 #include "third_party/webrtc/media/base/videoframe.h"
23 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" 24 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
24 25
25 namespace remoting { 26 namespace remoting {
26 namespace protocol { 27 namespace protocol {
27 28
28 namespace { 29 namespace {
29 30
(...skipping 14 matching lines...) Expand all
44 45
45 rgb_frame->mutable_updated_region()->AddRect( 46 rgb_frame->mutable_updated_region()->AddRect(
46 webrtc::DesktopRect::MakeSize(rgb_frame->size())); 47 webrtc::DesktopRect::MakeSize(rgb_frame->size()));
47 return rgb_frame; 48 return rgb_frame;
48 } 49 }
49 50
50 } // namespace 51 } // namespace
51 52
52 WebrtcVideoRendererAdapter::WebrtcVideoRendererAdapter( 53 WebrtcVideoRendererAdapter::WebrtcVideoRendererAdapter(
53 scoped_refptr<webrtc::MediaStreamInterface> media_stream, 54 scoped_refptr<webrtc::MediaStreamInterface> media_stream,
54 FrameConsumer* frame_consumer) 55 VideoRenderer* video_renderer)
55 : media_stream_(std::move(media_stream)), 56 : media_stream_(std::move(media_stream)),
56 frame_consumer_(frame_consumer), 57 video_renderer_(video_renderer),
57 task_runner_(base::ThreadTaskRunnerHandle::Get()), 58 task_runner_(base::ThreadTaskRunnerHandle::Get()),
58 weak_factory_(this) { 59 weak_factory_(this) {
59 webrtc::VideoTrackVector video_tracks = media_stream_->GetVideoTracks(); 60 webrtc::VideoTrackVector video_tracks = media_stream_->GetVideoTracks();
60 if (video_tracks.empty()) { 61 if (video_tracks.empty()) {
61 LOG(ERROR) << "Received media stream with no video tracks."; 62 LOG(ERROR) << "Received media stream with no video tracks.";
62 return; 63 return;
63 } 64 }
64 65
65 if (video_tracks.size() > 1U) { 66 if (video_tracks.size() > 1U) {
66 LOG(WARNING) << "Received media stream with multiple video tracks."; 67 LOG(WARNING) << "Received media stream with multiple video tracks.";
(...skipping 10 matching lines...) Expand all
77 video_tracks[0]->RemoveSink(this); 78 video_tracks[0]->RemoveSink(this);
78 } 79 }
79 80
80 void WebrtcVideoRendererAdapter::OnFrame(const cricket::VideoFrame& frame) { 81 void WebrtcVideoRendererAdapter::OnFrame(const cricket::VideoFrame& frame) {
81 if (static_cast<uint64_t>(frame.timestamp_us()) >= rtc::TimeMicros()) { 82 if (static_cast<uint64_t>(frame.timestamp_us()) >= rtc::TimeMicros()) {
82 // The host sets playout delay to 0, so all incoming frames are expected to 83 // The host sets playout delay to 0, so all incoming frames are expected to
83 // be rendered as so as they are received. 84 // be rendered as so as they are received.
84 LOG(WARNING) << "Received frame with playout delay greater than 0."; 85 LOG(WARNING) << "Received frame with playout delay greater than 0.";
85 } 86 }
86 87
87 std::unique_ptr<FrameStats> stats(new FrameStats()); 88 std::unique_ptr<ClientFrameStats> stats(new ClientFrameStats());
88 // TODO(sergeyu): |time_received| is not reported correctly here because the 89 // TODO(sergeyu): |time_received| is not reported correctly here because the
89 // frame is already decoded at this point. 90 // frame is already decoded at this point.
90 stats->time_received = base::TimeTicks::Now(); 91 stats->time_received = base::TimeTicks::Now();
91 92
92 task_runner_->PostTask( 93 task_runner_->PostTask(
93 FROM_HERE, 94 FROM_HERE,
94 base::Bind(&WebrtcVideoRendererAdapter::HandleFrameOnMainThread, 95 base::Bind(&WebrtcVideoRendererAdapter::HandleFrameOnMainThread,
95 weak_factory_.GetWeakPtr(), base::Passed(&stats), 96 weak_factory_.GetWeakPtr(), base::Passed(&stats),
96 scoped_refptr<webrtc::VideoFrameBuffer>( 97 scoped_refptr<webrtc::VideoFrameBuffer>(
97 frame.video_frame_buffer().get()))); 98 frame.video_frame_buffer().get())));
98 } 99 }
99 100
100 void WebrtcVideoRendererAdapter::HandleFrameOnMainThread( 101 void WebrtcVideoRendererAdapter::HandleFrameOnMainThread(
101 std::unique_ptr<FrameStats> stats, 102 std::unique_ptr<ClientFrameStats> stats,
102 scoped_refptr<webrtc::VideoFrameBuffer> frame) { 103 scoped_refptr<webrtc::VideoFrameBuffer> frame) {
103 DCHECK(task_runner_->BelongsToCurrentThread()); 104 DCHECK(task_runner_->BelongsToCurrentThread());
104 105
105 std::unique_ptr<webrtc::DesktopFrame> rgb_frame = 106 std::unique_ptr<webrtc::DesktopFrame> rgb_frame =
106 frame_consumer_->AllocateFrame( 107 video_renderer_->GetFrameConsumer()->AllocateFrame(
107 webrtc::DesktopSize(frame->width(), frame->height())); 108 webrtc::DesktopSize(frame->width(), frame->height()));
108 109
109 base::PostTaskAndReplyWithResult( 110 base::PostTaskAndReplyWithResult(
110 base::WorkerPool::GetTaskRunner(false).get(), FROM_HERE, 111 base::WorkerPool::GetTaskRunner(false).get(), FROM_HERE,
111 base::Bind(&ConvertYuvToRgb, base::Passed(&frame), 112 base::Bind(&ConvertYuvToRgb, base::Passed(&frame),
112 base::Passed(&rgb_frame), frame_consumer_->GetPixelFormat()), 113 base::Passed(&rgb_frame),
114 video_renderer_->GetFrameConsumer()->GetPixelFormat()),
113 base::Bind(&WebrtcVideoRendererAdapter::DrawFrame, 115 base::Bind(&WebrtcVideoRendererAdapter::DrawFrame,
114 weak_factory_.GetWeakPtr(), base::Passed(&stats))); 116 weak_factory_.GetWeakPtr(), base::Passed(&stats)));
115 } 117 }
116 118
117 void WebrtcVideoRendererAdapter::DrawFrame( 119 void WebrtcVideoRendererAdapter::DrawFrame(
118 std::unique_ptr<FrameStats> stats, 120 std::unique_ptr<ClientFrameStats> stats,
119 std::unique_ptr<webrtc::DesktopFrame> frame) { 121 std::unique_ptr<webrtc::DesktopFrame> frame) {
120 DCHECK(task_runner_->BelongsToCurrentThread()); 122 DCHECK(task_runner_->BelongsToCurrentThread());
121 stats->time_decoded = base::TimeTicks::Now(); 123 stats->time_decoded = base::TimeTicks::Now();
122 frame_consumer_->DrawFrame( 124 video_renderer_->GetFrameConsumer()->DrawFrame(
123 std::move(frame), 125 std::move(frame),
124 base::Bind(&WebrtcVideoRendererAdapter::FrameRendered, 126 base::Bind(&WebrtcVideoRendererAdapter::FrameRendered,
125 weak_factory_.GetWeakPtr(), base::Passed(&stats))); 127 weak_factory_.GetWeakPtr(), base::Passed(&stats)));
126 } 128 }
127 129
128 void WebrtcVideoRendererAdapter::FrameRendered( 130 void WebrtcVideoRendererAdapter::FrameRendered(
129 std::unique_ptr<FrameStats> stats) { 131 std::unique_ptr<ClientFrameStats> stats) {
130 // TODO(sergeyu): Report stats here 132 // TODO(sergeyu): Report stats here
131 } 133 }
132 134
133 } // namespace protocol 135 } // namespace protocol
134 } // namespace remoting 136 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/webrtc_video_renderer_adapter.h ('k') | remoting/test/protocol_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698