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

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

Issue 1600973002: Initialize VideoEncoder objects asynchronously. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rename new_codec_settings Created 4 years, 11 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 | « talk/media/webrtc/fakewebrtccall.cc ('k') | talk/media/webrtc/webrtcvideoengine2.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_;
};
« no previous file with comments | « talk/media/webrtc/fakewebrtccall.cc ('k') | talk/media/webrtc/webrtcvideoengine2.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698