diff options
author | hshi@chromium.org <hshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-16 21:48:20 +0000 |
---|---|---|
committer | hshi@chromium.org <hshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-16 21:48:20 +0000 |
commit | 6827829056adbb74b8a721d25656a9ea029517d7 (patch) | |
tree | 05117aad20c0002ad77661a1e7a309ba7d234b56 | |
parent | 648fe375cb64288fa32e73226316941b497eb9ca (diff) | |
download | chromium_src-6827829056adbb74b8a721d25656a9ea029517d7.zip chromium_src-6827829056adbb74b8a721d25656a9ea029517d7.tar.gz chromium_src-6827829056adbb74b8a721d25656a9ea029517d7.tar.bz2 |
Fix a timing-sensitive crash in cast ExternalVideoEncoder::SetBitRate().
BUG=385277
TEST=daisy manual testing
R=hclam@chromium.org
Review URL: https://codereview.chromium.org/335113005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@277545 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | media/cast/video_sender/external_video_encoder.cc | 8 | ||||
-rw-r--r-- | media/cast/video_sender/external_video_encoder.h | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/media/cast/video_sender/external_video_encoder.cc b/media/cast/video_sender/external_video_encoder.cc index 5978d86..ca30bcd 100644 --- a/media/cast/video_sender/external_video_encoder.cc +++ b/media/cast/video_sender/external_video_encoder.cc @@ -406,6 +406,14 @@ bool ExternalVideoEncoder::EncodeVideoFrame( // Inform the encoder about the new target bit rate. void ExternalVideoEncoder::SetBitRate(int new_bit_rate) { + if (!encoder_active_) { + // If we receive SetBitRate() before VEA creation callback is invoked, + // cache the new bit rate in the encoder config and use the new settings + // to initialize VEA. + video_config_.start_bitrate = new_bit_rate; + return; + } + encoder_task_runner_->PostTask( FROM_HERE, base::Bind(&LocalVideoEncodeAcceleratorClient::SetBitRate, diff --git a/media/cast/video_sender/external_video_encoder.h b/media/cast/video_sender/external_video_encoder.h index ee69b96..29fe0c5 100644 --- a/media/cast/video_sender/external_video_encoder.h +++ b/media/cast/video_sender/external_video_encoder.h @@ -63,7 +63,7 @@ class ExternalVideoEncoder : public VideoEncoder { private: friend class LocalVideoEncodeAcceleratorClient; - const VideoSenderConfig video_config_; + VideoSenderConfig video_config_; scoped_refptr<CastEnvironment> cast_environment_; bool encoder_active_; |