summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2010-08-19 20:47:30 -0700
committerJames Dong <jdong@google.com>2010-08-19 21:13:35 -0700
commit76c6e8f97cd6030454ebf60db06818e05d449f06 (patch)
tree9b0eb7866d4063722ea8b11ce0ab4859e421d739 /media/libstagefright/codecs
parent4f86a980fee1880dca61b828599fa6d76755a485 (diff)
downloadframeworks_av-76c6e8f97cd6030454ebf60db06818e05d449f06.zip
frameworks_av-76c6e8f97cd6030454ebf60db06818e05d449f06.tar.gz
frameworks_av-76c6e8f97cd6030454ebf60db06818e05d449f06.tar.bz2
Only add 4 bytes offset for the output media buffer when SPS is not received for SW AVC encoder
Change-Id: Ia64c2751b6304e5d5891416bf23ff9b8ec54d5ef
Diffstat (limited to 'media/libstagefright/codecs')
-rw-r--r--media/libstagefright/codecs/avc/enc/AVCEncoder.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp b/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp
index 389180c..52a391f 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));
-
- // Add 4 bytes for the start code 0x00000001
- uint8_t *outPtr = (uint8_t *) outputBuffer->data() + 4;
- uint32_t dataLength = outputBuffer->size() - 4;
+ uint8_t *outPtr = (uint8_t *) outputBuffer->data();
+ uint32_t dataLength = outputBuffer->size();
+
+ 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() -