summaryrefslogtreecommitdiffstats
path: root/chromecast
diff options
context:
space:
mode:
authorhalliwell <halliwell@chromium.org>2015-07-14 10:59:29 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-14 18:00:01 +0000
commit28a8654b432d0debeee9982dc2d69099e647fcf1 (patch)
tree706c3c0fe876d69c5284039b1846fff76172d8e8 /chromecast
parentdf391ba1d19134bb0a6e895a4a33f1af4932545d (diff)
downloadchromium_src-28a8654b432d0debeee9982dc2d69099e647fcf1.zip
chromium_src-28a8654b432d0debeee9982dc2d69099e647fcf1.tar.gz
chromium_src-28a8654b432d0debeee9982dc2d69099e647fcf1.tar.bz2
Fix VideoFrame creation crash on Cast audio devices
On audio-only devices, there are no GpuVideoAcceleratorFactories, but we must still create VideoFrames for the media pipeline. BUG=internal b/22413529 Review URL: https://codereview.chromium.org/1237623005 Cr-Commit-Position: refs/heads/master@{#338714}
Diffstat (limited to 'chromecast')
-rw-r--r--chromecast/media/cma/filters/hole_frame_factory.cc33
1 files changed, 19 insertions, 14 deletions
diff --git a/chromecast/media/cma/filters/hole_frame_factory.cc b/chromecast/media/cma/filters/hole_frame_factory.cc
index 54923cc..5cca26a 100644
--- a/chromecast/media/cma/filters/hole_frame_factory.cc
+++ b/chromecast/media/cma/filters/hole_frame_factory.cc
@@ -25,7 +25,7 @@ HoleFrameFactory::HoleFrameFactory(
use_legacy_hole_punching_(
base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableLegacyHolePunching)) {
- if (!use_legacy_hole_punching_) {
+ if (gpu_factories_ && !use_legacy_hole_punching_) {
gpu::gles2::GLES2Interface* gl = gpu_factories_->GetGLES2Interface();
CHECK(gl);
@@ -43,7 +43,7 @@ HoleFrameFactory::HoleFrameFactory(
}
HoleFrameFactory::~HoleFrameFactory() {
- if (texture_ != 0) {
+ if (texture_) {
gpu::gles2::GLES2Interface* gl = gpu_factories_->GetGLES2Interface();
gl->BindTexture(GL_TEXTURE_2D, texture_);
gl->ReleaseTexImage2DCHROMIUM(GL_TEXTURE_2D, image_id_);
@@ -61,18 +61,23 @@ scoped_refptr<::media::VideoFrame> HoleFrameFactory::CreateHoleFrame(
NOTREACHED();
}
- scoped_refptr<::media::VideoFrame> frame =
- ::media::VideoFrame::WrapNativeTexture(
- ::media::PIXEL_FORMAT_XRGB,
- gpu::MailboxHolder(mailbox_, GL_TEXTURE_2D, sync_point_),
- ::media::VideoFrame::ReleaseMailboxCB(),
- size, // coded_size
- gfx::Rect(size), // visible rect
- size, // natural size
- base::TimeDelta()); // timestamp
- frame->metadata()->SetBoolean(::media::VideoFrameMetadata::ALLOW_OVERLAY,
- true);
- return frame;
+ if (texture_) {
+ scoped_refptr<::media::VideoFrame> frame =
+ ::media::VideoFrame::WrapNativeTexture(
+ ::media::PIXEL_FORMAT_XRGB,
+ gpu::MailboxHolder(mailbox_, GL_TEXTURE_2D, sync_point_),
+ ::media::VideoFrame::ReleaseMailboxCB(),
+ size, // coded_size
+ gfx::Rect(size), // visible rect
+ size, // natural size
+ base::TimeDelta()); // timestamp
+ frame->metadata()->SetBoolean(::media::VideoFrameMetadata::ALLOW_OVERLAY,
+ true);
+ return frame;
+ } else {
+ // This case is needed for audio-only devices.
+ return ::media::VideoFrame::CreateBlackFrame(gfx::Size(1, 1));
+ }
}
} // namespace media