summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSho Amano <samano@xevo.com>2017-10-05 12:58:24 +0900
committerSho Amano <samano@xevo.com>2017-10-05 12:59:06 +0900
commit4d2e7dda0d59c189f049ad21d5aef2639f0d8c8b (patch)
tree2b3918dc3c84fc33a63969b9fa258cd663ad2709
parentd6b5011432f78b2c930643d32c5864ccf06dcbeb (diff)
downloadsdl_android-4d2e7dda0d59c189f049ad21d5aef2639f0d8c8b.tar.gz
re-fix: append H264 SPS and PPS in front of every IDR NAL unit
This change is to support new IVideoStreamListener interface.
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/encoder/SdlEncoder.java25
1 files changed, 14 insertions, 11 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/encoder/SdlEncoder.java b/sdl_android/src/main/java/com/smartdevicelink/encoder/SdlEncoder.java
index 2e8bca2ce..bd1e0c364 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/encoder/SdlEncoder.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/encoder/SdlEncoder.java
@@ -176,25 +176,28 @@ public class SdlEncoder {
Log.i(TAG, "H264 codec specific data not retrieved yet.");
}
}
- // append SPS and PPS in front of every IDR NAL unit
- if ((mBufferInfo.flags & MediaCodec.BUFFER_FLAG_KEY_FRAME) != 0
- && mBufferInfo.size != 0
- && mH264CodecSpecificData != null) {
- try {
- mOutputStream.write(mH264CodecSpecificData, 0,
- mH264CodecSpecificData.length);
- } catch (Exception e) {}
- }
if (mBufferInfo.size != 0) {
ByteBuffer encoderOutputBuffer = encoderOutputBuffers[encoderStatus];
- byte[] dataToWrite = new byte[mBufferInfo.size];
+ byte[] dataToWrite = null;
+ int dataOffset = 0;
+
+ // append SPS and PPS in front of every IDR NAL unit
+ if ((mBufferInfo.flags & MediaCodec.BUFFER_FLAG_KEY_FRAME) != 0
+ && mH264CodecSpecificData != null) {
+ dataToWrite = new byte[mH264CodecSpecificData.length + mBufferInfo.size];
+ System.arraycopy(mH264CodecSpecificData, 0,
+ dataToWrite, 0, mH264CodecSpecificData.length);
+ dataOffset = mH264CodecSpecificData.length;
+ } else {
+ dataToWrite = new byte[mBufferInfo.size];
+ }
try {
encoderOutputBuffer.position(mBufferInfo.offset);
encoderOutputBuffer.limit(mBufferInfo.offset + mBufferInfo.size);
- encoderOutputBuffer.get(dataToWrite, 0, mBufferInfo.size);
+ encoderOutputBuffer.get(dataToWrite, dataOffset, mBufferInfo.size);
if (mOutputStream != null) {
mOutputStream.write(dataToWrite, 0, mBufferInfo.size);