| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 package org.webrtc; | 10 package org.webrtc; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 | 103 |
| 104 // Create SurfaceTextureHelper and listener. | 104 // Create SurfaceTextureHelper and listener. |
| 105 final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.creat
e( | 105 final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.creat
e( |
| 106 "SurfaceTextureHelper test" /* threadName */, eglBase.getEglBaseContext(
)); | 106 "SurfaceTextureHelper test" /* threadName */, eglBase.getEglBaseContext(
)); |
| 107 final MockTextureListener listener = new MockTextureListener(); | 107 final MockTextureListener listener = new MockTextureListener(); |
| 108 surfaceTextureHelper.startListening(listener); | 108 surfaceTextureHelper.startListening(listener); |
| 109 surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height)
; | 109 surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height)
; |
| 110 | 110 |
| 111 // Create resources for stubbing an OES texture producer. |eglOesBase| has t
he SurfaceTexture in | 111 // Create resources for stubbing an OES texture producer. |eglOesBase| has t
he SurfaceTexture in |
| 112 // |surfaceTextureHelper| as the target EGLSurface. | 112 // |surfaceTextureHelper| as the target EGLSurface. |
| 113 final EglBase eglOesBase = | 113 final EglBase eglOesBase = EglBase.create(eglBase.getEglBaseContext(), EglBa
se.CONFIG_PLAIN); |
| 114 EglBase.create(eglBase.getEglBaseContext(), EglBase.CONFIG_PLAIN); | |
| 115 eglOesBase.createSurface(surfaceTextureHelper.getSurfaceTexture()); | 114 eglOesBase.createSurface(surfaceTextureHelper.getSurfaceTexture()); |
| 116 assertEquals(eglOesBase.surfaceWidth(), width); | 115 assertEquals(eglOesBase.surfaceWidth(), width); |
| 117 assertEquals(eglOesBase.surfaceHeight(), height); | 116 assertEquals(eglOesBase.surfaceHeight(), height); |
| 118 | 117 |
| 119 final int red[] = new int[] {79, 144, 185}; | 118 final int red[] = new int[] {79, 144, 185}; |
| 120 final int green[] = new int[] {66, 210, 162}; | 119 final int green[] = new int[] {66, 210, 162}; |
| 121 final int blue[] = new int[] {161, 117, 158}; | 120 final int blue[] = new int[] {161, 117, 158}; |
| 122 // Draw three frames. | 121 // Draw three frames. |
| 123 for (int i = 0; i < 3; ++i) { | 122 for (int i = 0; i < 3; ++i) { |
| 124 // Draw a constant color frame onto the SurfaceTexture. | 123 // Draw a constant color frame onto the SurfaceTexture. |
| 125 eglOesBase.makeCurrent(); | 124 eglOesBase.makeCurrent(); |
| 126 GLES20.glClearColor(red[i] / 255.0f, green[i] / 255.0f, blue[i] / 255.0f,
1.0f); | 125 GLES20.glClearColor(red[i] / 255.0f, green[i] / 255.0f, blue[i] / 255.0f,
1.0f); |
| 127 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); | 126 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); |
| 128 // swapBuffers() will ultimately trigger onTextureFrameAvailable(). | 127 // swapBuffers() will ultimately trigger onTextureFrameAvailable(). |
| 129 eglOesBase.swapBuffers(); | 128 eglOesBase.swapBuffers(); |
| 130 | 129 |
| 131 // Wait for an OES texture to arrive and draw it onto the pixel buffer. | 130 // Wait for an OES texture to arrive and draw it onto the pixel buffer. |
| 132 listener.waitForNewFrame(); | 131 listener.waitForNewFrame(); |
| 133 eglBase.makeCurrent(); | 132 eglBase.makeCurrent(); |
| 134 drawer.drawOes(listener.oesTextureId, listener.transformMatrix, width, hei
ght, | 133 drawer.drawOes( |
| 135 0, 0, width, height); | 134 listener.oesTextureId, listener.transformMatrix, width, height, 0, 0,
width, height); |
| 136 | 135 |
| 137 surfaceTextureHelper.returnTextureFrame(); | 136 surfaceTextureHelper.returnTextureFrame(); |
| 138 | 137 |
| 139 // Download the pixels in the pixel buffer as RGBA. Not all platforms supp
ort RGB, e.g. | 138 // Download the pixels in the pixel buffer as RGBA. Not all platforms supp
ort RGB, e.g. |
| 140 // Nexus 9. | 139 // Nexus 9. |
| 141 final ByteBuffer rgbaData = ByteBuffer.allocateDirect(width * height * 4); | 140 final ByteBuffer rgbaData = ByteBuffer.allocateDirect(width * height * 4); |
| 142 GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNE
D_BYTE, rgbaData); | 141 GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNE
D_BYTE, rgbaData); |
| 143 GlUtil.checkNoGLES2Error("glReadPixels"); | 142 GlUtil.checkNoGLES2Error("glReadPixels"); |
| 144 | 143 |
| 145 // Assert rendered image is expected constant color. | 144 // Assert rendered image is expected constant color. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 171 | 170 |
| 172 // Create SurfaceTextureHelper and listener. | 171 // Create SurfaceTextureHelper and listener. |
| 173 final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.creat
e( | 172 final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.creat
e( |
| 174 "SurfaceTextureHelper test" /* threadName */, eglBase.getEglBaseContext(
)); | 173 "SurfaceTextureHelper test" /* threadName */, eglBase.getEglBaseContext(
)); |
| 175 final MockTextureListener listener = new MockTextureListener(); | 174 final MockTextureListener listener = new MockTextureListener(); |
| 176 surfaceTextureHelper.startListening(listener); | 175 surfaceTextureHelper.startListening(listener); |
| 177 surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height)
; | 176 surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height)
; |
| 178 | 177 |
| 179 // Create resources for stubbing an OES texture producer. |eglOesBase| has t
he SurfaceTexture in | 178 // Create resources for stubbing an OES texture producer. |eglOesBase| has t
he SurfaceTexture in |
| 180 // |surfaceTextureHelper| as the target EGLSurface. | 179 // |surfaceTextureHelper| as the target EGLSurface. |
| 181 final EglBase eglOesBase = | 180 final EglBase eglOesBase = EglBase.create(eglBase.getEglBaseContext(), EglBa
se.CONFIG_PLAIN); |
| 182 EglBase.create(eglBase.getEglBaseContext(), EglBase.CONFIG_PLAIN); | |
| 183 eglOesBase.createSurface(surfaceTextureHelper.getSurfaceTexture()); | 181 eglOesBase.createSurface(surfaceTextureHelper.getSurfaceTexture()); |
| 184 assertEquals(eglOesBase.surfaceWidth(), width); | 182 assertEquals(eglOesBase.surfaceWidth(), width); |
| 185 assertEquals(eglOesBase.surfaceHeight(), height); | 183 assertEquals(eglOesBase.surfaceHeight(), height); |
| 186 | 184 |
| 187 final int red = 79; | 185 final int red = 79; |
| 188 final int green = 66; | 186 final int green = 66; |
| 189 final int blue = 161; | 187 final int blue = 161; |
| 190 // Draw a constant color frame onto the SurfaceTexture. | 188 // Draw a constant color frame onto the SurfaceTexture. |
| 191 eglOesBase.makeCurrent(); | 189 eglOesBase.makeCurrent(); |
| 192 GLES20.glClearColor(red / 255.0f, green / 255.0f, blue / 255.0f, 1.0f); | 190 GLES20.glClearColor(red / 255.0f, green / 255.0f, blue / 255.0f, 1.0f); |
| 193 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); | 191 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); |
| 194 // swapBuffers() will ultimately trigger onTextureFrameAvailable(). | 192 // swapBuffers() will ultimately trigger onTextureFrameAvailable(). |
| 195 eglOesBase.swapBuffers(); | 193 eglOesBase.swapBuffers(); |
| 196 eglOesBase.release(); | 194 eglOesBase.release(); |
| 197 | 195 |
| 198 // Wait for OES texture frame. | 196 // Wait for OES texture frame. |
| 199 listener.waitForNewFrame(); | 197 listener.waitForNewFrame(); |
| 200 // Diconnect while holding the frame. | 198 // Diconnect while holding the frame. |
| 201 surfaceTextureHelper.dispose(); | 199 surfaceTextureHelper.dispose(); |
| 202 | 200 |
| 203 // Draw the pending texture frame onto the pixel buffer. | 201 // Draw the pending texture frame onto the pixel buffer. |
| 204 eglBase.makeCurrent(); | 202 eglBase.makeCurrent(); |
| 205 final GlRectDrawer drawer = new GlRectDrawer(); | 203 final GlRectDrawer drawer = new GlRectDrawer(); |
| 206 drawer.drawOes(listener.oesTextureId, listener.transformMatrix, width, heigh
t, | 204 drawer.drawOes( |
| 207 0, 0, width, height); | 205 listener.oesTextureId, listener.transformMatrix, width, height, 0, 0, wi
dth, height); |
| 208 drawer.release(); | 206 drawer.release(); |
| 209 | 207 |
| 210 // Download the pixels in the pixel buffer as RGBA. Not all platforms suppor
t RGB, e.g. Nexus 9. | 208 // Download the pixels in the pixel buffer as RGBA. Not all platforms suppor
t RGB, e.g. Nexus 9. |
| 211 final ByteBuffer rgbaData = ByteBuffer.allocateDirect(width * height * 4); | 209 final ByteBuffer rgbaData = ByteBuffer.allocateDirect(width * height * 4); |
| 212 GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_
BYTE, rgbaData); | 210 GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_
BYTE, rgbaData); |
| 213 GlUtil.checkNoGLES2Error("glReadPixels"); | 211 GlUtil.checkNoGLES2Error("glReadPixels"); |
| 214 eglBase.release(); | 212 eglBase.release(); |
| 215 | 213 |
| 216 // Assert rendered image is expected constant color. | 214 // Assert rendered image is expected constant color. |
| 217 while (rgbaData.hasRemaining()) { | 215 while (rgbaData.hasRemaining()) { |
| 218 assertEquals(rgbaData.get() & 0xFF, red); | 216 assertEquals(rgbaData.get() & 0xFF, red); |
| 219 assertEquals(rgbaData.get() & 0xFF, green); | 217 assertEquals(rgbaData.get() & 0xFF, green); |
| 220 assertEquals(rgbaData.get() & 0xFF, blue); | 218 assertEquals(rgbaData.get() & 0xFF, blue); |
| 221 assertEquals(rgbaData.get() & 0xFF, 255); | 219 assertEquals(rgbaData.get() & 0xFF, 255); |
| 222 } | 220 } |
| 223 // Late frame return after everything has been disposed and released. | 221 // Late frame return after everything has been disposed and released. |
| 224 surfaceTextureHelper.returnTextureFrame(); | 222 surfaceTextureHelper.returnTextureFrame(); |
| 225 } | 223 } |
| 226 | 224 |
| 227 /** | 225 /** |
| 228 * Test disposing the SurfaceTextureHelper, but keep trying to produce more te
xture frames. No | 226 * Test disposing the SurfaceTextureHelper, but keep trying to produce more te
xture frames. No |
| 229 * frames should be delivered to the listener. | 227 * frames should be delivered to the listener. |
| 230 */ | 228 */ |
| 231 @MediumTest | 229 @MediumTest |
| 232 public static void testDispose() throws InterruptedException { | 230 public static void testDispose() throws InterruptedException { |
| 233 // Create SurfaceTextureHelper and listener. | 231 // Create SurfaceTextureHelper and listener. |
| 234 final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.creat
e( | 232 final SurfaceTextureHelper surfaceTextureHelper = |
| 235 "SurfaceTextureHelper test" /* threadName */, null); | 233 SurfaceTextureHelper.create("SurfaceTextureHelper test" /* threadName */
, null); |
| 236 final MockTextureListener listener = new MockTextureListener(); | 234 final MockTextureListener listener = new MockTextureListener(); |
| 237 surfaceTextureHelper.startListening(listener); | 235 surfaceTextureHelper.startListening(listener); |
| 238 // Create EglBase with the SurfaceTexture as target EGLSurface. | 236 // Create EglBase with the SurfaceTexture as target EGLSurface. |
| 239 final EglBase eglBase = EglBase.create(null, EglBase.CONFIG_PLAIN); | 237 final EglBase eglBase = EglBase.create(null, EglBase.CONFIG_PLAIN); |
| 240 eglBase.createSurface(surfaceTextureHelper.getSurfaceTexture()); | 238 eglBase.createSurface(surfaceTextureHelper.getSurfaceTexture()); |
| 241 eglBase.makeCurrent(); | 239 eglBase.makeCurrent(); |
| 242 // Assert no frame has been received yet. | 240 // Assert no frame has been received yet. |
| 243 assertFalse(listener.waitForNewFrame(1)); | 241 assertFalse(listener.waitForNewFrame(1)); |
| 244 // Draw and wait for one frame. | 242 // Draw and wait for one frame. |
| 245 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); | 243 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 260 | 258 |
| 261 eglBase.release(); | 259 eglBase.release(); |
| 262 } | 260 } |
| 263 | 261 |
| 264 /** | 262 /** |
| 265 * Test disposing the SurfaceTextureHelper immediately after is has been setup
to use a | 263 * Test disposing the SurfaceTextureHelper immediately after is has been setup
to use a |
| 266 * shared context. No frames should be delivered to the listener. | 264 * shared context. No frames should be delivered to the listener. |
| 267 */ | 265 */ |
| 268 @SmallTest | 266 @SmallTest |
| 269 public static void testDisposeImmediately() { | 267 public static void testDisposeImmediately() { |
| 270 final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.creat
e( | 268 final SurfaceTextureHelper surfaceTextureHelper = |
| 271 "SurfaceTextureHelper test" /* threadName */, null); | 269 SurfaceTextureHelper.create("SurfaceTextureHelper test" /* threadName */
, null); |
| 272 surfaceTextureHelper.dispose(); | 270 surfaceTextureHelper.dispose(); |
| 273 } | 271 } |
| 274 | 272 |
| 275 /** | 273 /** |
| 276 * Call stopListening(), but keep trying to produce more texture frames. No fr
ames should be | 274 * Call stopListening(), but keep trying to produce more texture frames. No fr
ames should be |
| 277 * delivered to the listener. | 275 * delivered to the listener. |
| 278 */ | 276 */ |
| 279 @MediumTest | 277 @MediumTest |
| 280 public static void testStopListening() throws InterruptedException { | 278 public static void testStopListening() throws InterruptedException { |
| 281 // Create SurfaceTextureHelper and listener. | 279 // Create SurfaceTextureHelper and listener. |
| 282 final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.creat
e( | 280 final SurfaceTextureHelper surfaceTextureHelper = |
| 283 "SurfaceTextureHelper test" /* threadName */, null); | 281 SurfaceTextureHelper.create("SurfaceTextureHelper test" /* threadName */
, null); |
| 284 final MockTextureListener listener = new MockTextureListener(); | 282 final MockTextureListener listener = new MockTextureListener(); |
| 285 surfaceTextureHelper.startListening(listener); | 283 surfaceTextureHelper.startListening(listener); |
| 286 // Create EglBase with the SurfaceTexture as target EGLSurface. | 284 // Create EglBase with the SurfaceTexture as target EGLSurface. |
| 287 final EglBase eglBase = EglBase.create(null, EglBase.CONFIG_PLAIN); | 285 final EglBase eglBase = EglBase.create(null, EglBase.CONFIG_PLAIN); |
| 288 eglBase.createSurface(surfaceTextureHelper.getSurfaceTexture()); | 286 eglBase.createSurface(surfaceTextureHelper.getSurfaceTexture()); |
| 289 eglBase.makeCurrent(); | 287 eglBase.makeCurrent(); |
| 290 // Assert no frame has been received yet. | 288 // Assert no frame has been received yet. |
| 291 assertFalse(listener.waitForNewFrame(1)); | 289 assertFalse(listener.waitForNewFrame(1)); |
| 292 // Draw and wait for one frame. | 290 // Draw and wait for one frame. |
| 293 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); | 291 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 308 | 306 |
| 309 surfaceTextureHelper.dispose(); | 307 surfaceTextureHelper.dispose(); |
| 310 eglBase.release(); | 308 eglBase.release(); |
| 311 } | 309 } |
| 312 | 310 |
| 313 /** | 311 /** |
| 314 * Test stopListening() immediately after the SurfaceTextureHelper has been se
tup. | 312 * Test stopListening() immediately after the SurfaceTextureHelper has been se
tup. |
| 315 */ | 313 */ |
| 316 @SmallTest | 314 @SmallTest |
| 317 public static void testStopListeningImmediately() throws InterruptedException
{ | 315 public static void testStopListeningImmediately() throws InterruptedException
{ |
| 318 final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.creat
e( | 316 final SurfaceTextureHelper surfaceTextureHelper = |
| 319 "SurfaceTextureHelper test" /* threadName */, null); | 317 SurfaceTextureHelper.create("SurfaceTextureHelper test" /* threadName */
, null); |
| 320 final MockTextureListener listener = new MockTextureListener(); | 318 final MockTextureListener listener = new MockTextureListener(); |
| 321 surfaceTextureHelper.startListening(listener); | 319 surfaceTextureHelper.startListening(listener); |
| 322 surfaceTextureHelper.stopListening(); | 320 surfaceTextureHelper.stopListening(); |
| 323 surfaceTextureHelper.dispose(); | 321 surfaceTextureHelper.dispose(); |
| 324 } | 322 } |
| 325 | 323 |
| 326 /** | 324 /** |
| 327 * Test stopListening() immediately after the SurfaceTextureHelper has been se
tup on the handler | 325 * Test stopListening() immediately after the SurfaceTextureHelper has been se
tup on the handler |
| 328 * thread. | 326 * thread. |
| 329 */ | 327 */ |
| 330 @SmallTest | 328 @SmallTest |
| 331 public static void testStopListeningImmediatelyOnHandlerThread() throws Interr
uptedException { | 329 public static void testStopListeningImmediatelyOnHandlerThread() throws Interr
uptedException { |
| 332 final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.creat
e( | 330 final SurfaceTextureHelper surfaceTextureHelper = |
| 333 "SurfaceTextureHelper test" /* threadName */, null); | 331 SurfaceTextureHelper.create("SurfaceTextureHelper test" /* threadName */
, null); |
| 334 final MockTextureListener listener = new MockTextureListener(); | 332 final MockTextureListener listener = new MockTextureListener(); |
| 335 | 333 |
| 336 final CountDownLatch stopListeningBarrier = new CountDownLatch(1); | 334 final CountDownLatch stopListeningBarrier = new CountDownLatch(1); |
| 337 final CountDownLatch stopListeningBarrierDone = new CountDownLatch(1); | 335 final CountDownLatch stopListeningBarrierDone = new CountDownLatch(1); |
| 338 // Start by posting to the handler thread to keep it occupied. | 336 // Start by posting to the handler thread to keep it occupied. |
| 339 surfaceTextureHelper.getHandler().post(new Runnable() { | 337 surfaceTextureHelper.getHandler().post(new Runnable() { |
| 340 @Override | 338 @Override |
| 341 public void run() { | 339 public void run() { |
| 342 ThreadUtils.awaitUninterruptibly(stopListeningBarrier); | 340 ThreadUtils.awaitUninterruptibly(stopListeningBarrier); |
| 343 surfaceTextureHelper.stopListening(); | 341 surfaceTextureHelper.stopListening(); |
| 344 stopListeningBarrierDone.countDown(); | 342 stopListeningBarrierDone.countDown(); |
| 345 } | 343 } |
| 346 }); | 344 }); |
| 347 | 345 |
| 348 // startListening() is asynchronous and will post to the occupied handler th
read. | 346 // startListening() is asynchronous and will post to the occupied handler th
read. |
| 349 surfaceTextureHelper.startListening(listener); | 347 surfaceTextureHelper.startListening(listener); |
| 350 // Wait for stopListening() to be called on the handler thread. | 348 // Wait for stopListening() to be called on the handler thread. |
| 351 stopListeningBarrier.countDown(); | 349 stopListeningBarrier.countDown(); |
| 352 stopListeningBarrierDone.await(); | 350 stopListeningBarrierDone.await(); |
| 353 // Wait until handler thread is idle to try to catch late startListening() c
all. | 351 // Wait until handler thread is idle to try to catch late startListening() c
all. |
| 354 final CountDownLatch barrier = new CountDownLatch(1); | 352 final CountDownLatch barrier = new CountDownLatch(1); |
| 355 surfaceTextureHelper.getHandler().post(new Runnable() { | 353 surfaceTextureHelper.getHandler().post(new Runnable() { |
| 356 @Override public void run() { | 354 @Override |
| 355 public void run() { |
| 357 barrier.countDown(); | 356 barrier.countDown(); |
| 358 } | 357 } |
| 359 }); | 358 }); |
| 360 ThreadUtils.awaitUninterruptibly(barrier); | 359 ThreadUtils.awaitUninterruptibly(barrier); |
| 361 // Previous startListening() call should never have taken place and it shoul
d be ok to call it | 360 // Previous startListening() call should never have taken place and it shoul
d be ok to call it |
| 362 // again. | 361 // again. |
| 363 surfaceTextureHelper.startListening(listener); | 362 surfaceTextureHelper.startListening(listener); |
| 364 | 363 |
| 365 surfaceTextureHelper.dispose(); | 364 surfaceTextureHelper.dispose(); |
| 366 } | 365 } |
| 367 | 366 |
| 368 /** | 367 /** |
| 369 * Test calling startListening() with a new listener after stopListening() has
been called. | 368 * Test calling startListening() with a new listener after stopListening() has
been called. |
| 370 */ | 369 */ |
| 371 @MediumTest | 370 @MediumTest |
| 372 public static void testRestartListeningWithNewListener() throws InterruptedExc
eption { | 371 public static void testRestartListeningWithNewListener() throws InterruptedExc
eption { |
| 373 // Create SurfaceTextureHelper and listener. | 372 // Create SurfaceTextureHelper and listener. |
| 374 final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.creat
e( | 373 final SurfaceTextureHelper surfaceTextureHelper = |
| 375 "SurfaceTextureHelper test" /* threadName */, null); | 374 SurfaceTextureHelper.create("SurfaceTextureHelper test" /* threadName */
, null); |
| 376 final MockTextureListener listener1 = new MockTextureListener(); | 375 final MockTextureListener listener1 = new MockTextureListener(); |
| 377 surfaceTextureHelper.startListening(listener1); | 376 surfaceTextureHelper.startListening(listener1); |
| 378 // Create EglBase with the SurfaceTexture as target EGLSurface. | 377 // Create EglBase with the SurfaceTexture as target EGLSurface. |
| 379 final EglBase eglBase = EglBase.create(null, EglBase.CONFIG_PLAIN); | 378 final EglBase eglBase = EglBase.create(null, EglBase.CONFIG_PLAIN); |
| 380 eglBase.createSurface(surfaceTextureHelper.getSurfaceTexture()); | 379 eglBase.createSurface(surfaceTextureHelper.getSurfaceTexture()); |
| 381 eglBase.makeCurrent(); | 380 eglBase.makeCurrent(); |
| 382 // Assert no frame has been received yet. | 381 // Assert no frame has been received yet. |
| 383 assertFalse(listener1.waitForNewFrame(1)); | 382 assertFalse(listener1.waitForNewFrame(1)); |
| 384 // Draw and wait for one frame. | 383 // Draw and wait for one frame. |
| 385 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); | 384 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 // 0 YYYYYYYY YYYYYYYY | 459 // 0 YYYYYYYY YYYYYYYY |
| 461 // 16 YYYYYYYY YYYYYYYY | 460 // 16 YYYYYYYY YYYYYYYY |
| 462 // ... | 461 // ... |
| 463 // 240 YYYYYYYY YYYYYYYY | 462 // 240 YYYYYYYY YYYYYYYY |
| 464 // 256 UUUUUUUU VVVVVVVV | 463 // 256 UUUUUUUU VVVVVVVV |
| 465 // 272 UUUUUUUU VVVVVVVV | 464 // 272 UUUUUUUU VVVVVVVV |
| 466 // ... | 465 // ... |
| 467 // 368 UUUUUUUU VVVVVVVV | 466 // 368 UUUUUUUU VVVVVVVV |
| 468 // 384 buffer end | 467 // 384 buffer end |
| 469 ByteBuffer buffer = ByteBuffer.allocateDirect(width * height * 3 / 2); | 468 ByteBuffer buffer = ByteBuffer.allocateDirect(width * height * 3 / 2); |
| 470 surfaceTextureHelper.textureToYUV(buffer, width, height, width, | 469 surfaceTextureHelper.textureToYUV( |
| 471 listener.oesTextureId, listener.transformMatrix); | 470 buffer, width, height, width, listener.oesTextureId, listener.transfor
mMatrix); |
| 472 | 471 |
| 473 surfaceTextureHelper.returnTextureFrame(); | 472 surfaceTextureHelper.returnTextureFrame(); |
| 474 | 473 |
| 475 // Allow off-by-one differences due to different rounding. | 474 // Allow off-by-one differences due to different rounding. |
| 476 while (buffer.position() < width*height) { | 475 while (buffer.position() < width * height) { |
| 477 assertClose(1, buffer.get() & 0xff, ref_y[i]); | 476 assertClose(1, buffer.get() & 0xff, ref_y[i]); |
| 478 } | 477 } |
| 479 while (buffer.hasRemaining()) { | 478 while (buffer.hasRemaining()) { |
| 480 if (buffer.position() % width < width/2) | 479 if (buffer.position() % width < width / 2) |
| 481 assertClose(1, buffer.get() & 0xff, ref_u[i]); | 480 assertClose(1, buffer.get() & 0xff, ref_u[i]); |
| 482 else | 481 else |
| 483 assertClose(1, buffer.get() & 0xff, ref_v[i]); | 482 assertClose(1, buffer.get() & 0xff, ref_v[i]); |
| 484 } | 483 } |
| 485 } | 484 } |
| 486 | 485 |
| 487 surfaceTextureHelper.dispose(); | 486 surfaceTextureHelper.dispose(); |
| 488 eglBase.release(); | 487 eglBase.release(); |
| 489 } | 488 } |
| 490 } | 489 } |
| OLD | NEW |