mm-audio: aenc: timestamp fixes
Save timestamp of first ETB as anchor time and use it
as reference in calculating timestamp for all future FBDs
Change-Id: Id937ac169c878fccf7d6f8fa660cb9ec321d4afa
CRs-Fixed: 639731
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 f3d9547..2e2abbf 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 45f2208..6af9269 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;