}
if (p_pic)
- p_pic->date = p_header->nTimeStamp;
+ p_pic->date = FromOmxTicks(p_header->nTimeStamp);
p_header->nFilledLen = 0;
p_header->pAppPrivate = 0;
}
p_header->nOffset = 0;
p_header->nFlags = OMX_BUFFERFLAG_ENDOFFRAME;
if (p_sys->b_use_pts && p_block->i_pts)
- p_header->nTimeStamp = p_block->i_pts;
+ p_header->nTimeStamp = ToOmxTicks(p_block->i_pts);
else
- p_header->nTimeStamp = p_block->i_dts;
+ p_header->nTimeStamp = ToOmxTicks(p_block->i_dts);
/* In direct mode we pass the input pointer as is.
* Otherwise we memcopy the data */
memcpy( p_buffer->p_buffer, p_header->pBuffer, p_buffer->i_buffer );
p_header->nFilledLen = 0;
- if( p_header->nTimeStamp != 0 &&
- p_header->nTimeStamp != date_Get( &p_sys->end_date ) )
- date_Set( &p_sys->end_date, p_header->nTimeStamp );
+ int64_t timestamp = FromOmxTicks(p_header->nTimeStamp);
+ if( timestamp != 0 &&
+ timestamp != date_Get( &p_sys->end_date ) )
+ date_Set( &p_sys->end_date, timestamp );
p_buffer->i_pts = date_Get( &p_sys->end_date );
p_buffer->i_length = date_Increment( &p_sys->end_date, i_samples ) -
p_header->nFilledLen = p_block->i_buffer;
p_header->nOffset = 0;
p_header->nFlags = OMX_BUFFERFLAG_ENDOFFRAME;
- p_header->nTimeStamp = p_block->i_dts;
+ p_header->nTimeStamp = ToOmxTicks(p_block->i_dts);
/* In direct mode we pass the input pointer as is.
* Otherwise we memcopy the data */
p_header->nFilledLen = p_sys->in.i_frame_size;
p_header->nOffset = 0;
p_header->nFlags = OMX_BUFFERFLAG_ENDOFFRAME;
- p_header->nTimeStamp = p_pic->date;
+ p_header->nTimeStamp = ToOmxTicks(p_pic->date);
#ifdef OMXIL_EXTRA_DEBUG
msg_Dbg( p_dec, "EmptyThisBuffer %p, %p, %i", p_header, p_header->pBuffer,
(int)p_header->nFilledLen );
}
p_block->i_buffer = p_header->nFilledLen;
- p_block->i_pts = p_block->i_dts = p_header->nTimeStamp;
+ p_block->i_pts = p_block->i_dts = FromOmxTicks(p_header->nTimeStamp);
p_header->nFilledLen = 0;
p_header->pAppPrivate = 0;
}
#define CHECK_ERROR(a, ...) \
if(a != OMX_ErrorNone) {msg_Dbg( p_dec, __VA_ARGS__ ); goto error;}
+#ifdef OMX_SKIP64BIT
+static inline int64_t FromOmxTicks(OMX_TICKS value)
+{
+ return (((int64_t)value.nHighPart) << 32) | value.nLowPart;
+}
+static inline OMX_TICKS ToOmxTicks(int64_t value)
+{
+ OMX_TICKS s;
+ s.nLowPart = value;
+ s.nHighPart = value >> 32;
+ return s;
+}
+#else
+#define FromOmxTicks(x) (x)
+#define ToOmxTicks(x) (x)
+#endif
+
/*****************************************************************************
* OMX buffer FIFO macros
*****************************************************************************/