summaryrefslogtreecommitdiffstats
path: root/remoting/client
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-02 16:15:42 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-02 16:15:42 +0000
commit3579cff9dde9029cd0d7246ab7f9126b6ca07bee (patch)
treec430d71dd7ea68a1836f13b58bc5a84fabf1dcdc /remoting/client
parent2f2da8461357d663f97e623015296ea44ceaf7c0 (diff)
downloadchromium_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.cc20
-rw-r--r--remoting/client/plugin/media_source_video_renderer.h2
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.