Add a CTS test for replacing a surface at run time during video playback.
Fix for bug 5088614.
Change-Id: Ic22f919432579328b8bd282700b1020950e49a41
diff --git a/tests/res/layout/mediaplayer.xml b/tests/res/layout/mediaplayer.xml
index 31ef492..aa66e64 100644
--- a/tests/res/layout/mediaplayer.xml
+++ b/tests/res/layout/mediaplayer.xml
@@ -25,4 +25,16 @@
android:layout_gravity="center">
</SurfaceView>
+ <SurfaceView android:id="@+id/surface2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center">
+ </SurfaceView>
+
+ <SurfaceView android:id="@+id/surface3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center">
+ </SurfaceView>
+
</LinearLayout>
diff --git a/tests/src/android/media/cts/MediaStubActivity.java b/tests/src/android/media/cts/MediaStubActivity.java
index e10e6fa..f0ca755 100644
--- a/tests/src/android/media/cts/MediaStubActivity.java
+++ b/tests/src/android/media/cts/MediaStubActivity.java
@@ -26,6 +26,7 @@
public static final int WIDTH = 320;
public static final int HEIGHT = 240;
private SurfaceHolder mHolder;
+ private SurfaceHolder mHolder2;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -40,9 +41,28 @@
mHolder = surfaceV.getHolder();
mHolder.setFixedSize(WIDTH, HEIGHT);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+
+ SurfaceView surfaceV2 = (SurfaceView)findViewById(R.id.surface2);
+ ViewGroup.LayoutParams lp2 = surfaceV2.getLayoutParams();
+ lp2.width = WIDTH;
+ lp2.height = HEIGHT;
+ surfaceV2.setLayoutParams(lp2);
+ mHolder2 = surfaceV2.getHolder();
+ mHolder2.setFixedSize(WIDTH, HEIGHT);
+ mHolder2.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+
}
public SurfaceHolder getSurfaceHolder() {
return mHolder;
}
+
+ public SurfaceHolder getSurfaceHolder2() {
+ return mHolder2;
+ }
+
+ public SurfaceHolder generateSurfaceHolder() {
+ SurfaceView surface = (SurfaceView)findViewById(R.id.surface3);
+ return surface.getHolder();
+ }
}
diff --git a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
index d18d684..7e5b4ca 100644
--- a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
@@ -389,6 +389,37 @@
Thread.sleep(SLEEP_TIME);
}
+ // Test for reseting a surface during video playback
+ // After reseting, the video should continue playing
+ // from the time setDisplay() was called
+ mp.start();
+ Thread.sleep(SLEEP_TIME);
+
+ int posBefore = mp.getCurrentPosition();
+ mp.setDisplay(getActivity().getSurfaceHolder2());
+ int posAfter = mp.getCurrentPosition();
+
+ assertEquals(posAfter, posBefore);
+ assertTrue(mp.isPlaying());
+
+ Thread.sleep(SLEEP_TIME);
+
+ posBefore = mp.getCurrentPosition();
+ mp.setDisplay(getActivity().generateSurfaceHolder());
+ posAfter = mp.getCurrentPosition();
+
+ assertEquals(posAfter, posBefore);
+ assertTrue(mp.isPlaying());
+
+ Thread.sleep(SLEEP_TIME);
+
+ posBefore = mp.getCurrentPosition();
+ mp.setDisplay(null);
+ posAfter = mp.getCurrentPosition();
+
+ assertEquals(posAfter, posBefore);
+ assertTrue(mp.isPlaying());
+
mp.release();
}