| Index: webrtc/media/engine/fakewebrtcvideoengine.h
|
| diff --git a/webrtc/media/engine/fakewebrtcvideoengine.h b/webrtc/media/engine/fakewebrtcvideoengine.h
|
| index d93431e263a492b2251fa19cb41ef2263e7ab614..898277ff2fc54449f29ee2f1b863970d2c633d61 100644
|
| --- a/webrtc/media/engine/fakewebrtcvideoengine.h
|
| +++ b/webrtc/media/engine/fakewebrtcvideoengine.h
|
| @@ -39,13 +39,12 @@ 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 {
|
| public:
|
| - FakeWebRtcVideoDecoder()
|
| - : num_frames_received_(0) {
|
| - }
|
| + FakeWebRtcVideoDecoder() : num_frames_received_(0) {}
|
|
|
| virtual int32_t InitDecode(const webrtc::VideoCodec*, int32_t) {
|
| return WEBRTC_VIDEO_CODEC_OK;
|
| @@ -121,16 +120,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_;
|
| @@ -141,6 +144,7 @@ class FakeWebRtcVideoEncoder : public webrtc::VideoEncoder {
|
| const std::vector<webrtc::FrameType>* frame_types) {
|
| rtc::CritScope lock(&crit_);
|
| ++num_frames_encoded_;
|
| + init_encode_event_.Set();
|
| return WEBRTC_VIDEO_CODEC_OK;
|
| }
|
|
|
| @@ -166,6 +170,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_);
|
| };
|
| @@ -174,20 +179,33 @@ 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 WaitForCreatedVideoEncoders(int num_encoders) {
|
| + while (created_video_encoder_event_.Wait(kEventTimeoutMs)) {
|
| + if (GetNumCreatedEncoders() >= num_encoders)
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| virtual void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) {
|
| + rtc::CritScope lock(&crit_);
|
| encoders_.erase(
|
| std::remove(encoders_.begin(), encoders_.end(), encoder),
|
| encoders_.end());
|
| @@ -216,18 +234,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_;
|
| };
|
|
|
|
|