diff options
author | qinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-14 19:53:33 +0000 |
---|---|---|
committer | qinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-14 19:53:33 +0000 |
commit | c85b35e2045652d0581dde5fed8839995c80f21a (patch) | |
tree | bccf5847e38cf384132de99e41414ac07afda825 /media | |
parent | 9a36d08c6f458ef96279632e44075f3034399cfa (diff) | |
download | chromium_src-c85b35e2045652d0581dde5fed8839995c80f21a.zip chromium_src-c85b35e2045652d0581dde5fed8839995c80f21a.tar.gz chromium_src-c85b35e2045652d0581dde5fed8839995c80f21a.tar.bz2 |
Fix a crashing test as releasing a surface texture while binding it to a MediaCodec is dangerous
internal bug 11173832
Review URL: https://codereview.chromium.org/27017005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@228512 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/base/android/media_source_player_unittest.cc | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/media/base/android/media_source_player_unittest.cc b/media/base/android/media_source_player_unittest.cc index 6072090..ad71c4b 100644 --- a/media/base/android/media_source_player_unittest.cc +++ b/media/base/android/media_source_player_unittest.cc @@ -223,8 +223,9 @@ class MediaSourcePlayerTest : public testing::Test { void CreateAndSetVideoSurface() { surface_texture_ = new gfx::SurfaceTexture(0); - surface_ = gfx::ScopedJavaSurface(surface_texture_.get()); - player_.SetVideoSurface(surface_.Pass()); + gfx::ScopedJavaSurface surface = gfx::ScopedJavaSurface( + surface_texture_.get()); + player_.SetVideoSurface(surface.Pass()); } protected: @@ -232,8 +233,11 @@ class MediaSourcePlayerTest : public testing::Test { MockMediaPlayerManager manager_; MockDemuxerAndroid* demuxer_; // Owned by |player_|. MediaSourcePlayer player_; + // We need to keep the surface texture while the decoder is actively decoding. + // Otherwise, it may trigger unexpected crashes on some devices. To switch + // surfaces, tests need to create their own surface texture without releasing + // this one if they previously called CreateAndSetVideoSurface(). scoped_refptr<gfx::SurfaceTexture> surface_texture_; - gfx::ScopedJavaSurface surface_; DISALLOW_COPY_AND_ASSIGN(MediaSourcePlayerTest); }; @@ -390,8 +394,13 @@ TEST_F(MediaSourcePlayerTest, ChangeMultipleSurfaceWhileDecoding) { // surface first. gfx::ScopedJavaSurface empty_surface; player_.SetVideoSurface(empty_surface.Pass()); - // Pass a new non-empty surface. - CreateAndSetVideoSurface(); + // Pass a new non-empty surface, don't call CreateAndSetVideoSurface() as + // it will release the old surface_texture_ and might cause unexpected + // behaviors on some devices. + scoped_refptr<gfx::SurfaceTexture> surface_texture( + new gfx::SurfaceTexture(1)); + gfx::ScopedJavaSurface surface(surface_texture.get()); + player_.SetVideoSurface(surface.Pass()); // Wait for the decoder job to finish decoding. while(GetMediaDecoderJob(false)->is_decoding()) |