| Index: content/renderer/pepper/pepper_media_stream_video_track_host.cc
|
| diff --git a/content/renderer/pepper/pepper_media_stream_video_track_host.cc b/content/renderer/pepper/pepper_media_stream_video_track_host.cc
|
| index 7d98e719ff59f0ab6fb49c9859911d779bc32e2b..6e6a93874bb414d6ab16a1f0b42d91ff2d8ae2ce 100644
|
| --- a/content/renderer/pepper/pepper_media_stream_video_track_host.cc
|
| +++ b/content/renderer/pepper/pepper_media_stream_video_track_host.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/rand_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "content/renderer/media/media_stream_video_track.h"
|
| +#include "media/base/bind_to_current_loop.h"
|
| #include "media/base/yuv_convert.h"
|
| #include "ppapi/c/pp_errors.h"
|
| #include "ppapi/c/ppb_media_stream_video_track.h"
|
| @@ -240,7 +241,8 @@ PepperMediaStreamVideoTrackHost::PepperMediaStreamVideoTrackHost(
|
| plugin_frame_format_(PP_VIDEOFRAME_FORMAT_UNKNOWN),
|
| frame_data_size_(0),
|
| type_(kRead),
|
| - output_started_(false) {
|
| + output_started_(false),
|
| + weak_factory_(this) {
|
| DCHECK(!track_.isNull());
|
| }
|
|
|
| @@ -255,7 +257,8 @@ PepperMediaStreamVideoTrackHost::PepperMediaStreamVideoTrackHost(
|
| plugin_frame_format_(PP_VIDEOFRAME_FORMAT_UNKNOWN),
|
| frame_data_size_(0),
|
| type_(kWrite),
|
| - output_started_(false) {
|
| + output_started_(false),
|
| + weak_factory_(this) {
|
| InitBlinkTrack();
|
| DCHECK(!track_.isNull());
|
| }
|
| @@ -312,6 +315,7 @@ void PepperMediaStreamVideoTrackHost::InitBuffers() {
|
| void PepperMediaStreamVideoTrackHost::OnClose() {
|
| if (connected_) {
|
| MediaStreamVideoSink::RemoveFromVideoTrack(this, track_);
|
| + weak_factory_.InvalidateWeakPtrs();
|
| connected_ = false;
|
| }
|
| }
|
| @@ -376,7 +380,8 @@ int32_t PepperMediaStreamVideoTrackHost::SendFrameToTrack(int32_t index) {
|
| }
|
|
|
| void PepperMediaStreamVideoTrackHost::OnVideoFrame(
|
| - const scoped_refptr<VideoFrame>& frame) {
|
| + const scoped_refptr<VideoFrame>& frame,
|
| + const media::VideoCaptureFormat& format) {
|
| DCHECK(frame);
|
| // TODO(penghuang): Check |frame->end_of_stream()| and close the track.
|
| PP_VideoFrame_Format ppformat = ToPpapiFormat(frame->format());
|
| @@ -400,18 +405,18 @@ void PepperMediaStreamVideoTrackHost::OnVideoFrame(
|
| CHECK_EQ(ppformat, source_frame_format_) << "Frame format is changed.";
|
|
|
| gfx::Size size = GetTargetSize(source_frame_size_, plugin_frame_size_);
|
| - PP_VideoFrame_Format format =
|
| + ppformat =
|
| GetTargetFormat(source_frame_format_, plugin_frame_format_);
|
| ppapi::MediaStreamBuffer::Video* buffer =
|
| &(buffer_manager()->GetBufferPointer(index)->video);
|
| buffer->header.size = buffer_manager()->buffer_size();
|
| buffer->header.type = ppapi::MediaStreamBuffer::TYPE_VIDEO;
|
| buffer->timestamp = frame->timestamp().InSecondsF();
|
| - buffer->format = format;
|
| + buffer->format = ppformat;
|
| buffer->size.width = size.width();
|
| buffer->size.height = size.height();
|
| buffer->data_size = frame_data_size_;
|
| - ConvertFromMediaVideoFrame(frame, format, size, buffer->data);
|
| + ConvertFromMediaVideoFrame(frame, ppformat, size, buffer->data);
|
|
|
| SendEnqueueBufferMessageToPlugin(index);
|
| }
|
| @@ -447,7 +452,13 @@ void PepperMediaStreamVideoTrackHost::StopSourceImpl() {
|
|
|
| void PepperMediaStreamVideoTrackHost::DidConnectPendingHostToResource() {
|
| if (!connected_) {
|
| - MediaStreamVideoSink::AddToVideoTrack(this, track_);
|
| + MediaStreamVideoSink::AddToVideoTrack(
|
| + this,
|
| + media::BindToCurrentLoop(
|
| + base::Bind(
|
| + &PepperMediaStreamVideoTrackHost::OnVideoFrame,
|
| + weak_factory_.GetWeakPtr())),
|
| + track_);
|
| connected_ = true;
|
| }
|
| }
|
|
|