From c6161722ad4361ba034c327c56b650c6c3bfbc3d Mon Sep 17 00:00:00 2001 From: James Dong Date: Thu, 20 May 2010 17:55:52 -0700 Subject: [PATCH] Properly handle start code in H264/AVC encoder output - Some H264/AVC encoder output start code in each output buffer, and others don't. This patch always strips the start code first so that the sample contains the correct size. - Also properly initialize the interleave duration. Change-Id: I692043ce7e38f0215e1097aad9e847a57907b6e4 --- media/libmediaplayerservice/StagefrightRecorder.cpp | 1 + media/libstagefright/MPEG4Writer.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index de647143fe352..572389f243b91 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -701,6 +701,7 @@ status_t StagefrightRecorder::reset() { mSampleRate = 8000; mAudioChannels = 1; mAudioBitRate = 12200; + mInterleaveDurationUs = 0; mOutputFd = -1; mFlags = 0; diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 094059d4d79a9..e0f8f9e87bc9b 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -334,8 +334,6 @@ static void StripStartcode(MediaBuffer *buffer) { } off_t MPEG4Writer::addLengthPrefixedSample_l(MediaBuffer *buffer) { - StripStartcode(buffer); - off_t old_offset = mOffset; size_t length = buffer->range_length(); @@ -827,6 +825,8 @@ void MPEG4Writer::Track::threadEntry() { continue; } + if (is_avc) StripStartcode(buffer); + SampleInfo info; info.size = is_avc #if USE_NALLEN_FOUR