Merge "AudioFlinger: fix timed audio" into jb-mr1-dev
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 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 @@
         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/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 @@
     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 @@
         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 @@
 
         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 @@
     {
         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/SoftAVCEncoder.cpp b/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp
index 117f3f1..a2ef3a1 100644
--- a/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp
+++ b/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp
@@ -135,13 +135,16 @@
     }
 }
 
-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 @@
     }
 
     encvid = (AVCEncObject*) avcHandle->AVCObject;
-    memset(encvid, 0, sizeof(AVCEncObject)); /* reset everything */
 
     encvid->enc_state = AVCEnc_Initializing;
 
@@ -90,7 +89,6 @@
     }
 
     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 @@
     {
         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 @@
     {
         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 @@
     {
         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 @@
     {
         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 @@
     {
         return AVCENC_MEMORY_FAIL;
     }
-    memset(encvid->rateCtrl, 0, sizeof(AVCRateControl));
 
     /* reset frame list, not really needed */
     video->currPic = NULL;
@@ -194,7 +187,6 @@
     {
         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 @@
 
         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 @@
         {
             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 @@
                 // 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 @@
             // 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 @@
 
     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 @@
         {
             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 @@
             {
                 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 @@
 
     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 @@
             {
                 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_mb_offset.h b/media/libstagefright/codecs/avc/enc/src/sad_mb_offset.h
index d5d4a42..5bc5c86 100644
--- a/media/libstagefright/codecs/avc/enc/src/sad_mb_offset.h
+++ b/media/libstagefright/codecs/avc/enc/src/sad_mb_offset.h
@@ -296,9 +296,9 @@
 #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/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 @@
         n += 2;
     }
 
-    return n;
+    // Add size of null termination.
+    return n + 2;
 }
 
 const void *