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

Commit e5867ef3 authored by Gil Dobjanschi's avatar Gil Dobjanschi
Browse files

Adjust start time and duration for overlays and effects.

Change-Id: Ia5030d15a7c98f37307a0e78821052f05fec9fe6
parent 3937d3d4
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -123,6 +123,23 @@ public abstract class Effect {
        return mStartTimeMs;
    }

    /**
     * Set the start time and duration
     *
     * @param startTimeMs start time in milliseconds
     * @param durationMs The duration in milliseconds
     */
    public void setStartTimeAndDuration(long startTimeMs, long durationMs) {
        if (startTimeMs + durationMs > mMediaItem.getTimelineDuration()) {
            throw new IllegalArgumentException("Invalid start time or duration");
        }

        mStartTimeMs = startTimeMs;
        mDurationMs = durationMs;

        mMediaItem.invalidateTransitions(this);
    }

    /**
     * @return The media item owner
     */
+4 −44
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package android.media.videoeditor;

import java.io.IOException;
import java.util.List;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -153,55 +152,16 @@ public class MediaImageItem extends MediaItem {
    }

    /**
     * This method will adjust the duration of bounding transitions if the
     * current duration of the transactions become greater than the maximum
     * allowable duration.
     * This method will adjust the duration of bounding transitions, effects
     * and overlays if the current duration of the transactions become greater
     * than the maximum allowable duration.
     *
     * @param durationMs The duration of the image in the storyboard timeline
     */
    public void setDuration(long durationMs) {
        mDurationMs = durationMs;

        // Check if the duration of transitions need to be adjusted
        if (mBeginTransition != null) {
            final long maxDurationMs = mBeginTransition.getMaximumDuration();
            if (mBeginTransition.getDuration() > maxDurationMs) {
                mBeginTransition.setDuration(maxDurationMs);
            }
        }

        if (mEndTransition != null) {
            final long maxDurationMs = mEndTransition.getMaximumDuration();
            if (mEndTransition.getDuration() > maxDurationMs) {
                mEndTransition.setDuration(maxDurationMs);
            }
        }

        final List<Overlay> overlays = getAllOverlays();
        for (Overlay overlay : overlays) {
            // Adjust the start time if necessary
            if (overlay.getStartTime() < getTimelineDuration()) {
                overlay.setStartTime(0);
            }

            // Adjust the duration if necessary
            if (overlay.getStartTime() + overlay.getDuration() > getTimelineDuration()) {
                overlay.setDuration(getTimelineDuration() - overlay.getStartTime());
            }
        }

        final List<Effect> effects = getAllEffects();
        for (Effect effect : effects) {
            // Adjust the start time if necessary
            if (effect.getStartTime() < getTimelineDuration()) {
                effect.setStartTime(0);
            }

            // Adjust the duration if necessary
            if (effect.getStartTime() + effect.getDuration() > getTimelineDuration()) {
                effect.setDuration(getTimelineDuration() - effect.getStartTime());
            }
        }
        adjustElementsDuration();
    }

    /*
+69 −0
Original line number Diff line number Diff line
@@ -472,4 +472,73 @@ public abstract class MediaItem {
            }
        }
    }

    /**
     * Adjust the duration of effects, overlays and transitions.
     * This method will be called after a media item duration is changed.
     */
    protected void adjustElementsDuration() {
        // Check if the duration of transitions need to be adjusted
        if (mBeginTransition != null) {
            final long maxDurationMs = mBeginTransition.getMaximumDuration();
            if (mBeginTransition.getDuration() > maxDurationMs) {
                mBeginTransition.setDuration(maxDurationMs);
            }
        }

        if (mEndTransition != null) {
            final long maxDurationMs = mEndTransition.getMaximumDuration();
            if (mEndTransition.getDuration() > maxDurationMs) {
                mEndTransition.setDuration(maxDurationMs);
            }
        }

        final List<Overlay> overlays = getAllOverlays();
        for (Overlay overlay : overlays) {
            // Adjust the start time if necessary
            final long overlayStartTimeMs;
            if (overlay.getStartTime() > getTimelineDuration()) {
                overlayStartTimeMs = 0;
            } else {
                overlayStartTimeMs = overlay.getStartTime();
            }

            // Adjust the duration if necessary
            final long overlayDurationMs;
            if (overlayStartTimeMs + overlay.getDuration() > getTimelineDuration()) {
                overlayDurationMs = getTimelineDuration() - overlayStartTimeMs;
            } else {
                overlayDurationMs = overlay.getDuration();
            }

            if (overlayStartTimeMs != overlay.getStartTime() ||
                    overlayDurationMs != overlay.getDuration()) {
                overlay.setStartTimeAndDuration(overlayStartTimeMs, overlayDurationMs);
            }
        }

        final List<Effect> effects = getAllEffects();
        for (Effect effect : effects) {
            // Adjust the start time if necessary
            final long effectStartTimeMs;
            if (effect.getStartTime() > getTimelineDuration()) {
                effectStartTimeMs = 0;
            } else {
                effectStartTimeMs = effect.getStartTime();
            }

            // Adjust the duration if necessary
            final long effectDurationMs;
            if (effectStartTimeMs + effect.getDuration() > getTimelineDuration()) {
                effectDurationMs = getTimelineDuration() - effectStartTimeMs;
            } else {
                effectDurationMs = effect.getDuration();
            }

            if (effectStartTimeMs != effect.getStartTime() ||
                    effectDurationMs != effect.getDuration()) {
                effect.setStartTimeAndDuration(effectStartTimeMs, effectDurationMs);
            }
        }
    }
}
+4 −44
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package android.media.videoeditor;

import java.io.IOException;
import java.util.List;

import android.graphics.Bitmap;
import android.util.Log;
@@ -257,9 +256,9 @@ public class MediaVideoItem extends MediaItem {

    /**
     * Sets the start and end marks for trimming a video media item.
     * This method will adjust the duration of bounding transitions if the
     * current duration of the transactions become greater than the maximum
     * allowable duration.
     * This method will adjust the duration of bounding transitions, effects
     * and overlays if the current duration of the transactions become greater
     * than the maximum allowable duration.
     *
     * @param beginMs Start time in milliseconds. Set to 0 to extract from the
     *           beginning
@@ -293,46 +292,7 @@ public class MediaVideoItem extends MediaItem {
        mBeginBoundaryTimeMs = beginMs;
        mEndBoundaryTimeMs = endMs;

        // Check if the duration of transitions need to be adjusted
        if (mBeginTransition != null) {
            final long maxDurationMs = mBeginTransition.getMaximumDuration();
            if (mBeginTransition.getDuration() > maxDurationMs) {
                mBeginTransition.setDuration(maxDurationMs);
            }
        }

        if (mEndTransition != null) {
            final long maxDurationMs = mEndTransition.getMaximumDuration();
            if (mEndTransition.getDuration() > maxDurationMs) {
                mEndTransition.setDuration(maxDurationMs);
            }
        }

        final List<Overlay> overlays = getAllOverlays();
        for (Overlay overlay : overlays) {
            // Adjust the start time if necessary
            if (overlay.getStartTime() < mBeginBoundaryTimeMs) {
                overlay.setStartTime(mBeginBoundaryTimeMs);
            }

            // Adjust the duration if necessary
            if (overlay.getStartTime() + overlay.getDuration() > getTimelineDuration()) {
                overlay.setDuration(getTimelineDuration() - overlay.getStartTime());
            }
        }

        final List<Effect> effects = getAllEffects();
        for (Effect effect : effects) {
            // Adjust the start time if necessary
            if (effect.getStartTime() < mBeginBoundaryTimeMs) {
                effect.setStartTime(mBeginBoundaryTimeMs);
            }

            // Adjust the duration if necessary
            if (effect.getStartTime() + effect.getDuration() > getTimelineDuration()) {
                effect.setDuration(getTimelineDuration() - effect.getStartTime());
            }
        }
        adjustElementsDuration();
    }

    /**
+17 −0
Original line number Diff line number Diff line
@@ -125,6 +125,23 @@ public abstract class Overlay {
        mMediaItem.invalidateTransitions(this);
    }

    /**
     * Set the start time and duration
     *
     * @param startTimeMs start time in milliseconds
     * @param durationMs The duration in milliseconds
     */
    public void setStartTimeAndDuration(long startTimeMs, long durationMs) {
        if (startTimeMs + durationMs > mMediaItem.getTimelineDuration()) {
            throw new IllegalArgumentException("Invalid start time or duration");
        }

        mStartTimeMs = startTimeMs;
        mDurationMs = durationMs;

        mMediaItem.invalidateTransitions(this);
    }

    /**
     * @return The media item owner
     */