Loading media/java/android/media/videoeditor/Effect.java +9 −4 Original line number Diff line number Diff line Loading @@ -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 */ Loading @@ -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); } /** Loading @@ -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); } /** Loading @@ -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); } /** Loading media/java/android/media/videoeditor/MediaImageItem.java +37 −3 Original line number Diff line number Diff line Loading @@ -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(); } } Loading media/java/android/media/videoeditor/MediaItem.java +34 −0 Original line number Diff line number Diff line Loading @@ -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. */ Loading media/java/android/media/videoeditor/MediaVideoItem.java +40 −3 Original line number Diff line number Diff line Loading @@ -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(); } } Loading media/java/android/media/videoeditor/Overlay.java +8 −3 Original line number Diff line number Diff line Loading @@ -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); } /** Loading @@ -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); } /** Loading @@ -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 Loading
media/java/android/media/videoeditor/Effect.java +9 −4 Original line number Diff line number Diff line Loading @@ -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 */ Loading @@ -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); } /** Loading @@ -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); } /** Loading @@ -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); } /** Loading
media/java/android/media/videoeditor/MediaImageItem.java +37 −3 Original line number Diff line number Diff line Loading @@ -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(); } } Loading
media/java/android/media/videoeditor/MediaItem.java +34 −0 Original line number Diff line number Diff line Loading @@ -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. */ Loading
media/java/android/media/videoeditor/MediaVideoItem.java +40 −3 Original line number Diff line number Diff line Loading @@ -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(); } } Loading
media/java/android/media/videoeditor/Overlay.java +8 −3 Original line number Diff line number Diff line Loading @@ -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); } /** Loading @@ -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); } /** Loading @@ -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