| | |
| | | } |
| | | |
| | | private void draw() { |
| | | // System.out.println("YuvImageRenderer.draw 1 "); |
| | | // System1.out.println("YuvImageRenderer.draw 1 "); |
| | | long now = System.nanoTime(); |
| | | if (!seenFrame) { |
| | | // No frame received yet - nothing to render. |
| | | return; |
| | | } |
| | | // System.out.println("YuvImageRenderer.draw 2 "); |
| | | // System1.out.println("YuvImageRenderer.draw 2 "); |
| | | I420Frame frameFromQueue; |
| | | synchronized (frameToRenderQueue) { |
| | | frameFromQueue = frameToRenderQueue.peek(); |
| | |
| | | int h = (i == 0) ? frameToRender.height : frameToRender.height / 2; |
| | | GLES20.glActiveTexture(GLES20.GL_TEXTURE0 + i); |
| | | GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, yuvTextures[i]); |
| | | // System.out.println("YuvImageRenderer.draw 3 "); |
| | | // System1.out.println("YuvImageRenderer.draw 3 "); |
| | | if (frameFromQueue != null) { |
| | | GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_LUMINANCE, |
| | | w, h, 0, GLES20.GL_LUMINANCE, GLES20.GL_UNSIGNED_BYTE, |
| | |
| | | public synchronized void renderFrame(I420Frame frame) { |
| | | long now = System.nanoTime(); |
| | | framesReceived++; |
| | | // System.out.println("YuvImageRenderer.renderFrame 1 "); |
| | | // System1.out.println("YuvImageRenderer.renderFrame 1 "); |
| | | // Check input frame parameters. |
| | | if (!(frame.yuvStrides[0] == frame.width && |
| | | frame.yuvStrides[1] == frame.width / 2 && |
| | |
| | | frame.yuvStrides[1] + ", " + frame.yuvStrides[2]); |
| | | return; |
| | | } |
| | | // System.out.println("YuvImageRenderer.renderFrame 2 "); |
| | | // System1.out.println("YuvImageRenderer.renderFrame 2 "); |
| | | // Skip rendering of this frame if setSize() was not called. |
| | | if (frameToRender == null) { |
| | | framesDropped++; |
| | |
| | | throw new RuntimeException("Wrong frame size " + |
| | | frame.width + " x " + frame.height); |
| | | } |
| | | // System.out.println("YuvImageRenderer.renderFrame 3 "); |
| | | // System1.out.println("YuvImageRenderer.renderFrame 3 "); |
| | | if (frameToRenderQueue.size() > 0) { |
| | | // Skip rendering of this frame if previous frame was not rendered yet. |
| | | framesDropped++; |
| | |
| | | frameToRender.copyFrom(frame); |
| | | copyTimeNs += (System.nanoTime() - now); |
| | | frameToRenderQueue.offer(frameToRender); |
| | | // System.out.println("YuvImageRenderer.renderFrame 5 "); |
| | | // System1.out.println("YuvImageRenderer.renderFrame 5 "); |
| | | seenFrame = true; |
| | | surface.requestRender(); |
| | | } |