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 |