Index: talk/app/webrtc/java/src/org/webrtc/MediaCodecVideoEncoder.java |
diff --git a/talk/app/webrtc/java/src/org/webrtc/MediaCodecVideoEncoder.java b/talk/app/webrtc/java/src/org/webrtc/MediaCodecVideoEncoder.java |
index 0af2133c423b176d0facd7c8a07cc23da16b2d74..dc12dd95d365121d86d71822c2d531c771f7b087 100644 |
--- a/talk/app/webrtc/java/src/org/webrtc/MediaCodecVideoEncoder.java |
+++ b/talk/app/webrtc/java/src/org/webrtc/MediaCodecVideoEncoder.java |
@@ -96,13 +96,13 @@ public class MediaCodecVideoEncoder { |
CodecCapabilities.COLOR_QCOM_FormatYUV420SemiPlanar, |
COLOR_QCOM_FORMATYUV420PackedSemiPlanar32m |
}; |
+ private int colorFormat; |
+ // Video encoder type. |
private VideoCodecType type; |
- private int colorFormat; // Used by native code. |
- |
// SPS and PPS NALs (Config frame) for H.264. |
private ByteBuffer configData = null; |
- MediaCodecVideoEncoder() { |
+ private MediaCodecVideoEncoder() { |
instance = this; |
} |
@@ -221,14 +221,16 @@ public class MediaCodecVideoEncoder { |
} |
} |
- // Returns false if the hardware encoder currently can't be used. |
- boolean initEncode(VideoCodecType type, int width, int height, int kbps, int fps) { |
+ // Return the array of input buffers, or null on failure. |
+ private ByteBuffer[] initEncode( |
+ VideoCodecType type, int width, int height, int kbps, int fps) { |
Logging.d(TAG, "Java initEncode: " + type + " : " + width + " x " + height + |
- ". @ " + kbps + " kbps. Fps: " + fps + "."); |
- |
+ ". @ " + kbps + " kbps. Fps: " + fps + |
+ ". Color: 0x" + Integer.toHexString(colorFormat)); |
if (mediaCodecThread != null) { |
throw new RuntimeException("Forgot to release()?"); |
} |
+ this.type = type; |
EncoderProperties properties = null; |
String mime = null; |
int keyFrameIntervalSec = 0; |
@@ -244,7 +246,6 @@ public class MediaCodecVideoEncoder { |
if (properties == null) { |
throw new RuntimeException("Can not find HW encoder for " + type); |
} |
- colorFormat = properties.colorFormat; |
mediaCodecThread = Thread.currentThread(); |
try { |
MediaFormat format = MediaFormat.createVideoFormat(mime, width, height); |
@@ -255,31 +256,26 @@ public class MediaCodecVideoEncoder { |
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, keyFrameIntervalSec); |
Logging.d(TAG, " Format: " + format); |
mediaCodec = createByCodecName(properties.codecName); |
- this.type = type; |
if (mediaCodec == null) { |
Logging.e(TAG, "Can not create media encoder"); |
- return false; |
+ return null; |
} |
mediaCodec.configure( |
format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); |
- |
mediaCodec.start(); |
+ colorFormat = properties.colorFormat; |
outputBuffers = mediaCodec.getOutputBuffers(); |
- |
+ ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers(); |
+ Logging.d(TAG, "Input buffers: " + inputBuffers.length + |
+ ". Output buffers: " + outputBuffers.length); |
+ return inputBuffers; |
} catch (IllegalStateException e) { |
Logging.e(TAG, "initEncode failed", e); |
- return false; |
+ return null; |
} |
- return true; |
- } |
- |
- ByteBuffer[] getInputBuffers() { |
- ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers(); |
- Logging.d(TAG, "Input buffers: " + inputBuffers.length); |
- return inputBuffers; |
} |
- boolean encodeBuffer( |
+ private boolean encode( |
boolean isKeyframe, int inputBuffer, int size, |
long presentationTimestampUs) { |
checkOnMediaCodecThread(); |
@@ -299,12 +295,12 @@ public class MediaCodecVideoEncoder { |
return true; |
} |
catch (IllegalStateException e) { |
- Logging.e(TAG, "encodeBuffer failed", e); |
+ Logging.e(TAG, "encode failed", e); |
return false; |
} |
} |
- void release() { |
+ private void release() { |
Logging.d(TAG, "Java releaseEncoder"); |
checkOnMediaCodecThread(); |
try { |
@@ -337,7 +333,7 @@ public class MediaCodecVideoEncoder { |
// Dequeue an input buffer and return its index, -1 if no input buffer is |
// available, or -2 if the codec is no longer operative. |
- int dequeueInputBuffer() { |
+ private int dequeueInputBuffer() { |
checkOnMediaCodecThread(); |
try { |
return mediaCodec.dequeueInputBuffer(DEQUEUE_TIMEOUT); |
@@ -348,7 +344,7 @@ public class MediaCodecVideoEncoder { |
} |
// Helper struct for dequeueOutputBuffer() below. |
- static class OutputBufferInfo { |
+ private static class OutputBufferInfo { |
public OutputBufferInfo( |
int index, ByteBuffer buffer, |
boolean isKeyFrame, long presentationTimestampUs) { |
@@ -358,15 +354,15 @@ public class MediaCodecVideoEncoder { |
this.presentationTimestampUs = presentationTimestampUs; |
} |
- public final int index; |
- public final ByteBuffer buffer; |
- public final boolean isKeyFrame; |
- public final long presentationTimestampUs; |
+ private final int index; |
+ private final ByteBuffer buffer; |
+ private final boolean isKeyFrame; |
+ private final long presentationTimestampUs; |
} |
// Dequeue and return an output buffer, or null if no output is ready. Return |
// a fake OutputBufferInfo with index -1 if the codec is no longer operable. |
- OutputBufferInfo dequeueOutputBuffer() { |
+ private OutputBufferInfo dequeueOutputBuffer() { |
checkOnMediaCodecThread(); |
try { |
MediaCodec.BufferInfo info = new MediaCodec.BufferInfo(); |
@@ -435,7 +431,7 @@ public class MediaCodecVideoEncoder { |
// Release a dequeued output buffer back to the codec for re-use. Return |
// false if the codec is no longer operable. |
- boolean releaseOutputBuffer(int index) { |
+ private boolean releaseOutputBuffer(int index) { |
checkOnMediaCodecThread(); |
try { |
mediaCodec.releaseOutputBuffer(index, false); |