Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 269a3556 authored by Lajos Molnar's avatar Lajos Molnar
Browse files

Track exact timestamps in SoftMPEG4/H263 decoders



Change-Id: I7772e3afec020f889dea80fd6372afbc36cd68d6
Signed-off-by: default avatarLajos Molnar <lajos@google.com>
Bug: 9285553
(cherry picked from commit e113aa1f078cb3d5f8182058e144fd14ce945fca)
parent 53b0a2b1
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ SoftMPEG4::SoftMPEG4(
      mInitialized(false),
      mFramesConfigured(false),
      mNumSamplesOutput(0),
      mPvTime(0),
      mOutputPortSettingsChange(NONE) {
    if (!strcmp(name, "OMX.google.h263.decoder")) {
        mMode = MODE_H263;
@@ -415,9 +416,14 @@ void SoftMPEG4::onQueueFilled(OMX_U32 portIndex) {

        uint32_t useExtTimestamp = (inHeader->nOffset == 0);

        // decoder deals in ms, OMX in us.
        uint32_t timestamp =
            useExtTimestamp ? (inHeader->nTimeStamp + 500) / 1000 : 0xFFFFFFFF;
        // decoder deals in ms (int32_t), OMX in us (int64_t)
        // so use fake timestamp instead
        uint32_t timestamp = 0xFFFFFFFF;
        if (useExtTimestamp) {
            mPvToOmxTimeMap.add(mPvTime, inHeader->nTimeStamp);
            timestamp = mPvTime;
            mPvTime++;
        }

        int32_t bufferSize = inHeader->nFilledLen;
        int32_t tmp = bufferSize;
@@ -441,7 +447,8 @@ void SoftMPEG4::onQueueFilled(OMX_U32 portIndex) {
        }

        // decoder deals in ms, OMX in us.
        outHeader->nTimeStamp = timestamp * 1000;
        outHeader->nTimeStamp = mPvToOmxTimeMap.valueFor(timestamp);
        mPvToOmxTimeMap.removeItem(timestamp);

        inHeader->nOffset += bufferSize;
        inHeader->nFilledLen = 0;
@@ -572,6 +579,7 @@ void SoftMPEG4::onPortEnableCompleted(OMX_U32 portIndex, bool enabled) {
}

void SoftMPEG4::onReset() {
    mPvToOmxTimeMap.clear();
    mSignalledError = false;
    mOutputPortSettingsChange = NONE;
    mFramesConfigured = false;
+3 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#define SOFT_MPEG4_H_

#include "SimpleSoftOMXComponent.h"
#include <utils/KeyedVector.h>

struct tagvideoDecControls;

@@ -70,6 +71,8 @@ private:
    bool mFramesConfigured;

    int32_t mNumSamplesOutput;
    int32_t mPvTime;
    KeyedVector<int32_t, OMX_TICKS> mPvToOmxTimeMap;

    enum {
        NONE,