Bug 1436117 - Keep aImage around until the WrappedI420Buffer is released. r?dminor
MozReview-Commit-ID: GuBHFnPA3YQ
--- a/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp
+++ b/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp
@@ -46,16 +46,17 @@
#include "runnable_utils.h"
#include "srtp.h"
#include "transportflow.h"
#include "transportlayer.h"
#include "transportlayerdtls.h"
#include "transportlayerice.h"
#include "webrtc/base/bind.h"
+#include "webrtc/base/keep_ref_until_done.h"
#include "webrtc/common_types.h"
#include "webrtc/common_video/include/i420_buffer_pool.h"
#include "webrtc/common_video/include/video_frame_buffer.h"
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
// Max size given stereo is 480*2*2 = 1920 (10ms of 16-bits stereo audio at
// 48KHz)
#define AUDIO_SAMPLE_BUFFER_MAX_BYTES (480 * 2 * 2)
@@ -337,28 +338,27 @@ protected:
uint8_t* y = data->mYChannel;
uint8_t* cb = data->mCbChannel;
uint8_t* cr = data->mCrChannel;
int32_t yStride = data->mYStride;
int32_t cbCrStride = data->mCbCrStride;
uint32_t width = aImage->GetSize().width;
uint32_t height = aImage->GetSize().height;
- rtc::Callback0<void> callback_unused;
rtc::scoped_refptr<webrtc::WrappedI420Buffer> video_frame_buffer(
new rtc::RefCountedObject<webrtc::WrappedI420Buffer>(
width,
height,
y,
yStride,
cb,
cbCrStride,
cr,
cbCrStride,
- callback_unused));
+ rtc::KeepRefUntilDone(aImage)));
webrtc::VideoFrame i420_frame(video_frame_buffer,
0,
0, // not setting timestamps
webrtc::kVideoRotation_0);
CSFLogDebug(LOGTAG, "Sending an I420 video frame");
VideoFrameConverted(i420_frame);
return;