diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-02 16:15:42 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-02 16:15:42 +0000 |
commit | 3579cff9dde9029cd0d7246ab7f9126b6ca07bee (patch) | |
tree | c430d71dd7ea68a1836f13b58bc5a84fabf1dcdc /remoting/client | |
parent | 2f2da8461357d663f97e623015296ea44ceaf7c0 (diff) | |
download | chromium_src-3579cff9dde9029cd0d7246ab7f9126b6ca07bee.zip chromium_src-3579cff9dde9029cd0d7246ab7f9126b6ca07bee.tar.gz chromium_src-3579cff9dde9029cd0d7246ab7f9126b6ca07bee.tar.bz2 |
Fix MediaSourceVideoRenderer to generate "live stream"
In order for MediaStream to be rendered with 0 delay the stream must be
marked as "live". Chrome detects liveness of a stream by presense of
DateUTC and also unknown stream duration and size (see crrev.com/266452).
Now the renderer properly sets DateUTC element in the stream it
generates.
Also changed the renderer to add DefaultDuration, which specifies
default frame duration. Without it the stream parser has to delay the
stream by one frame in order to calculate duration of each frame.
BUG=321825
Review URL: https://codereview.chromium.org/266733002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@267807 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/client')
-rw-r--r-- | remoting/client/plugin/media_source_video_renderer.cc | 20 | ||||
-rw-r--r-- | remoting/client/plugin/media_source_video_renderer.h | 2 |
2 files changed, 20 insertions, 2 deletions
diff --git a/remoting/client/plugin/media_source_video_renderer.cc b/remoting/client/plugin/media_source_video_renderer.cc index f14a61e..5326754 100644 --- a/remoting/client/plugin/media_source_video_renderer.cc +++ b/remoting/client/plugin/media_source_video_renderer.cc @@ -8,6 +8,7 @@ #include "base/callback_helpers.h" #include "base/logging.h" +#include "base/time/time.h" #include "remoting/proto/video.pb.h" #include "remoting/protocol/session_config.h" #include "third_party/libwebm/source/mkvmuxer.hpp" @@ -20,7 +21,7 @@ class MediaSourceVideoRenderer::VideoWriter : public mkvmuxer::IMkvWriter { public: typedef std::vector<uint8_t> DataBuffer; - VideoWriter(const webrtc::DesktopSize& frame_size); + explicit VideoWriter(const webrtc::DesktopSize& frame_size); virtual ~VideoWriter(); const webrtc::DesktopSize& size() { return frame_size_; } @@ -52,7 +53,24 @@ MediaSourceVideoRenderer::VideoWriter::VideoWriter( segment_.reset(new mkvmuxer::Segment()); segment_->Init(this); segment_->set_mode(mkvmuxer::Segment::kLive); + + // DateUTC is specified in nanoseconds from 0:00 on January 1st, 2001. + base::Time::Exploded millennium_exploded; + memset(&millennium_exploded, 0, sizeof(millennium_exploded)); + millennium_exploded.year = 2001; + millennium_exploded.month = 1; + millennium_exploded.day_of_month = 1; + segment_->GetSegmentInfo()->set_date_utc( + (base::Time::Now() - base::Time::FromUTCExploded(millennium_exploded)) + .InMicroseconds() * + base::Time::kNanosecondsPerMicrosecond); + segment_->AddVideoTrack(frame_size_.width(), frame_size_.height(), 1); + mkvmuxer::VideoTrack* video_track = + reinterpret_cast<mkvmuxer::VideoTrack*>(segment_->GetTrackByNumber(1)); + video_track->set_frame_rate(base::Time::kNanosecondsPerSecond / + kFrameIntervalNs); + video_track->set_default_duration(base::Time::kNanosecondsPerSecond); mkvmuxer::SegmentInfo* const info = segment_->GetSegmentInfo(); info->set_writing_app("ChromotingViewer"); info->set_muxing_app("ChromotingViewer"); diff --git a/remoting/client/plugin/media_source_video_renderer.h b/remoting/client/plugin/media_source_video_renderer.h index 2df7758..25d7d07 100644 --- a/remoting/client/plugin/media_source_video_renderer.h +++ b/remoting/client/plugin/media_source_video_renderer.h @@ -41,7 +41,7 @@ class MediaSourceVideoRenderer : public VideoRenderer { virtual void OnMediaSourceData(uint8_t* buffer, size_t buffer_size) = 0; }; - MediaSourceVideoRenderer(Delegate* delegate); + explicit MediaSourceVideoRenderer(Delegate* data_forwarder); virtual ~MediaSourceVideoRenderer(); // VideoRenderer interface. |