From 9767dbf923dbd31d6d1a8316d72591c62490cf2f Mon Sep 17 00:00:00 2001 From: James Dong Date: Thu, 19 Aug 2010 20:47:30 -0700 Subject: [PATCH] Only add 4 bytes offset for the output media buffer when SPS is not received for SW AVC encoder Change-Id: Ia64c2751b6304e5d5891416bf23ff9b8ec54d5ef --- media/libstagefright/codecs/avc/enc/AVCEncoder.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp b/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp index 389180c82bdd9..52a391f691ff5 100644 --- a/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp +++ b/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp @@ -338,10 +338,15 @@ status_t AVCEncoder::read( MediaBuffer *outputBuffer; CHECK_EQ(OK, mGroup->acquire_buffer(&outputBuffer)); + uint8_t *outPtr = (uint8_t *) outputBuffer->data(); + uint32_t dataLength = outputBuffer->size(); - // Add 4 bytes for the start code 0x00000001 - uint8_t *outPtr = (uint8_t *) outputBuffer->data() + 4; - uint32_t dataLength = outputBuffer->size() - 4; + if (!mSpsPpsHeaderReceived && mNumInputFrames < 0) { + // 4 bytes are reserved for holding the start code 0x00000001 + // of the sequence parameter set at the beginning. + outPtr += 4; + dataLength -= 4; + } int32_t type; AVCEnc_Status encoderStatus = AVCENC_SUCCESS; @@ -358,7 +363,7 @@ status_t AVCEncoder::read( switch (type) { case AVC_NALTYPE_SPS: ++mNumInputFrames; - memcpy(outputBuffer->data(), "\x00\x00\x00\x01", 4); + memcpy((uint8_t *)outputBuffer->data(), "\x00\x00\x00\x01", 4); outputBuffer->set_range(0, dataLength + 4); outPtr += (dataLength + 4); // 4 bytes for next start code dataLength = outputBuffer->size() -