summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorqinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-14 19:53:33 +0000
committerqinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-14 19:53:33 +0000
commitc85b35e2045652d0581dde5fed8839995c80f21a (patch)
treebccf5847e38cf384132de99e41414ac07afda825 /media
parent9a36d08c6f458ef96279632e44075f3034399cfa (diff)
downloadchromium_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.cc19
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())