summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhshi@chromium.org <hshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-16 21:48:20 +0000
committerhshi@chromium.org <hshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-16 21:48:20 +0000
commit6827829056adbb74b8a721d25656a9ea029517d7 (patch)
tree05117aad20c0002ad77661a1e7a309ba7d234b56
parent648fe375cb64288fa32e73226316941b497eb9ca (diff)
downloadchromium_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.cc8
-rw-r--r--media/cast/video_sender/external_video_encoder.h2
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_;