Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1206)

Unified Diff: webrtc/media/engine/fakewebrtcvideoengine.h

Issue 1757313002: Initialize/configure video encoders asychronously. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: merge switch blocks Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | webrtc/media/engine/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_;
};
« no previous file with comments | « no previous file | webrtc/media/engine/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698