| Index: talk/media/webrtc/fakewebrtcvideoengine.h
|
| diff --git a/talk/media/webrtc/fakewebrtcvideoengine.h b/talk/media/webrtc/fakewebrtcvideoengine.h
|
| index e0d4db52f849b4b9e25233a4cf20751b52206419..1fee5e3957fb5529ce6b246fd308f555d892a81f 100644
|
| --- a/talk/media/webrtc/fakewebrtcvideoengine.h
|
| +++ b/talk/media/webrtc/fakewebrtcvideoengine.h
|
| @@ -56,6 +56,7 @@ static const int kMaxVideoBitrate = 1000;
|
| // renderer for a channel or it is adding a renderer for a capturer.
|
| static const int kViEChannelIdBase = 0;
|
| static const int kViEChannelIdMax = 1000;
|
| +static const int kEventTimeoutMs = 10000;
|
|
|
| // Fake class for mocking out webrtc::VideoDecoder
|
| class FakeWebRtcVideoDecoder : public webrtc::VideoDecoder {
|
| @@ -140,16 +141,20 @@ class FakeWebRtcVideoDecoderFactory : public WebRtcVideoDecoderFactory {
|
| // Fake class for mocking out webrtc::VideoEnoder
|
| class FakeWebRtcVideoEncoder : public webrtc::VideoEncoder {
|
| public:
|
| - FakeWebRtcVideoEncoder() : num_frames_encoded_(0) {}
|
| + FakeWebRtcVideoEncoder()
|
| + : init_encode_event_(false, false), num_frames_encoded_(0) {}
|
|
|
| virtual int32_t InitEncode(const webrtc::VideoCodec* codecSettings,
|
| int32_t numberOfCores,
|
| size_t maxPayloadSize) {
|
| rtc::CritScope lock(&crit_);
|
| codec_settings_ = *codecSettings;
|
| + init_encode_event_.Set();
|
| return WEBRTC_VIDEO_CODEC_OK;
|
| }
|
|
|
| + bool WaitForInitEncode() { return init_encode_event_.Wait(kEventTimeoutMs); }
|
| +
|
| webrtc::VideoCodec GetCodecSettings() {
|
| rtc::CritScope lock(&crit_);
|
| return codec_settings_;
|
| @@ -185,6 +190,7 @@ class FakeWebRtcVideoEncoder : public webrtc::VideoEncoder {
|
|
|
| private:
|
| rtc::CriticalSection crit_;
|
| + rtc::Event init_encode_event_;
|
| int num_frames_encoded_ GUARDED_BY(crit_);
|
| webrtc::VideoCodec codec_settings_ GUARDED_BY(crit_);
|
| };
|
| @@ -193,20 +199,29 @@ class FakeWebRtcVideoEncoder : public webrtc::VideoEncoder {
|
| class FakeWebRtcVideoEncoderFactory : public WebRtcVideoEncoderFactory {
|
| public:
|
| FakeWebRtcVideoEncoderFactory()
|
| - : num_created_encoders_(0), encoders_have_internal_sources_(false) {}
|
| + : created_video_encoder_event_(false, false),
|
| + num_created_encoders_(0),
|
| + encoders_have_internal_sources_(false) {}
|
|
|
| virtual webrtc::VideoEncoder* CreateVideoEncoder(
|
| webrtc::VideoCodecType type) {
|
| + rtc::CritScope lock(&crit_);
|
| if (supported_codec_types_.count(type) == 0) {
|
| return NULL;
|
| }
|
| FakeWebRtcVideoEncoder* encoder = new FakeWebRtcVideoEncoder();
|
| encoders_.push_back(encoder);
|
| num_created_encoders_++;
|
| + created_video_encoder_event_.Set();
|
| return encoder;
|
| }
|
|
|
| + bool WaitForCreatedVideoEncoder() {
|
| + return created_video_encoder_event_.Wait(kEventTimeoutMs);
|
| + }
|
| +
|
| virtual void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) {
|
| + rtc::CritScope lock(&crit_);
|
| encoders_.erase(
|
| std::remove(encoders_.begin(), encoders_.end(), encoder),
|
| encoders_.end());
|
| @@ -235,18 +250,22 @@ class FakeWebRtcVideoEncoderFactory : public WebRtcVideoEncoderFactory {
|
| }
|
|
|
| int GetNumCreatedEncoders() {
|
| + rtc::CritScope lock(&crit_);
|
| return num_created_encoders_;
|
| }
|
|
|
| - const std::vector<FakeWebRtcVideoEncoder*>& encoders() {
|
| + const std::vector<FakeWebRtcVideoEncoder*> encoders() {
|
| + rtc::CritScope lock(&crit_);
|
| return encoders_;
|
| }
|
|
|
| private:
|
| + rtc::CriticalSection crit_;
|
| + rtc::Event created_video_encoder_event_;
|
| std::set<webrtc::VideoCodecType> supported_codec_types_;
|
| std::vector<WebRtcVideoEncoderFactory::VideoCodec> codecs_;
|
| - std::vector<FakeWebRtcVideoEncoder*> encoders_;
|
| - int num_created_encoders_;
|
| + std::vector<FakeWebRtcVideoEncoder*> encoders_ GUARDED_BY(crit_);
|
| + int num_created_encoders_ GUARDED_BY(crit_);
|
| bool encoders_have_internal_sources_;
|
| };
|
|
|
|
|