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

Commit 3ee66f7b authored by Gil Dobjanschi's avatar Gil Dobjanschi Committed by Android (Google) Code Review
Browse files

Merge "Invalidate transitions when the start time or duration of an effect or overlay changes."

parents 3afce668 f1d8f2a1
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ public abstract class Effect {

    /**
     * Set the duration of the effect. If a preview or export is in progress,
     * then this change is effective for next preview or export session. s
     * then this change is effective for next preview or export session.
     *
     * @param durationMs of the effect in milliseconds
     */
@@ -85,9 +85,10 @@ public abstract class Effect {
            throw new IllegalArgumentException("Duration is too large");
        }

        final long oldDurationMs = mDurationMs;
        mDurationMs = durationMs;

        mMediaItem.invalidateTransitions(mStartTimeMs, mDurationMs);
        mMediaItem.invalidateTransitions(mStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
    }

    /**
@@ -111,9 +112,10 @@ public abstract class Effect {
            throw new IllegalArgumentException("Start time is too large");
        }

        final long oldStartTimeMs = mStartTimeMs;
        mStartTimeMs = startTimeMs;

        mMediaItem.invalidateTransitions(mStartTimeMs, mDurationMs);
        mMediaItem.invalidateTransitions(oldStartTimeMs, mDurationMs, mStartTimeMs, mDurationMs);
    }

    /**
@@ -134,10 +136,13 @@ public abstract class Effect {
            throw new IllegalArgumentException("Invalid start time or duration");
        }

        final long oldStartTimeMs = mStartTimeMs;
        final long oldDurationMs = mDurationMs;

        mStartTimeMs = startTimeMs;
        mDurationMs = durationMs;

        mMediaItem.invalidateTransitions(mStartTimeMs, mDurationMs);
        mMediaItem.invalidateTransitions(oldStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
    }

    /**
+37 −3
Original line number Diff line number Diff line
@@ -242,15 +242,49 @@ public class MediaImageItem extends MediaItem {
     */
    @Override
    void invalidateTransitions(long startTimeMs, long durationMs) {
        // Check if the effect overlaps with the beginning and end transitions
        // Check if the item overlaps with the beginning and end transitions
        if (mBeginTransition != null) {
            if (startTimeMs < mBeginTransition.getDuration()) {
            if (isOverlapping(startTimeMs, durationMs, 0, mBeginTransition.getDuration())) {
                mBeginTransition.invalidate();
            }
        }

        if (mEndTransition != null) {
            if (startTimeMs + durationMs > mDurationMs - mEndTransition.getDuration()) {
            final long transitionDurationMs = mEndTransition.getDuration();
            if (isOverlapping(startTimeMs, durationMs,
                    getDuration() - transitionDurationMs, transitionDurationMs)) {
                mEndTransition.invalidate();
            }
        }
    }

    /*
     * {@inheritDoc}
     */
    @Override
    void invalidateTransitions(long oldStartTimeMs, long oldDurationMs, long newStartTimeMs,
            long newDurationMs) {
        // Check if the item overlaps with the beginning and end transitions
        if (mBeginTransition != null) {
            final long transitionDurationMs = mBeginTransition.getDuration();
            // If the start time has changed and if the old or the new item
            // overlaps with the begin transition, invalidate the transition.
            if (oldStartTimeMs != newStartTimeMs &&
                    (isOverlapping(oldStartTimeMs, oldDurationMs, 0, transitionDurationMs) ||
                    isOverlapping(newStartTimeMs, newDurationMs, 0, transitionDurationMs))) {
                mBeginTransition.invalidate();
            }
        }

        if (mEndTransition != null) {
            final long transitionDurationMs = mEndTransition.getDuration();
            // If the start time + duration has changed and if the old or the new
            // item overlaps the end transition, invalidate the transition/
            if (oldStartTimeMs + oldDurationMs != newStartTimeMs + newDurationMs &&
                    (isOverlapping(oldStartTimeMs, oldDurationMs,
                            mDurationMs - transitionDurationMs, transitionDurationMs) ||
                    isOverlapping(newStartTimeMs, newDurationMs,
                            mDurationMs - transitionDurationMs, transitionDurationMs))) {
                mEndTransition.invalidate();
            }
        }
+34 −0
Original line number Diff line number Diff line
@@ -454,6 +454,40 @@ public abstract class MediaItem {
     */
    abstract void invalidateTransitions(long startTimeMs, long durationMs);

    /**
     * Invalidate the start and end transitions if necessary. This method is
     * typically called when the start time and/or duration of an overlay or
     * effect is changing.
     *
     * @param oldStartTimeMs The old start time of the effect or overlay
     * @param oldDurationMs The old duration of the effect or overlay
     * @param newStartTimeMs The new start time of the effect or overlay
     * @param newDurationMs The new duration of the effect or overlay
     */
    abstract void invalidateTransitions(long oldStartTimeMs, long oldDurationMs,
            long newStartTimeMs, long newDurationMs);

    /**
     * Check if two items overlap in time
     *
     * @param startTimeMs1 Item 1 start time
     * @param durationMs1 Item 1 duration
     * @param startTimeMs2 Item 2 start time
     * @param durationMs2 Item 2 end time
     *
     * @return true if the two items overlap
     */
    protected boolean isOverlapping(long startTimeMs1, long durationMs1,
            long startTimeMs2, long durationMs2) {
       if (startTimeMs1 + durationMs1 <= startTimeMs2) {
           return false;
       } else if (startTimeMs1 >= startTimeMs2 + durationMs2) {
           return false;
       }

       return true;
    }

    /**
     * Adjust the duration transitions.
     */
+40 −3
Original line number Diff line number Diff line
@@ -218,15 +218,52 @@ public class MediaVideoItem extends MediaItem {
     */
    @Override
    void invalidateTransitions(long startTimeMs, long durationMs) {
        // Check if the effect overlaps with the beginning and end transitions
        // Check if the item overlaps with the beginning and end transitions
        if (mBeginTransition != null) {
            if (startTimeMs < mBeginTransition.getDuration()) {
            if (isOverlapping(startTimeMs, durationMs,
                    mBeginBoundaryTimeMs, mBeginTransition.getDuration())) {
                mBeginTransition.invalidate();
            }
        }

        if (mEndTransition != null) {
            if (startTimeMs + durationMs > mEndBoundaryTimeMs - mEndTransition.getDuration()) {
            final long transitionDurationMs = mEndTransition.getDuration();
            if (isOverlapping(startTimeMs, durationMs,
                    mEndBoundaryTimeMs - transitionDurationMs, transitionDurationMs)) {
                mEndTransition.invalidate();
            }
        }
    }

    /*
     * {@inheritDoc}
     */
    @Override
    void invalidateTransitions(long oldStartTimeMs, long oldDurationMs, long newStartTimeMs,
            long newDurationMs) {
        // Check if the item overlaps with the beginning and end transitions
        if (mBeginTransition != null) {
            final long transitionDurationMs = mBeginTransition.getDuration();
            // If the start time has changed and if the old or the new item
            // overlaps with the begin transition, invalidate the transition.
            if (oldStartTimeMs != newStartTimeMs &&
                    (isOverlapping(oldStartTimeMs, oldDurationMs,
                            mBeginBoundaryTimeMs, transitionDurationMs) ||
                    isOverlapping(newStartTimeMs, newDurationMs,
                            mBeginBoundaryTimeMs, transitionDurationMs))) {
                mBeginTransition.invalidate();
            }
        }

        if (mEndTransition != null) {
            final long transitionDurationMs = mEndTransition.getDuration();
            // If the start time + duration has changed and if the old or the new
            // item overlaps the end transition, invalidate the transition/
            if (oldStartTimeMs + oldDurationMs != newStartTimeMs + newDurationMs &&
                    (isOverlapping(oldStartTimeMs, oldDurationMs,
                            mEndBoundaryTimeMs - transitionDurationMs, transitionDurationMs) ||
                    isOverlapping(newStartTimeMs, newDurationMs,
                            mEndBoundaryTimeMs - transitionDurationMs, transitionDurationMs))) {
                mEndTransition.invalidate();
            }
        }
+8 −3
Original line number Diff line number Diff line
@@ -96,9 +96,10 @@ public abstract class Overlay {
            throw new IllegalArgumentException("Duration is too large");
        }

        final long oldDurationMs = mDurationMs;
        mDurationMs = durationMs;

        mMediaItem.invalidateTransitions(mStartTimeMs, mDurationMs);
        mMediaItem.invalidateTransitions(mStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
    }

    /**
@@ -120,9 +121,10 @@ public abstract class Overlay {
            throw new IllegalArgumentException("Start time is too large");
        }

        final long oldStartTimeMs = mStartTimeMs;
        mStartTimeMs = startTimeMs;

        mMediaItem.invalidateTransitions(mStartTimeMs, mDurationMs);
        mMediaItem.invalidateTransitions(oldStartTimeMs, mDurationMs, mStartTimeMs, mDurationMs);
    }

    /**
@@ -136,10 +138,13 @@ public abstract class Overlay {
            throw new IllegalArgumentException("Invalid start time or duration");
        }

        final long oldStartTimeMs = mStartTimeMs;
        final long oldDurationMs = mDurationMs;

        mStartTimeMs = startTimeMs;
        mDurationMs = durationMs;

        mMediaItem.invalidateTransitions(mStartTimeMs, mDurationMs);
        mMediaItem.invalidateTransitions(oldStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
    }

    /**
Loading