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

Unified Diff: content/renderer/media/rtc_video_encoder.cc

Issue 1928873002: Revert to recreating RTCVideoEncoder::Impl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wuchengli@ comments. Created 4 years, 8 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 | « content/renderer/media/rtc_video_encoder.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/rtc_video_encoder.cc
diff --git a/content/renderer/media/rtc_video_encoder.cc b/content/renderer/media/rtc_video_encoder.cc
index 2a2891cc07fc3ee3591bd764498696fc1dcbfe70..eb4557446ccd96de2a16dba0b23873e15da1e1bd 100644
--- a/content/renderer/media/rtc_video_encoder.cc
+++ b/content/renderer/media/rtc_video_encoder.cc
@@ -715,15 +715,16 @@ void RTCVideoEncoder::Impl::ReturnEncodedImage(
RTCVideoEncoder::RTCVideoEncoder(
webrtc::VideoCodecType type,
media::GpuVideoAcceleratorFactories* gpu_factories)
- : gpu_factories_(gpu_factories),
- gpu_task_runner_(gpu_factories->GetTaskRunner()),
- impl_(new Impl(gpu_factories_, type)) {
+ : video_codec_type_(type),
+ gpu_factories_(gpu_factories),
+ gpu_task_runner_(gpu_factories->GetTaskRunner()) {
DVLOG(1) << "RTCVideoEncoder(): codec type=" << type;
}
RTCVideoEncoder::~RTCVideoEncoder() {
DVLOG(3) << "~RTCVideoEncoder";
Release();
+ DCHECK(!impl_.get());
}
int32_t RTCVideoEncoder::InitEncode(const webrtc::VideoCodec* codec_settings,
@@ -733,7 +734,9 @@ int32_t RTCVideoEncoder::InitEncode(const webrtc::VideoCodec* codec_settings,
<< ", width=" << codec_settings->width
<< ", height=" << codec_settings->height
<< ", startBitrate=" << codec_settings->startBitrate;
+ DCHECK(!impl_.get());
+ impl_ = new Impl(gpu_factories_, video_codec_type_);
const media::VideoCodecProfile profile = WebRTCVideoCodecToVideoCodecProfile(
impl_->video_codec_type(), codec_settings);
@@ -760,6 +763,10 @@ int32_t RTCVideoEncoder::Encode(
const webrtc::CodecSpecificInfo* codec_specific_info,
const std::vector<webrtc::FrameType>* frame_types) {
DVLOG(3) << "Encode()";
+ if (!impl_.get()) {
+ DVLOG(3) << "Encoder is not initialized";
+ return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
+ }
const bool want_key_frame = frame_types && frame_types->size() &&
frame_types->front() == webrtc::kVideoFrameKey;
@@ -783,6 +790,11 @@ int32_t RTCVideoEncoder::Encode(
int32_t RTCVideoEncoder::RegisterEncodeCompleteCallback(
webrtc::EncodedImageCallback* callback) {
DVLOG(3) << "RegisterEncodeCompleteCallback()";
+ if (!impl_.get()) {
+ DVLOG(3) << "Encoder is not initialized";
+ return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
+ }
+
base::WaitableEvent register_waiter(true, false);
int32_t register_retval = WEBRTC_VIDEO_CODEC_UNINITIALIZED;
gpu_task_runner_->PostTask(
@@ -795,12 +807,15 @@ int32_t RTCVideoEncoder::RegisterEncodeCompleteCallback(
int32_t RTCVideoEncoder::Release() {
DVLOG(3) << "Release()";
+ if (!impl_.get())
+ return WEBRTC_VIDEO_CODEC_OK;
base::WaitableEvent release_waiter(true, false);
gpu_task_runner_->PostTask(
FROM_HERE,
base::Bind(&RTCVideoEncoder::Impl::Destroy, impl_, &release_waiter));
release_waiter.Wait();
+ impl_ = NULL;
return WEBRTC_VIDEO_CODEC_OK;
}
@@ -815,6 +830,11 @@ int32_t RTCVideoEncoder::SetChannelParameters(uint32_t packet_loss,
int32_t RTCVideoEncoder::SetRates(uint32_t new_bit_rate, uint32_t frame_rate) {
DVLOG(3) << "SetRates(): new_bit_rate=" << new_bit_rate
<< ", frame_rate=" << frame_rate;
+ if (!impl_.get()) {
+ DVLOG(3) << "Encoder is not initialized";
+ return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
+ }
+
const int32_t retval = impl_->GetStatus();
if (retval != WEBRTC_VIDEO_CODEC_OK) {
DVLOG(3) << "SetRates(): returning " << retval;
« no previous file with comments | « content/renderer/media/rtc_video_encoder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698