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

Unified Diff: remoting/client/plugin/media_source_video_renderer.cc

Issue 329663002: Fix MediaSource renderer to limit memory consumption. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: remoting/client/plugin/media_source_video_renderer.cc
diff --git a/remoting/client/plugin/media_source_video_renderer.cc b/remoting/client/plugin/media_source_video_renderer.cc
index 817df11c7ac546fa31249e298d10b8b994254c1c..a2eb5dd679ba1edbfe185777581f3c43e0dbdf6f 100644
--- a/remoting/client/plugin/media_source_video_renderer.cc
+++ b/remoting/client/plugin/media_source_video_renderer.cc
@@ -35,7 +35,8 @@ class MediaSourceVideoRenderer::VideoWriter : public mkvmuxer::IMkvWriter {
virtual void ElementStartNotify(mkvmuxer::uint64 element_id,
mkvmuxer::int64 position) OVERRIDE;
- scoped_ptr<DataBuffer> OnVideoFrame(const std::string& video_data);
+ scoped_ptr<DataBuffer> OnVideoFrame(const std::string& video_data,
+ bool keyframe);
private:
webrtc::DesktopSize frame_size_;
@@ -53,6 +54,8 @@ MediaSourceVideoRenderer::VideoWriter::VideoWriter(
segment_.reset(new mkvmuxer::Segment());
segment_->Init(this);
segment_->set_mode(mkvmuxer::Segment::kLive);
+ segment_->set_max_cluster_duration(0);
+ segment_->set_max_cluster_size(0);
Jamie 2014/06/11 21:41:42 I don't understand what these lines do. Are they c
Sergey Ulanov 2014/06/11 23:41:12 That was my attempt to workaround crbug.com/382807
// DateUTC is specified in nanoseconds from 0:00 on January 1st, 2001.
base::Time::Exploded millennium_exploded;
@@ -86,7 +89,7 @@ MediaSourceVideoRenderer::VideoWriter::VideoWriter(
video_track->set_crop_bottom(crop_bottom);
video_track->set_frame_rate(base::Time::kNanosecondsPerSecond /
kFrameIntervalNs);
- video_track->set_default_duration(base::Time::kNanosecondsPerSecond);
+ video_track->set_default_duration(kFrameIntervalNs);
mkvmuxer::SegmentInfo* const info = segment_->GetSegmentInfo();
info->set_writing_app("ChromotingViewer");
info->set_muxing_app("ChromotingViewer");
@@ -124,13 +127,13 @@ void MediaSourceVideoRenderer::VideoWriter::ElementStartNotify(
scoped_ptr<MediaSourceVideoRenderer::VideoWriter::DataBuffer>
MediaSourceVideoRenderer::VideoWriter::OnVideoFrame(
- const std::string& video_data) {
+ const std::string& video_data,
+ bool keyframe) {
DCHECK(!output_data_);
output_data_.reset(new DataBuffer());
- bool first_frame = (timecode_ == 0);
segment_->AddFrame(reinterpret_cast<const uint8_t*>(video_data.data()),
- video_data.size(), 1, timecode_, first_frame);
+ video_data.size(), 1, timecode_, keyframe);
timecode_ += kFrameIntervalNs;
return output_data_.Pass();
}
@@ -215,9 +218,12 @@ void MediaSourceVideoRenderer::ProcessVideoPacket(
delegate_->OnMediaSourceShape(desktop_shape_);
}
+ // First bit indicates I-frames.
Jamie 2014/06/11 21:41:42 s/I/key/?
Sergey Ulanov 2014/06/11 23:41:12 Done.
+ bool keyframe = (packet->data()[0] & 1) == 0;
+
scoped_ptr<VideoWriter::DataBuffer> buffer =
- writer_->OnVideoFrame(packet->data());
- delegate_->OnMediaSourceData(&(*(buffer->begin())), buffer->size());
+ writer_->OnVideoFrame(packet->data(), keyframe);
+ delegate_->OnMediaSourceData(&(*(buffer->begin())), buffer->size(), keyframe);
}
} // namespace remoting

Powered by Google App Engine
This is Rietveld 408576698