Merge "mm-audio: aenc: timestamp fixes"
diff --git a/mm-audio/aenc-aac/qdsp6/inc/omx_aac_aenc.h b/mm-audio/aenc-aac/qdsp6/inc/omx_aac_aenc.h
index 623caa8..98afa71 100644
--- a/mm-audio/aenc-aac/qdsp6/inc/omx_aac_aenc.h
+++ b/mm-audio/aenc-aac/qdsp6/inc/omx_aac_aenc.h
@@ -457,6 +457,7 @@
     unsigned int                   m_flags;      //encapsulate the waiting states.
     OMX_U64                        nTimestamp;
     OMX_U64                        ts;
+    uint32_t                       m_frame_count;
     unsigned int                   frameduration;
     unsigned int                   pcm_input; //tunnel or non-tunnel
     unsigned int                   m_inp_act_buf_count;    // Num of Input Buffers
diff --git a/mm-audio/aenc-aac/qdsp6/src/omx_aac_aenc.cpp b/mm-audio/aenc-aac/qdsp6/src/omx_aac_aenc.cpp
index 6521265..33892b5 100644
--- a/mm-audio/aenc-aac/qdsp6/src/omx_aac_aenc.cpp
+++ b/mm-audio/aenc-aac/qdsp6/src/omx_aac_aenc.cpp
@@ -1072,6 +1072,7 @@
 
     nTimestamp = 0;
     ts = 0;
+    m_frame_count = 0;
     frameduration = 0;
     nNumInputBuf = 0;
     nNumOutputBuf = 0;
@@ -4097,6 +4098,11 @@
         DEBUG_PRINT("meta_in.nFlags = %d\n",meta_in.nFlags);
     }
 
+    if (ts == 0) {
+        DEBUG_PRINT("Anchor time %lld", buffer->nTimeStamp);
+        ts = buffer->nTimeStamp;
+    }
+
     memcpy(&data[sizeof(META_IN)],buffer->pBuffer,buffer->nFilledLen);
     write(m_drv_fd, data, buffer->nFilledLen+sizeof(META_IN));
     pthread_mutex_lock(&m_state_lock);
@@ -4207,11 +4213,8 @@
         }
 
          meta_out = (ENC_META_OUT *)(buffer->pBuffer + sizeof(unsigned char));
-         buffer->nTimeStamp = (((OMX_TICKS)meta_out->msw_ts << 32)+
-				meta_out->lsw_ts);
-
-         ts += frameduration;
-         buffer->nTimeStamp = ts;
+         buffer->nTimeStamp = ts + (frameduration * m_frame_count);
+         ++m_frame_count;
          nTimestamp = buffer->nTimeStamp;
          buffer->nFlags |= meta_out->nflags;
          buffer->nOffset =  meta_out->offset_to_frame + 1;