summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/media/stagefright/MPEG2TSWriter.h5
-rw-r--r--include/media/stagefright/MPEG4Writer.h2
-rwxr-xr-xlibvideoeditor/vss/stagefrightshells/src/VideoEditorBuffer.c6
-rw-r--r--media/libstagefright/MPEG2TSWriter.cpp100
-rwxr-xr-xmedia/libstagefright/MPEG4Writer.cpp21
-rw-r--r--media/libstagefright/MediaCodec.cpp3
-rw-r--r--media/libstagefright/codecs/aacenc/Android.mk2
-rw-r--r--media/libstagefright/codecs/aacenc/SampleCode/Android.mk2
-rw-r--r--media/libstagefright/codecs/amrnb/dec/src/post_pro.cpp2
-rw-r--r--media/libstagefright/codecs/amrnb/enc/src/g_pitch.cpp3
-rw-r--r--media/libstagefright/codecs/amrwbenc/Android.mk2
-rw-r--r--media/libstagefright/codecs/amrwbenc/SampleCode/Android.mk2
-rw-r--r--media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s6
-rw-r--r--media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s6
-rw-r--r--media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s6
-rw-r--r--media/libstagefright/codecs/avc/common/include/avcapi_common.h8
-rw-r--r--media/libstagefright/codecs/avc/common/src/dpb.cpp8
-rw-r--r--media/libstagefright/codecs/avc/enc/Android.mk1
-rw-r--r--media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp11
-rw-r--r--media/libstagefright/codecs/avc/enc/src/avcenc_api.cpp40
-rw-r--r--media/libstagefright/codecs/avc/enc/src/bitstream_io.cpp8
-rw-r--r--media/libstagefright/codecs/avc/enc/src/motion_est.cpp2
-rw-r--r--media/libstagefright/codecs/avc/enc/src/rate_control.cpp10
-rw-r--r--media/libstagefright/codecs/avc/enc/src/sad_halfpel_inline.h5
-rw-r--r--media/libstagefright/codecs/avc/enc/src/sad_inline.h5
-rw-r--r--media/libstagefright/codecs/avc/enc/src/sad_mb_offset.h9
-rw-r--r--media/libstagefright/codecs/common/Android.mk2
-rw-r--r--media/libstagefright/codecs/common/Config.mk2
-rw-r--r--media/libstagefright/codecs/common/include/voType.h24
-rw-r--r--media/libstagefright/codecs/mp3dec/src/asm/pvmp3_dct_16_gcc.s6
-rw-r--r--media/libstagefright/codecs/mp3dec/src/asm/pvmp3_mdct_18_gcc.s4
-rw-r--r--media/libstagefright/codecs/mp3dec/src/asm/pvmp3_polyphase_filter_window_gcc.s6
-rw-r--r--media/libstagefright/id3/ID3.cpp3
-rw-r--r--services/audioflinger/AudioMixer.cpp6
-rw-r--r--services/camera/libcameraservice/CameraService.cpp2
35 files changed, 198 insertions, 132 deletions
diff --git a/include/media/stagefright/MPEG2TSWriter.h b/include/media/stagefright/MPEG2TSWriter.h
index a7c9ecf..2e2922e 100644
--- a/include/media/stagefright/MPEG2TSWriter.h
+++ b/include/media/stagefright/MPEG2TSWriter.h
@@ -69,6 +69,9 @@ private:
int64_t mNumTSPacketsWritten;
int64_t mNumTSPacketsBeforeMeta;
+ int mPATContinuityCounter;
+ int mPMTContinuityCounter;
+ uint32_t mCrcTable[256];
void init();
@@ -76,6 +79,8 @@ private:
void writeProgramAssociationTable();
void writeProgramMap();
void writeAccessUnit(int32_t sourceIndex, const sp<ABuffer> &buffer);
+ void initCrcTable();
+ uint32_t crc32(const uint8_t *start, size_t length);
ssize_t internalWrite(const void *data, size_t size);
status_t reset();
diff --git a/include/media/stagefright/MPEG4Writer.h b/include/media/stagefright/MPEG4Writer.h
index cd4e129..3596b38 100644
--- a/include/media/stagefright/MPEG4Writer.h
+++ b/include/media/stagefright/MPEG4Writer.h
@@ -186,6 +186,8 @@ private:
void release();
status_t reset();
+ static uint32_t getMpeg4Time();
+
MPEG4Writer(const MPEG4Writer &);
MPEG4Writer &operator=(const MPEG4Writer &);
};
diff --git a/libvideoeditor/vss/stagefrightshells/src/VideoEditorBuffer.c b/libvideoeditor/vss/stagefrightshells/src/VideoEditorBuffer.c
index 98919d2..f4cfa7c 100755
--- a/libvideoeditor/vss/stagefrightshells/src/VideoEditorBuffer.c
+++ b/libvideoeditor/vss/stagefrightshells/src/VideoEditorBuffer.c
@@ -53,6 +53,7 @@ M4OSA_ERR VIDEOEDITOR_BUFFER_allocatePool(VIDEOEDITOR_BUFFER_Pool** ppool,
{
M4OSA_ERR lerr = M4NO_ERROR;
VIDEOEDITOR_BUFFER_Pool* pool;
+ M4OSA_UInt32 index;
ALOGV("VIDEOEDITOR_BUFFER_allocatePool : ppool = 0x%x nbBuffers = %d ",
ppool, nbBuffers);
@@ -79,6 +80,11 @@ M4OSA_ERR VIDEOEDITOR_BUFFER_allocatePool(VIDEOEDITOR_BUFFER_Pool** ppool,
goto VIDEOEDITOR_BUFFER_allocatePool_Cleanup;
}
+ for (index = 0; index < nbBuffers; index++)
+ {
+ pool->pNXPBuffer[index].pData = M4OSA_NULL;
+ }
+
ALOGV("VIDEOEDITOR_BUFFER_allocatePool : Allocating Pool name buffer");
pool->poolName = M4OSA_NULL;
pool->poolName = (M4OSA_Char*)M4OSA_32bitAlignedMalloc(
diff --git a/media/libstagefright/MPEG2TSWriter.cpp b/media/libstagefright/MPEG2TSWriter.cpp
index f702376..217c17a 100644
--- a/media/libstagefright/MPEG2TSWriter.cpp
+++ b/media/libstagefright/MPEG2TSWriter.cpp
@@ -28,6 +28,7 @@
#include <media/stagefright/MediaSource.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/Utils.h>
+#include <arpa/inet.h>
#include "include/ESDS.h"
@@ -471,7 +472,9 @@ MPEG2TSWriter::MPEG2TSWriter(int fd)
mStarted(false),
mNumSourcesDone(0),
mNumTSPacketsWritten(0),
- mNumTSPacketsBeforeMeta(0) {
+ mNumTSPacketsBeforeMeta(0),
+ mPATContinuityCounter(0),
+ mPMTContinuityCounter(0) {
init();
}
@@ -482,7 +485,9 @@ MPEG2TSWriter::MPEG2TSWriter(const char *filename)
mStarted(false),
mNumSourcesDone(0),
mNumTSPacketsWritten(0),
- mNumTSPacketsBeforeMeta(0) {
+ mNumTSPacketsBeforeMeta(0),
+ mPATContinuityCounter(0),
+ mPMTContinuityCounter(0) {
init();
}
@@ -495,13 +500,17 @@ MPEG2TSWriter::MPEG2TSWriter(
mStarted(false),
mNumSourcesDone(0),
mNumTSPacketsWritten(0),
- mNumTSPacketsBeforeMeta(0) {
+ mNumTSPacketsBeforeMeta(0),
+ mPATContinuityCounter(0),
+ mPMTContinuityCounter(0) {
init();
}
void MPEG2TSWriter::init() {
CHECK(mFile != NULL || mWriteFunc != NULL);
+ initCrcTable();
+
mLooper = new ALooper;
mLooper->setName("MPEG2TSWriter");
@@ -729,11 +738,16 @@ void MPEG2TSWriter::writeProgramAssociationTable() {
};
sp<ABuffer> buffer = new ABuffer(188);
- memset(buffer->data(), 0, buffer->size());
+ memset(buffer->data(), 0xff, buffer->size());
memcpy(buffer->data(), kData, sizeof(kData));
- static const unsigned kContinuityCounter = 5;
- buffer->data()[3] |= kContinuityCounter;
+ if (++mPATContinuityCounter == 16) {
+ mPATContinuityCounter = 0;
+ }
+ buffer->data()[3] |= mPATContinuityCounter;
+
+ uint32_t crc = htonl(crc32(&buffer->data()[5], 12));
+ memcpy(&buffer->data()[17], &crc, sizeof(crc));
CHECK_EQ(internalWrite(buffer->data(), buffer->size()), buffer->size());
}
@@ -781,11 +795,13 @@ void MPEG2TSWriter::writeProgramMap() {
};
sp<ABuffer> buffer = new ABuffer(188);
- memset(buffer->data(), 0, buffer->size());
+ memset(buffer->data(), 0xff, buffer->size());
memcpy(buffer->data(), kData, sizeof(kData));
- static const unsigned kContinuityCounter = 5;
- buffer->data()[3] |= kContinuityCounter;
+ if (++mPMTContinuityCounter == 16) {
+ mPMTContinuityCounter = 0;
+ }
+ buffer->data()[3] |= mPMTContinuityCounter;
size_t section_length = 5 * mSources.size() + 4 + 9;
buffer->data()[6] |= section_length >> 8;
@@ -806,10 +822,8 @@ void MPEG2TSWriter::writeProgramMap() {
*ptr++ = 0x00;
}
- *ptr++ = 0x00;
- *ptr++ = 0x00;
- *ptr++ = 0x00;
- *ptr++ = 0x00;
+ uint32_t crc = htonl(crc32(&buffer->data()[5], 12+mSources.size()*5));
+ memcpy(&buffer->data()[17+mSources.size()*5], &crc, sizeof(crc));
CHECK_EQ(internalWrite(buffer->data(), buffer->size()), buffer->size());
}
@@ -822,7 +836,7 @@ void MPEG2TSWriter::writeAccessUnit(
// transport_priority = b0
// PID = b0 0001 1110 ???? (13 bits) [0x1e0 + 1 + sourceIndex]
// transport_scrambling_control = b00
- // adaptation_field_control = b01 (no adaptation field, payload only)
+ // adaptation_field_control = b??
// continuity_counter = b????
// -- payload follows
// packet_startcode_prefix = 0x000001
@@ -852,7 +866,7 @@ void MPEG2TSWriter::writeAccessUnit(
// the first fragment of "buffer" follows
sp<ABuffer> buffer = new ABuffer(188);
- memset(buffer->data(), 0, buffer->size());
+ memset(buffer->data(), 0xff, buffer->size());
const unsigned PID = 0x1e0 + sourceIndex + 1;
@@ -870,6 +884,7 @@ void MPEG2TSWriter::writeAccessUnit(
uint32_t PTS = (timeUs * 9ll) / 100ll;
size_t PES_packet_length = accessUnit->size() + 8;
+ bool padding = (accessUnit->size() < (188 - 18));
if (PES_packet_length >= 65536) {
// This really should only happen for video.
@@ -883,7 +898,15 @@ void MPEG2TSWriter::writeAccessUnit(
*ptr++ = 0x47;
*ptr++ = 0x40 | (PID >> 8);
*ptr++ = PID & 0xff;
- *ptr++ = 0x10 | continuity_counter;
+ *ptr++ = (padding ? 0x30 : 0x10) | continuity_counter;
+ if (padding) {
+ int paddingSize = 188 - accessUnit->size() - 18;
+ *ptr++ = paddingSize - 1;
+ if (paddingSize >= 2) {
+ *ptr++ = 0x00;
+ ptr += paddingSize - 2;
+ }
+ }
*ptr++ = 0x00;
*ptr++ = 0x00;
*ptr++ = 0x01;
@@ -911,6 +934,7 @@ void MPEG2TSWriter::writeAccessUnit(
size_t offset = copy;
while (offset < accessUnit->size()) {
+ bool lastAccessUnit = ((accessUnit->size() - offset) < 183);
// for subsequent fragments of "buffer":
// 0x47
// transport_error_indicator = b0
@@ -918,11 +942,11 @@ void MPEG2TSWriter::writeAccessUnit(
// transport_priority = b0
// PID = b0 0001 1110 ???? (13 bits) [0x1e0 + 1 + sourceIndex]
// transport_scrambling_control = b00
- // adaptation_field_control = b01 (no adaptation field, payload only)
+ // adaptation_field_control = b??
// continuity_counter = b????
// the fragment of "buffer" follows.
- memset(buffer->data(), 0, buffer->size());
+ memset(buffer->data(), 0xff, buffer->size());
const unsigned continuity_counter =
mSources.editItemAt(sourceIndex)->incrementContinuityCounter();
@@ -931,7 +955,18 @@ void MPEG2TSWriter::writeAccessUnit(
*ptr++ = 0x47;
*ptr++ = 0x00 | (PID >> 8);
*ptr++ = PID & 0xff;
- *ptr++ = 0x10 | continuity_counter;
+ *ptr++ = (lastAccessUnit ? 0x30 : 0x10) | continuity_counter;
+
+ if (lastAccessUnit) {
+ // Pad packet using an adaptation field
+ // Adaptation header all to 0 execpt size
+ uint8_t paddingSize = (uint8_t)184 - (accessUnit->size() - offset);
+ *ptr++ = paddingSize - 1;
+ if (paddingSize >= 2) {
+ *ptr++ = 0x00;
+ ptr += paddingSize - 2;
+ }
+ }
size_t sizeLeft = buffer->data() + buffer->size() - ptr;
size_t copy = accessUnit->size() - offset;
@@ -956,6 +991,33 @@ void MPEG2TSWriter::writeTS() {
}
}
+void MPEG2TSWriter::initCrcTable() {
+ uint32_t poly = 0x04C11DB7;
+
+ for (int i = 0; i < 256; i++) {
+ uint32_t crc = i << 24;
+ for (int j = 0; j < 8; j++) {
+ crc = (crc << 1) ^ ((crc & 0x80000000) ? (poly) : 0);
+ }
+ mCrcTable[i] = crc;
+ }
+}
+
+/**
+ * Compute CRC32 checksum for buffer starting at offset start and for length
+ * bytes.
+ */
+uint32_t MPEG2TSWriter::crc32(const uint8_t *p_start, size_t length) {
+ uint32_t crc = 0xFFFFFFFF;
+ const uint8_t *p;
+
+ for (p = p_start; p < p_start + length; p++) {
+ crc = (crc << 8) ^ mCrcTable[((crc >> 24) ^ *p) & 0xFF];
+ }
+
+ return crc;
+}
+
ssize_t MPEG2TSWriter::internalWrite(const void *data, size_t size) {
if (mFile != NULL) {
return fwrite(data, 1, size, mFile);
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp
index 755b502..6108298 100755
--- a/media/libstagefright/MPEG4Writer.cpp
+++ b/media/libstagefright/MPEG4Writer.cpp
@@ -236,11 +236,11 @@ private:
void writeDrefBox();
void writeDinfBox();
void writeDamrBox();
- void writeMdhdBox(time_t now);
+ void writeMdhdBox(uint32_t now);
void writeSmhdBox();
void writeVmhdBox();
void writeHdlrBox();
- void writeTkhdBox(time_t now);
+ void writeTkhdBox(uint32_t now);
void writeMp4aEsdsBox();
void writeMp4vEsdsBox();
void writeAudioFourCCBox();
@@ -723,8 +723,17 @@ status_t MPEG4Writer::reset() {
return err;
}
-void MPEG4Writer::writeMvhdBox(int64_t durationUs) {
+uint32_t MPEG4Writer::getMpeg4Time() {
time_t now = time(NULL);
+ // MP4 file uses time counting seconds since midnight, Jan. 1, 1904
+ // while time function returns Unix epoch values which starts
+ // at 1970-01-01. Lets add the number of seconds between them
+ uint32_t mpeg4Time = now + (66 * 365 + 17) * (24 * 60 * 60);
+ return mpeg4Time;
+}
+
+void MPEG4Writer::writeMvhdBox(int64_t durationUs) {
+ uint32_t now = getMpeg4Time();
beginBox("mvhd");
writeInt32(0); // version=0, flags=0
writeInt32(now); // creation time
@@ -2357,7 +2366,7 @@ void MPEG4Writer::Track::writeTrackHeader(bool use32BitOffset) {
ALOGV("%s track time scale: %d",
mIsAudio? "Audio": "Video", mTimeScale);
- time_t now = time(NULL);
+ uint32_t now = getMpeg4Time();
mOwner->beginBox("trak");
writeTkhdBox(now);
mOwner->beginBox("mdia");
@@ -2570,7 +2579,7 @@ void MPEG4Writer::Track::writeMp4vEsdsBox() {
mOwner->endBox(); // esds
}
-void MPEG4Writer::Track::writeTkhdBox(time_t now) {
+void MPEG4Writer::Track::writeTkhdBox(uint32_t now) {
mOwner->beginBox("tkhd");
// Flags = 7 to indicate that the track is enabled, and
// part of the presentation
@@ -2639,7 +2648,7 @@ void MPEG4Writer::Track::writeHdlrBox() {
mOwner->endBox();
}
-void MPEG4Writer::Track::writeMdhdBox(time_t now) {
+void MPEG4Writer::Track::writeMdhdBox(uint32_t now) {
int64_t trakDurationUs = getDurationUs();
mOwner->beginBox("mdhd");
mOwner->writeInt32(0); // version=0, flags=0
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp
index ff71170..d28322f 100644
--- a/media/libstagefright/MediaCodec.cpp
+++ b/media/libstagefright/MediaCodec.cpp
@@ -1118,7 +1118,8 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
CHECK(msg->senderAwaitsResponse(&replyID));
if ((mState != STARTED && mState != FLUSHING)
- || (mFlags & kFlagStickyError)) {
+ || (mFlags & kFlagStickyError)
+ || mOutputFormat == NULL) {
sp<AMessage> response = new AMessage;
response->setInt32("err", INVALID_OPERATION);
diff --git a/media/libstagefright/codecs/aacenc/Android.mk b/media/libstagefright/codecs/aacenc/Android.mk
index 1c342c8..820734d 100644
--- a/media/libstagefright/codecs/aacenc/Android.mk
+++ b/media/libstagefright/codecs/aacenc/Android.mk
@@ -71,8 +71,6 @@ LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/inc \
$(LOCAL_PATH)/basic_op
-LOCAL_CFLAGS := $(VO_CFLAGS)
-
ifeq ($(VOTT), v5)
LOCAL_CFLAGS += -DARMV5E -DARM_INASM -DARMV5_INASM
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/asm/ARMV5E
diff --git a/media/libstagefright/codecs/aacenc/SampleCode/Android.mk b/media/libstagefright/codecs/aacenc/SampleCode/Android.mk
index ba3f4d2..01016e7 100644
--- a/media/libstagefright/codecs/aacenc/SampleCode/Android.mk
+++ b/media/libstagefright/codecs/aacenc/SampleCode/Android.mk
@@ -5,8 +5,6 @@ LOCAL_SRC_FILES := \
AAC_E_SAMPLES.c \
../../common/cmnMemory.c
-LOCAL_CFLAGS += $(VO_CFLAGS)
-
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE := AACEncTest
diff --git a/media/libstagefright/codecs/amrnb/dec/src/post_pro.cpp b/media/libstagefright/codecs/amrnb/dec/src/post_pro.cpp
index ce31793..8201e54 100644
--- a/media/libstagefright/codecs/amrnb/dec/src/post_pro.cpp
+++ b/media/libstagefright/codecs/amrnb/dec/src/post_pro.cpp
@@ -376,7 +376,7 @@ void Post_Process(
L_tmp += ((Word32) st->x0) * c_b0;
L_tmp += ((Word32) st->x1) * c_b1;
L_tmp += ((Word32) x2) * c_b2;
- L_tmp <<= 3;
+ L_tmp = L_shl(L_tmp, 3, pOverflow);
/* Multiplication by two of output speech with saturation. */
diff --git a/media/libstagefright/codecs/amrnb/enc/src/g_pitch.cpp b/media/libstagefright/codecs/amrnb/enc/src/g_pitch.cpp
index f6235ad..5b80e2a 100644
--- a/media/libstagefright/codecs/amrnb/enc/src/g_pitch.cpp
+++ b/media/libstagefright/codecs/amrnb/enc/src/g_pitch.cpp
@@ -400,8 +400,9 @@ Word16 G_pitch( /* o : Gain of pitch lag saturated to 1.2 */
}
else
{
- s = 0; /* Avoid case of all zeros */
+ s = 0; /* re-initialize calculations */
p_y1 = &y1[0];
+ p_xn = &xn[0];
for (i = (L_subfr >> 2); i != 0; i--)
{
L_temp = (Word32)(*(p_y1++) >> 2);
diff --git a/media/libstagefright/codecs/amrwbenc/Android.mk b/media/libstagefright/codecs/amrwbenc/Android.mk
index 71a60d3..edfd7b7 100644
--- a/media/libstagefright/codecs/amrwbenc/Android.mk
+++ b/media/libstagefright/codecs/amrwbenc/Android.mk
@@ -101,8 +101,6 @@ LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/src \
$(LOCAL_PATH)/inc
-LOCAL_CFLAGS := $(VO_CFLAGS)
-
ifeq ($(VOTT), v5)
LOCAL_CFLAGS += -DARM -DASM_OPT
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/asm/ARMV5E
diff --git a/media/libstagefright/codecs/amrwbenc/SampleCode/Android.mk b/media/libstagefright/codecs/amrwbenc/SampleCode/Android.mk
index 85ddceb..db34d08 100644
--- a/media/libstagefright/codecs/amrwbenc/SampleCode/Android.mk
+++ b/media/libstagefright/codecs/amrwbenc/SampleCode/Android.mk
@@ -10,7 +10,7 @@ LOCAL_MODULE := AMRWBEncTest
LOCAL_ARM_MODE := arm
-LOCAL_CFLAGS := $(VO_CFLAGS)
+LOCAL_CFLAGS := -DLINUX
LOCAL_SHARED_LIBRARIES := \
libstagefright \
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s
index 856ada8..8451195 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s
@@ -43,7 +43,9 @@ Filt_6k_7k_asm:
MOV r2, #30 @ L_FIR - 1
BL voAWB_Copy @ memcpy(x, mem, (L_FIR - 1)<<1)
- LDR r10, Lable1 @ get fir_7k address
+ ADR r3, Lable1 @ get fir_7k address
+ LDR r10, [r3]
+ ADD r10, r3
MOV r14, #0
MOV r3, r8 @ change myMemCopy to Copy, due to Copy will change r3 content
@@ -178,7 +180,7 @@ Filt_6k_7k_end:
LDMFD r13!, {r4 - r12, r15}
Lable1:
- .word fir_6k_7k
+ .word fir_6k_7k-Lable1
@ENDFUNC
.END
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s
index 14ba828..fc42a03 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s
@@ -49,7 +49,9 @@ Filt_6k_7k_asm:
- LDR r10, Lable1 @ get fir_7k address
+ ADR r3, Lable1 @ get fir_7k address
+ LDR r10, [r3]
+ ADD r10, r3
MOV r3, r8 @ change myMemCopy to Copy, due to Copy will change r3 content
ADD r6, r13, #60 @ get x[L_FIR - 1] address
MOV r7, r3 @ get signal[i]
@@ -221,7 +223,7 @@ Filt_6k_7k_end:
LDMFD r13!, {r0 - r12, r15}
Lable1:
- .word fir_6k_7k
+ .word fir_6k_7k-Lable1
@ENDFUNC
.END
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s
index 6b782cb..8d2aaf2 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s
@@ -40,7 +40,9 @@ pred_lt4_asm:
ADDLT r2, r2, #4 @ frac += UP_SAMP
SUBLT r4, r4, #2 @ x--
- LDR r11, Lable1
+ ADR r8, Lable1
+ LDR r11, [r8]
+ ADD r11, r8
RSB r2, r2, #3 @ k = UP_SAMP - 1 - frac
MOV r8, #0 @ j = 0
ADD r11, r11, r2, LSL #6 @ get inter4_2[k][]
@@ -94,7 +96,7 @@ pred_lt4_end:
LDMFD r13!, {r4 - r12, r15}
Lable1:
- .word inter4_2
+ .word inter4_2-Lable1
@ENDFUNC
.END
diff --git a/media/libstagefright/codecs/avc/common/include/avcapi_common.h b/media/libstagefright/codecs/avc/common/include/avcapi_common.h
index 3331689..abffe6e 100644
--- a/media/libstagefright/codecs/avc/common/include/avcapi_common.h
+++ b/media/libstagefright/codecs/avc/common/include/avcapi_common.h
@@ -213,15 +213,15 @@ typedef void (*FuctionType_FrameUnbind)(void *userData, int);
memory usage.
\param "size" "Size of requested memory in bytes."
\param "attribute" "Some value specifying types, priority, etc. of the memory."
-\return "The address of the allocated memory casted to int"
+\return "The address of the allocated, zero-initialized memory"
*/
-typedef int (*FunctionType_Malloc)(void *userData, int32 size, int attribute);
+typedef void* (*FunctionType_Malloc)(void *userData, int32 size, int attribute);
/** Function pointer to free
-\param "mem" "Pointer to the memory to be freed casted to int"
+\param "mem" "Pointer to the memory to be freed"
\return "void"
*/
-typedef void (*FunctionType_Free)(void *userData, int mem);
+typedef void (*FunctionType_Free)(void *userData, void *mem);
/** Debug logging information is returned to the application thru this function.
\param "type" "Type of logging message, see definition of AVCLogType."
diff --git a/media/libstagefright/codecs/avc/common/src/dpb.cpp b/media/libstagefright/codecs/avc/common/src/dpb.cpp
index 2c4c7da..b5d0dfe 100644
--- a/media/libstagefright/codecs/avc/common/src/dpb.cpp
+++ b/media/libstagefright/codecs/avc/common/src/dpb.cpp
@@ -152,7 +152,7 @@ OSCL_EXPORT_REF AVCStatus AVCConfigureSequence(AVCHandle *avcHandle, AVCCommonOb
framesize = (FrameHeightInMbs * PicWidthInMbs);
if (video->mblock)
{
- avcHandle->CBAVC_Free(userData, (uint32)video->mblock);
+ avcHandle->CBAVC_Free(userData, video->mblock);
video->mblock = NULL;
}
video->mblock = (AVCMacroblock*) avcHandle->CBAVC_Malloc(userData, sizeof(AVCMacroblock) * framesize, DEFAULT_ATTR);
@@ -187,7 +187,7 @@ OSCL_EXPORT_REF AVCStatus AVCConfigureSequence(AVCHandle *avcHandle, AVCCommonOb
if (video->MbToSliceGroupMap)
{
- avcHandle->CBAVC_Free(userData, (uint32)video->MbToSliceGroupMap);
+ avcHandle->CBAVC_Free(userData, video->MbToSliceGroupMap);
video->MbToSliceGroupMap = NULL;
}
video->MbToSliceGroupMap = (int*) avcHandle->CBAVC_Malloc(userData, sizeof(uint) * PicSizeInMapUnits * 2, 7/*DEFAULT_ATTR*/);
@@ -212,14 +212,14 @@ OSCL_EXPORT_REF AVCStatus CleanUpDPB(AVCHandle *avcHandle, AVCCommonObj *video)
{
if (dpb->fs[ii] != NULL)
{
- avcHandle->CBAVC_Free(userData, (int)dpb->fs[ii]);
+ avcHandle->CBAVC_Free(userData, dpb->fs[ii]);
dpb->fs[ii] = NULL;
}
}
#ifndef PV_MEMORY_POOL
if (dpb->decoded_picture_buffer)
{
- avcHandle->CBAVC_Free(userData, (int)dpb->decoded_picture_buffer);
+ avcHandle->CBAVC_Free(userData, dpb->decoded_picture_buffer);
dpb->decoded_picture_buffer = NULL;
}
#endif
diff --git a/media/libstagefright/codecs/avc/enc/Android.mk b/media/libstagefright/codecs/avc/enc/Android.mk
index 48923cf..3678329 100644
--- a/media/libstagefright/codecs/avc/enc/Android.mk
+++ b/media/libstagefright/codecs/avc/enc/Android.mk
@@ -28,7 +28,6 @@ LOCAL_C_INCLUDES := \
$(TOP)/frameworks/native/include/media/openmax
LOCAL_CFLAGS := \
- -D__arm__ \
-DOSCL_IMPORT_REF= -DOSCL_UNUSED_ARG= -DOSCL_EXPORT_REF=
include $(BUILD_STATIC_LIBRARY)
diff --git a/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp b/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp
index c6f658d..259562b 100644
--- a/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp
+++ b/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp
@@ -131,13 +131,16 @@ inline static void ConvertYUV420SemiPlanarToYUV420Planar(
}
}
-static int32_t MallocWrapper(
+static void* MallocWrapper(
void *userData, int32_t size, int32_t attrs) {
- return reinterpret_cast<int32_t>(malloc(size));
+ void *ptr = malloc(size);
+ if (ptr)
+ memset(ptr, 0, size);
+ return ptr;
}
-static void FreeWrapper(void *userData, int32_t ptr) {
- free(reinterpret_cast<void *>(ptr));
+static void FreeWrapper(void *userData, void* ptr) {
+ free(ptr);
}
static int32_t DpbAllocWrapper(void *userData,
diff --git a/media/libstagefright/codecs/avc/enc/src/avcenc_api.cpp b/media/libstagefright/codecs/avc/enc/src/avcenc_api.cpp
index 6d43142..cf14e10 100644
--- a/media/libstagefright/codecs/avc/enc/src/avcenc_api.cpp
+++ b/media/libstagefright/codecs/avc/enc/src/avcenc_api.cpp
@@ -77,7 +77,6 @@ OSCL_EXPORT_REF AVCEnc_Status PVAVCEncInitialize(AVCHandle *avcHandle, AVCEncPar
}
encvid = (AVCEncObject*) avcHandle->AVCObject;
- memset(encvid, 0, sizeof(AVCEncObject)); /* reset everything */
encvid->enc_state = AVCEnc_Initializing;
@@ -90,7 +89,6 @@ OSCL_EXPORT_REF AVCEnc_Status PVAVCEncInitialize(AVCHandle *avcHandle, AVCEncPar
}
video = encvid->common;
- memset(video, 0, sizeof(AVCCommonObj));
/* allocate bitstream structure */
encvid->bitstream = (AVCEncBitstream*) avcHandle->CBAVC_Malloc(userData, sizeof(AVCEncBitstream), DEFAULT_ATTR);
@@ -106,7 +104,6 @@ OSCL_EXPORT_REF AVCEnc_Status PVAVCEncInitialize(AVCHandle *avcHandle, AVCEncPar
{
return AVCENC_MEMORY_FAIL;
}
- memset(video->currSeqParams, 0, sizeof(AVCSeqParamSet));
/* allocate picture parameter set structure */
video->currPicParams = (AVCPicParamSet*) avcHandle->CBAVC_Malloc(userData, sizeof(AVCPicParamSet), DEFAULT_ATTR);
@@ -114,7 +111,6 @@ OSCL_EXPORT_REF AVCEnc_Status PVAVCEncInitialize(AVCHandle *avcHandle, AVCEncPar
{
return AVCENC_MEMORY_FAIL;
}
- memset(video->currPicParams, 0, sizeof(AVCPicParamSet));
/* allocate slice header structure */
video->sliceHdr = (AVCSliceHeader*) avcHandle->CBAVC_Malloc(userData, sizeof(AVCSliceHeader), DEFAULT_ATTR);
@@ -122,7 +118,6 @@ OSCL_EXPORT_REF AVCEnc_Status PVAVCEncInitialize(AVCHandle *avcHandle, AVCEncPar
{
return AVCENC_MEMORY_FAIL;
}
- memset(video->sliceHdr, 0, sizeof(AVCSliceHeader));
/* allocate encoded picture buffer structure*/
video->decPicBuf = (AVCDecPicBuffer*) avcHandle->CBAVC_Malloc(userData, sizeof(AVCDecPicBuffer), DEFAULT_ATTR);
@@ -130,7 +125,6 @@ OSCL_EXPORT_REF AVCEnc_Status PVAVCEncInitialize(AVCHandle *avcHandle, AVCEncPar
{
return AVCENC_MEMORY_FAIL;
}
- memset(video->decPicBuf, 0, sizeof(AVCDecPicBuffer));
/* allocate rate control structure */
encvid->rateCtrl = (AVCRateControl*) avcHandle->CBAVC_Malloc(userData, sizeof(AVCRateControl), DEFAULT_ATTR);
@@ -138,7 +132,6 @@ OSCL_EXPORT_REF AVCEnc_Status PVAVCEncInitialize(AVCHandle *avcHandle, AVCEncPar
{
return AVCENC_MEMORY_FAIL;
}
- memset(encvid->rateCtrl, 0, sizeof(AVCRateControl));
/* reset frame list, not really needed */
video->currPic = NULL;
@@ -194,7 +187,6 @@ OSCL_EXPORT_REF AVCEnc_Status PVAVCEncInitialize(AVCHandle *avcHandle, AVCEncPar
{
return AVCENC_MEMORY_FAIL;
}
- memset(encvid->mot16x16, 0, sizeof(AVCMV)*framesize);
encvid->intraSearch = (uint8*) avcHandle->CBAVC_Malloc(userData, sizeof(uint8) * framesize, DEFAULT_ATTR);
if (encvid->intraSearch == NULL)
@@ -610,32 +602,32 @@ OSCL_EXPORT_REF void PVAVCCleanUpEncoder(AVCHandle *avcHandle)
if (encvid->functionPointer != NULL)
{
- avcHandle->CBAVC_Free(userData, (int)encvid->functionPointer);
+ avcHandle->CBAVC_Free(userData, encvid->functionPointer);
}
if (encvid->min_cost)
{
- avcHandle->CBAVC_Free(userData, (int)encvid->min_cost);
+ avcHandle->CBAVC_Free(userData, encvid->min_cost);
}
if (encvid->intraSearch)
{
- avcHandle->CBAVC_Free(userData, (int)encvid->intraSearch);
+ avcHandle->CBAVC_Free(userData, encvid->intraSearch);
}
if (encvid->mot16x16)
{
- avcHandle->CBAVC_Free(userData, (int)encvid->mot16x16);
+ avcHandle->CBAVC_Free(userData, encvid->mot16x16);
}
if (encvid->rateCtrl)
{
- avcHandle->CBAVC_Free(userData, (int)encvid->rateCtrl);
+ avcHandle->CBAVC_Free(userData, encvid->rateCtrl);
}
if (encvid->overrunBuffer)
{
- avcHandle->CBAVC_Free(userData, (int)encvid->overrunBuffer);
+ avcHandle->CBAVC_Free(userData, encvid->overrunBuffer);
}
video = encvid->common;
@@ -643,45 +635,45 @@ OSCL_EXPORT_REF void PVAVCCleanUpEncoder(AVCHandle *avcHandle)
{
if (video->MbToSliceGroupMap)
{
- avcHandle->CBAVC_Free(userData, (int)video->MbToSliceGroupMap);
+ avcHandle->CBAVC_Free(userData, video->MbToSliceGroupMap);
}
if (video->mblock != NULL)
{
- avcHandle->CBAVC_Free(userData, (int)video->mblock);
+ avcHandle->CBAVC_Free(userData, video->mblock);
}
if (video->decPicBuf != NULL)
{
CleanUpDPB(avcHandle, video);
- avcHandle->CBAVC_Free(userData, (int)video->decPicBuf);
+ avcHandle->CBAVC_Free(userData, video->decPicBuf);
}
if (video->sliceHdr != NULL)
{
- avcHandle->CBAVC_Free(userData, (int)video->sliceHdr);
+ avcHandle->CBAVC_Free(userData, video->sliceHdr);
}
if (video->currPicParams != NULL)
{
if (video->currPicParams->slice_group_id)
{
- avcHandle->CBAVC_Free(userData, (int)video->currPicParams->slice_group_id);
+ avcHandle->CBAVC_Free(userData, video->currPicParams->slice_group_id);
}
- avcHandle->CBAVC_Free(userData, (int)video->currPicParams);
+ avcHandle->CBAVC_Free(userData, video->currPicParams);
}
if (video->currSeqParams != NULL)
{
- avcHandle->CBAVC_Free(userData, (int)video->currSeqParams);
+ avcHandle->CBAVC_Free(userData, video->currSeqParams);
}
if (encvid->bitstream != NULL)
{
- avcHandle->CBAVC_Free(userData, (int)encvid->bitstream);
+ avcHandle->CBAVC_Free(userData, encvid->bitstream);
}
if (video != NULL)
{
- avcHandle->CBAVC_Free(userData, (int)video);
+ avcHandle->CBAVC_Free(userData, video);
}
}
- avcHandle->CBAVC_Free(userData, (int)encvid);
+ avcHandle->CBAVC_Free(userData, encvid);
avcHandle->AVCObject = NULL;
}
diff --git a/media/libstagefright/codecs/avc/enc/src/bitstream_io.cpp b/media/libstagefright/codecs/avc/enc/src/bitstream_io.cpp
index 75ab514..0e3037f 100644
--- a/media/libstagefright/codecs/avc/enc/src/bitstream_io.cpp
+++ b/media/libstagefright/codecs/avc/enc/src/bitstream_io.cpp
@@ -275,8 +275,8 @@ AVCEnc_Status AVCBitstreamUseOverrunBuffer(AVCEncBitstream* stream, int numExtra
// allocate new overrun Buffer
if (encvid->overrunBuffer)
{
- encvid->avcHandle->CBAVC_Free((uint32*)encvid->avcHandle->userData,
- (int)encvid->overrunBuffer);
+ encvid->avcHandle->CBAVC_Free(encvid->avcHandle->userData,
+ encvid->overrunBuffer);
}
encvid->oBSize = stream->oBSize;
@@ -314,8 +314,8 @@ AVCEnc_Status AVCBitstreamUseOverrunBuffer(AVCEncBitstream* stream, int numExtra
// copy from the old buffer to new buffer
memcpy(encvid->overrunBuffer, stream->overrunBuffer, stream->write_pos);
// free old buffer
- encvid->avcHandle->CBAVC_Free((uint32*)encvid->avcHandle->userData,
- (int)stream->overrunBuffer);
+ encvid->avcHandle->CBAVC_Free(encvid->avcHandle->userData,
+ stream->overrunBuffer);
// assign pointer to new buffer
stream->overrunBuffer = encvid->overrunBuffer;
diff --git a/media/libstagefright/codecs/avc/enc/src/motion_est.cpp b/media/libstagefright/codecs/avc/enc/src/motion_est.cpp
index f650ef9..00c56c8 100644
--- a/media/libstagefright/codecs/avc/enc/src/motion_est.cpp
+++ b/media/libstagefright/codecs/avc/enc/src/motion_est.cpp
@@ -176,7 +176,7 @@ void CleanMotionSearchModule(AVCHandle *avcHandle)
if (encvid->mvbits_array)
{
- avcHandle->CBAVC_Free(avcHandle->userData, (int)(encvid->mvbits_array));
+ avcHandle->CBAVC_Free(avcHandle->userData, encvid->mvbits_array);
encvid->mvbits = NULL;
}
diff --git a/media/libstagefright/codecs/avc/enc/src/rate_control.cpp b/media/libstagefright/codecs/avc/enc/src/rate_control.cpp
index 15b55fb..aa13873 100644
--- a/media/libstagefright/codecs/avc/enc/src/rate_control.cpp
+++ b/media/libstagefright/codecs/avc/enc/src/rate_control.cpp
@@ -190,7 +190,6 @@ AVCEnc_Status InitRateControlModule(AVCHandle *avcHandle)
{
goto CLEANUP_RC;
}
- memset(rateCtrl->pMP, 0, sizeof(MultiPass));
rateCtrl->pMP->encoded_frames = -1; /* forget about the very first I frame */
/* RDInfo **pRDSamples */
@@ -207,7 +206,6 @@ AVCEnc_Status InitRateControlModule(AVCHandle *avcHandle)
{
goto CLEANUP_RC;
}
- for (j = 0; j < 32; j++) memset(&(rateCtrl->pMP->pRDSamples[i][j]), 0, sizeof(RDInfo));
}
rateCtrl->pMP->frameRange = (int)(rateCtrl->frame_rate * 1.0); /* 1.0s time frame*/
rateCtrl->pMP->frameRange = AVC_MAX(rateCtrl->pMP->frameRange, 5);
@@ -300,7 +298,7 @@ void CleanupRateControlModule(AVCHandle *avcHandle)
if (rateCtrl->MADofMB)
{
- avcHandle->CBAVC_Free(avcHandle->userData, (int)(rateCtrl->MADofMB));
+ avcHandle->CBAVC_Free(avcHandle->userData, rateCtrl->MADofMB);
}
if (rateCtrl->pMP)
@@ -311,12 +309,12 @@ void CleanupRateControlModule(AVCHandle *avcHandle)
{
if (rateCtrl->pMP->pRDSamples[i])
{
- avcHandle->CBAVC_Free(avcHandle->userData, (int)rateCtrl->pMP->pRDSamples[i]);
+ avcHandle->CBAVC_Free(avcHandle->userData, rateCtrl->pMP->pRDSamples[i]);
}
}
- avcHandle->CBAVC_Free(avcHandle->userData, (int)rateCtrl->pMP->pRDSamples);
+ avcHandle->CBAVC_Free(avcHandle->userData, rateCtrl->pMP->pRDSamples);
}
- avcHandle->CBAVC_Free(avcHandle->userData, (int)(rateCtrl->pMP));
+ avcHandle->CBAVC_Free(avcHandle->userData, rateCtrl->pMP);
}
return ;
diff --git a/media/libstagefright/codecs/avc/enc/src/sad_halfpel_inline.h b/media/libstagefright/codecs/avc/enc/src/sad_halfpel_inline.h
index 3a21647..bb4a510 100644
--- a/media/libstagefright/codecs/avc/enc/src/sad_halfpel_inline.h
+++ b/media/libstagefright/codecs/avc/enc/src/sad_halfpel_inline.h
@@ -24,7 +24,10 @@ extern "C"
{
#endif
-#if defined(__GNUC__) && defined(__arm__) /* ARM GNU COMPILER */
+/* Intentionally not using the gcc asm version, since it (if fixed so
+ * as to not crash - the current register constraints are faulty) is
+ * slightly slower than the plain C version on modern GCC versions. */
+#if !defined(__CC_ARM) /* Generic C version */
__inline int32 INTERP1_SUB_SAD(int32 sad, int32 tmp, int32 tmp2)
{
diff --git a/media/libstagefright/codecs/avc/enc/src/sad_inline.h b/media/libstagefright/codecs/avc/enc/src/sad_inline.h
index 3f18483..f6c3554 100644
--- a/media/libstagefright/codecs/avc/enc/src/sad_inline.h
+++ b/media/libstagefright/codecs/avc/enc/src/sad_inline.h
@@ -23,7 +23,10 @@ extern "C"
{
#endif
-#if defined(__GNUC__) && defined(__arm__) /* ARM GNU COMPILER */
+/* Intentionally not using the gcc asm version, since it (if fixed so
+ * as to not crash - the current register constraints are faulty) is
+ * slightly slower than the plain C version on modern GCC versions. */
+#if !defined(__CC_ARM) /* Generic C version */
__inline int32 SUB_SAD(int32 sad, int32 tmp, int32 tmp2)
{
diff --git a/media/libstagefright/codecs/avc/enc/src/sad_mb_offset.h b/media/libstagefright/codecs/avc/enc/src/sad_mb_offset.h
index d5d4a42..8a7fe22 100644
--- a/media/libstagefright/codecs/avc/enc/src/sad_mb_offset.h
+++ b/media/libstagefright/codecs/avc/enc/src/sad_mb_offset.h
@@ -16,7 +16,10 @@
* -------------------------------------------------------------------
*/
-#if defined(__GNUC__) && defined(__arm__) /* ARM GNU COMPILER */
+/* Intentionally not using the gcc asm version, since it (if fixed so
+ * as to not crash - the current register constraints are faulty) is
+ * slightly slower than the plain C version on modern GCC versions. */
+#if !defined(__CC_ARM) /* Generic C version */
#if (NUMBER==3)
__inline int32 sad_mb_offset3(uint8 *ref, uint8 *blk, int lx, int dmin)
@@ -296,9 +299,9 @@ __asm__ volatile("LDR %0, [%1], #16": "=&r"(x12), "=r"(blk));
#if (NUMBER==3)
goto LOOP_SAD3;
#elif (NUMBER==2)
-goto LOOP_SAD2;
+ goto LOOP_SAD2;
#elif (NUMBER==1)
-goto LOOP_SAD1;
+ goto LOOP_SAD1;
#endif
}
diff --git a/media/libstagefright/codecs/common/Android.mk b/media/libstagefright/codecs/common/Android.mk
index 77fe934..a33cb92 100644
--- a/media/libstagefright/codecs/common/Android.mk
+++ b/media/libstagefright/codecs/common/Android.mk
@@ -14,8 +14,6 @@ LOCAL_STATIC_LIBRARIES :=
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/include
-LOCAL_CFLAGS := $(VO_CFLAGS)
-
include $(BUILD_SHARED_LIBRARY)
diff --git a/media/libstagefright/codecs/common/Config.mk b/media/libstagefright/codecs/common/Config.mk
index 187f25c..a6d4286 100644
--- a/media/libstagefright/codecs/common/Config.mk
+++ b/media/libstagefright/codecs/common/Config.mk
@@ -20,5 +20,3 @@ endif
VOTEST := 0
-VO_CFLAGS:=-DLINUX
-
diff --git a/media/libstagefright/codecs/common/include/voType.h b/media/libstagefright/codecs/common/include/voType.h
index 5f659ab..da208d4 100644
--- a/media/libstagefright/codecs/common/include/voType.h
+++ b/media/libstagefright/codecs/common/include/voType.h
@@ -76,15 +76,6 @@ typedef char VO_CHAR;
/** VO_U16 is a 16 bit unsigned quantity that is 16 bit word aligned */
typedef unsigned short VO_U16;
-/** VO_WCHAR is a 16 bit unsigned quantity that is 16 bit word aligned */
-#if defined _WIN32
-typedef unsigned short VO_WCHAR;
-typedef unsigned short* VO_PWCHAR;
-#elif defined LINUX
-typedef unsigned char VO_WCHAR;
-typedef unsigned char* VO_PWCHAR;
-#endif
-
/** VO_S16 is a 16 bit signed quantity that is 16 bit word aligned */
typedef signed short VO_S16;
@@ -150,21 +141,6 @@ typedef char* VO_PCHAR;
*/
typedef unsigned char* VO_PBYTE;
-/** The VO_PTCHAR type is intended to be used to pass arrays of wchar such as
- unicode char between the application and the component and core. The VO_PTCHAR
- type is a 32 bit pointer to a zero terminated string. The pointer is word
- aligned and the string is byte aligned.
- */
-/*
-#if !defined LINUX
-typedef unsigned short* VO_PTCHAR;
-typedef unsigned short* VO_TCHAR;
-#else
-typedef char* VO_PTCHAR;
-typedef char VO_TCHAR;
-#endif
-*/
-
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
diff --git a/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_dct_16_gcc.s b/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_dct_16_gcc.s
index f83732b..e61c8d3 100644
--- a/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_dct_16_gcc.s
+++ b/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_dct_16_gcc.s
@@ -369,7 +369,9 @@ pvmp3_merge_in_place_N32:
pvmp3_split:
stmfd sp!,{r4,r5,lr}
- ldr r2,constant16
+ adr r1,constant16
+ ldr r2,[r1]
+ add r2,r1
sub r1,r0,#4
mov r3,#3
loop1:
@@ -449,7 +451,7 @@ constant14:
constant15:
.word 0x5a827980
constant16:
- .word CosTable_dct32 + 60
+ .word (CosTable_dct32 + 60)-constant16
diff --git a/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_mdct_18_gcc.s b/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_mdct_18_gcc.s
index 96230c5..575acd6 100644
--- a/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_mdct_18_gcc.s
+++ b/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_mdct_18_gcc.s
@@ -43,7 +43,7 @@
pvmp3_mdct_18:
stmfd sp!,{r4-r11,lr}
mov r7,r2
- ldr r2,table
+ adr r2,constdata$1
mov r6,r1
add r3,r2,#0x24
add r12,r3,#0x44
@@ -321,8 +321,6 @@ Loop_2:
smull r2,r1,r0,r1
str r1,[r6,#0x3c]
ldmfd sp!,{r4-r11,pc}
-table:
- .word constdata$1
@------------------------------------------------------------------------------
diff --git a/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_polyphase_filter_window_gcc.s b/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_polyphase_filter_window_gcc.s
index 4f45737..b74c849 100644
--- a/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_polyphase_filter_window_gcc.s
+++ b/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_polyphase_filter_window_gcc.s
@@ -46,8 +46,10 @@ pvmp3_polyphase_filter_window:
stmfd sp!,{r0-r2,r4-r11,lr}
sub sp,sp,#4
+ adr r2,PolyPh_filter_coeff
+ ldr r1,[r2]
+ add r1,r2
ldr r2,[sp,#0xc]
- ldr r1,PolyPh_filter_coeff
sub r2,r2,#1
mov r10,#1
@@ -224,7 +226,7 @@ PolyPh_filter_loop2:
ldmfd sp!,{r4-r11,pc}
PolyPh_filter_coeff:
- .word pqmfSynthWin
+ .word pqmfSynthWin-PolyPh_filter_coeff
LOW_16BITS:
.word 0x00007fff
diff --git a/media/libstagefright/id3/ID3.cpp b/media/libstagefright/id3/ID3.cpp
index ca14054..69274ca 100644
--- a/media/libstagefright/id3/ID3.cpp
+++ b/media/libstagefright/id3/ID3.cpp
@@ -743,7 +743,8 @@ static size_t StringSize(const uint8_t *start, uint8_t encoding) {
n += 2;
}
- return n;
+ // Add size of null termination.
+ return n + 2;
}
const void *
diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp
index 0c8b3ce..3e4c55e 100644
--- a/services/audioflinger/AudioMixer.cpp
+++ b/services/audioflinger/AudioMixer.cpp
@@ -93,8 +93,12 @@ bool AudioMixer::isMultichannelCapable = false;
effect_descriptor_t AudioMixer::dwnmFxDesc;
+// Ensure mConfiguredNames bitmask is initialized properly on all architectures.
+// The value of 1 << x is undefined in C when x >= 32.
+
AudioMixer::AudioMixer(size_t frameCount, uint32_t sampleRate, uint32_t maxNumTracks)
- : mTrackNames(0), mConfiguredNames((1 << maxNumTracks) - 1), mSampleRate(sampleRate)
+ : mTrackNames(0), mConfiguredNames((maxNumTracks >= 32 ? 0 : 1 << maxNumTracks) - 1),
+ mSampleRate(sampleRate)
{
// AudioMixer is not yet capable of multi-channel beyond stereo
COMPILE_TIME_ASSERT_FUNCTION_SCOPE(2 == MAX_NUM_CHANNELS);
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index bf07f8b..385be50 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -721,9 +721,9 @@ void CameraService::Client::stopRecording() {
Mutex::Autolock lock(mLock);
if (checkPidAndHardware() != NO_ERROR) return;
- mCameraService->playSound(SOUND_RECORDING);
disableMsgType(CAMERA_MSG_VIDEO_FRAME);
mHardware->stopRecording();
+ mCameraService->playSound(SOUND_RECORDING);
mPreviewBuffer.clear();
}