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..9d79c981b76c032369a168b5cbaee302a40d92a1 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_; |
@@ -86,7 +87,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 +125,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 +216,12 @@ void MediaSourceVideoRenderer::ProcessVideoPacket( |
delegate_->OnMediaSourceShape(desktop_shape_); |
} |
+ // First bit is set to 0 for key frames. |
+ 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 |