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

Commit bbc66680 authored by Manikanta Kanamarlapudi's avatar Manikanta Kanamarlapudi Committed by Steve Kondik
Browse files

libstagefright: Fix incorrect duration calculation

MPEG4Writer uses timescale parameter for calculating duration.
For HFR, divide timescale with HFR ratio factor to play
at 30fps. Added the same in MovieHeader(mvhd) and track
hdeader(tkhd) atom.

Change-Id: I0ed92ef7a95c4b2b98567949b3b475d85d6bb16f
parent 72323a4c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ public:
    void endBox();
    uint32_t interleaveDuration() const { return mInterleaveDurationUs; }
    status_t setInterleaveDuration(uint32_t duration);
    int32_t getTimeScale() const { return mTimeScale; }
    int32_t getTimeScale() const { return (mTimeScale / mHFRRatio); }

    status_t setGeoData(int latitudex10000, int longitudex10000);
    virtual void setStartTimeOffsetMs(int ms) { mStartTimeOffsetMs = ms; }
+1 −1
Original line number Diff line number Diff line
@@ -975,7 +975,7 @@ void MPEG4Writer::writeMvhdBox(int64_t durationUs) {
    writeInt32(now);           // creation time
    writeInt32(now);           // modification time
    writeInt32(mTimeScale / mHFRRatio);    // mvhd timescale
    int32_t duration = (durationUs * mTimeScale + 5E5) / 1E6;
    int32_t duration = (durationUs * (mTimeScale / mHFRRatio) + 5E5) / 1E6;
    writeInt32(duration);
    writeInt32(0x10000);       // rate: 1.0
    writeInt16(0x100);         // volume