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

Commit cfb3bc79 authored by Andreas Huber's avatar Andreas Huber
Browse files

While other OMX nodes appear to now have switched to using microseconds to...

While other OMX nodes appear to now have switched to using microseconds to timestamp buffers, at least the TI AAC and MP3 decoders still use milliseconds.
parent 0024245e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -83,7 +83,8 @@ private:
        kDoesntProperlyFlushAllPortsAtOnce   = 8,
        kRequiresAllocateBufferOnInputPorts  = 16,
        kRequiresAllocateBufferOnOutputPorts = 32,
        kRequiresLoadedToIdleAfterAllocation = 64
        kRequiresLoadedToIdleAfterAllocation = 64,
        kMeasuresTimeInMilliseconds          = 128,
    };

    OMXClient *mClient;
+19 −4
Original line number Diff line number Diff line
@@ -154,6 +154,10 @@ OMXDecoder *OMXDecoder::Create(
    if (!strncmp(codec, "OMX.qcom.video.", 15)) {
        quirks |= kRequiresLoadedToIdleAfterAllocation;
    }
    if (!strcmp(codec, "OMX.TI.AAC.decode")
        || !strcmp(codec, "OMX.TI.MP3.decode")) {
        quirks |= kMeasuresTimeInMilliseconds;
    }

    OMXDecoder *decoder = new OMXDecoder(client, node, mime, codec, quirks);

@@ -1497,8 +1501,12 @@ void OMXDecoder::onRealEmptyBufferDone(IOMX::buffer_id buffer) {
    OMX_TICKS timestamp = 0;

    if (success) {
        if (mQuirks & kMeasuresTimeInMilliseconds) {
            timestamp = ((OMX_S64)units * 1000) / scale;
        } else {
            timestamp = ((OMX_S64)units * 1000000) / scale;
        }
    }

    input_buffer->release();
    input_buffer = NULL;
@@ -1523,9 +1531,16 @@ void OMXDecoder::onRealFillBufferDone(const omx_message &msg) {

    media_buffer->meta_data()->clear();

    if (mQuirks & kMeasuresTimeInMilliseconds) {
        media_buffer->meta_data()->setInt32(
                kKeyTimeUnits,
                msg.u.extended_buffer_data.timestamp);
    } else {
        media_buffer->meta_data()->setInt32(
                kKeyTimeUnits,
                (msg.u.extended_buffer_data.timestamp + 500) / 1000);
    }

    media_buffer->meta_data()->setInt32(kKeyTimeScale, 1000);

    if (msg.u.extended_buffer_data.flags & OMX_BUFFERFLAG_SYNCFRAME) {