| Index: media/capture/webm_muxer.cc | 
| diff --git a/media/capture/webm_muxer.cc b/media/capture/webm_muxer.cc | 
| index 0127380eaa13ddac3ffdb847c46f2a702bfd8f46..7ce5ea6d0da72cc4f9c8da42d8979f7bfee591cb 100644 | 
| --- a/media/capture/webm_muxer.cc | 
| +++ b/media/capture/webm_muxer.cc | 
| @@ -22,27 +22,21 @@ WebmMuxer::WebmMuxer(const WriteDataCB& write_data_callback) | 
| : track_index_(0), | 
| write_data_callback_(write_data_callback), | 
| position_(0) { | 
| -  DCHECK(thread_checker_.CalledOnValidThread()); | 
| DCHECK(!write_data_callback_.is_null()); | 
| -  segment_.Init(this); | 
| -  segment_.set_mode(mkvmuxer::Segment::kLive); | 
| -  segment_.OutputCues(false); | 
| - | 
| -  mkvmuxer::SegmentInfo* const info = segment_.GetSegmentInfo(); | 
| -  info->set_writing_app("Chrome"); | 
| -  info->set_muxing_app("Chrome"); | 
| +  // Creation is done on a different thread than main activities. | 
| +  io_thread_checker_.DetachFromThread(); | 
| } | 
|  | 
| WebmMuxer::~WebmMuxer() { | 
| -  DCHECK(thread_checker_.CalledOnValidThread()); | 
| -  segment_.Finalize(); | 
| +  // No need to segment_.Finalize() since is not Seekable(), i.e. a live stream. | 
| } | 
|  | 
| void WebmMuxer::OnEncodedVideo(const scoped_refptr<VideoFrame>& video_frame, | 
| const base::StringPiece& encoded_data, | 
| base::TimeTicks timestamp, | 
| bool is_key_frame) { | 
| -  DCHECK(thread_checker_.CalledOnValidThread()); | 
| +  DVLOG(1) << __FUNCTION__ << " - " << encoded_data.size() << "B"; | 
| +  DCHECK(io_thread_checker_.CalledOnValidThread()); | 
| if (!track_index_) { | 
| // |track_index_|, cannot be zero (!), initialize WebmMuxer in that case. | 
| // http://www.matroska.org/technical/specs/index.html#Tracks | 
| @@ -58,7 +52,16 @@ void WebmMuxer::OnEncodedVideo(const scoped_refptr<VideoFrame>& video_frame, | 
| } | 
|  | 
| void WebmMuxer::AddVideoTrack(const gfx::Size& frame_size, double frame_rate) { | 
| -  DCHECK(thread_checker_.CalledOnValidThread()); | 
| +  DCHECK(io_thread_checker_.CalledOnValidThread()); | 
| + | 
| +  segment_.Init(this); | 
| +  segment_.set_mode(mkvmuxer::Segment::kLive); | 
| +  segment_.OutputCues(false); | 
| + | 
| +  mkvmuxer::SegmentInfo* const info = segment_.GetSegmentInfo(); | 
| +  info->set_writing_app("Chrome"); | 
| +  info->set_muxing_app("Chrome"); | 
| + | 
| DCHECK_EQ(track_index_, 0u); | 
| track_index_ = | 
| segment_.AddVideoTrack(frame_size.width(), frame_size.height(), 0); | 
| @@ -83,7 +86,7 @@ void WebmMuxer::AddVideoTrack(const gfx::Size& frame_size, double frame_rate) { | 
| } | 
|  | 
| mkvmuxer::int32 WebmMuxer::Write(const void* buf, mkvmuxer::uint32 len) { | 
| -  DCHECK(thread_checker_.CalledOnValidThread()); | 
| +  DCHECK(io_thread_checker_.CalledOnValidThread()); | 
| DCHECK(buf); | 
| write_data_callback_.Run(base::StringPiece(reinterpret_cast<const char*>(buf), | 
| len)); | 
|  |