Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(576)

Unified Diff: webrtc/sdk/android/src/java/org/webrtc/HardwareVideoDecoder.java

Issue 2990583002: Move matrix from VideoFrame to TextureBuffer. (Closed)
Patch Set: Rebase & fix tests. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/sdk/android/src/java/org/webrtc/HardwareVideoDecoder.java
diff --git a/webrtc/sdk/android/src/java/org/webrtc/HardwareVideoDecoder.java b/webrtc/sdk/android/src/java/org/webrtc/HardwareVideoDecoder.java
index 13ccedc26d8165c7333f89fe2355a3167e8d9085..b7aae2a33865e02f66e9a84f9c1a67bb54ed049d 100644
--- a/webrtc/sdk/android/src/java/org/webrtc/HardwareVideoDecoder.java
+++ b/webrtc/sdk/android/src/java/org/webrtc/HardwareVideoDecoder.java
@@ -417,12 +417,11 @@ class HardwareVideoDecoder
@Override
public void onTextureFrameAvailable(int oesTextureId, float[] transformMatrix, long timestampNs) {
VideoFrame.TextureBuffer oesBuffer = surfaceTextureHelper.createTextureBuffer(
- renderedTextureMetadata.width, renderedTextureMetadata.height, transformMatrix);
-
- Matrix matrix = RendererCommon.convertMatrixToAndroidGraphicsMatrix(transformMatrix);
+ renderedTextureMetadata.width, renderedTextureMetadata.height,
+ RendererCommon.convertMatrixToAndroidGraphicsMatrix(transformMatrix));
VideoFrame frame = new VideoFrame(oesBuffer, renderedTextureMetadata.rotation,
- renderedTextureMetadata.presentationTimestampUs * 1000, matrix);
+ renderedTextureMetadata.presentationTimestampUs * 1000);
callback.onDecodedFrame(frame, renderedTextureMetadata.decodeTimeMs, null /* qp */);
frame.release();
}
@@ -477,7 +476,7 @@ class HardwareVideoDecoder
}
long presentationTimeNs = info.presentationTimeUs * 1000;
- VideoFrame frame = new VideoFrame(frameBuffer, rotation, presentationTimeNs, new Matrix());
+ VideoFrame frame = new VideoFrame(frameBuffer, rotation, presentationTimeNs);
// Note that qp is parsed on the C++ side.
callback.onDecodedFrame(frame, decodeTimeMs, null /* qp */);
@@ -605,9 +604,9 @@ class HardwareVideoDecoder
activeOutputBuffers++;
}
- I420BufferImpl.ReleaseCallback callback = new I420BufferImpl.ReleaseCallback() {
+ Runnable callback = new Runnable() {
@Override
- public void onRelease() {
+ public void run() {
codec.releaseOutputBuffer(outputBufferIndex, false);
synchronized (activeOutputBuffersLock) {
activeOutputBuffers--;
@@ -616,8 +615,20 @@ class HardwareVideoDecoder
}
};
+ buffer.position(yPos);
+ buffer.limit(uPos);
+ ByteBuffer dataY = buffer.slice();
+
+ buffer.position(uPos);
+ buffer.limit(vPos);
+ ByteBuffer dataU = buffer.slice();
+
+ buffer.position(vPos);
+ buffer.limit(vPos + uvStride * sliceHeight / 2);
+ ByteBuffer dataV = buffer.slice();
+
return new I420BufferImpl(
- buffer, width, height, yPos, stride, uPos, uvStride, vPos, uvStride, callback);
+ width, height, dataY, stride, dataU, uvStride, dataV, uvStride, callback);
}
private static void copyI420(ByteBuffer src, int offset, VideoFrame.I420Buffer frameBuffer,

Powered by Google App Engine
This is Rietveld 408576698