19bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava/* 29bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Copyright (C) 2010 The Android Open Source Project 39bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 49bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Licensed under the Apache License, Version 2.0 (the "License"); 59bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * you may not use this file except in compliance with the License. 69bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * You may obtain a copy of the License at 79bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 89bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * http://www.apache.org/licenses/LICENSE-2.0 99bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Unless required by applicable law or agreed to in writing, software 119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * distributed under the License is distributed on an "AS IS" BASIS, 129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * See the License for the specific language governing permissions and 149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * limitations under the License. 159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavapackage android.media.videoeditor; 199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.io.File; 219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.util.ArrayList; 229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.util.List; 239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.MediaArtistNativeHelper.AlphaMagicSettings; 259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.MediaArtistNativeHelper.AudioTransition; 269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.MediaArtistNativeHelper.ClipSettings; 279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.MediaArtistNativeHelper.EditSettings; 289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.MediaArtistNativeHelper.EffectSettings; 299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.MediaArtistNativeHelper.SlideTransitionSettings; 309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.MediaArtistNativeHelper.TransitionSettings; 319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.MediaArtistNativeHelper.VideoTransition; 329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava/** 349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * This class is super class for all transitions. Transitions (with the 359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * exception of TransitionAtStart and TransitioAtEnd) can only be inserted 369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * between media items. 379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Adding a transition between MediaItems makes the 399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * duration of the storyboard shorter by the duration of the Transition itself. 409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * As a result, if the duration of the transition is larger than the smaller 419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * duration of the two MediaItems associated with the Transition, an exception 429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * will be thrown. 439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * During a transition, the audio track are cross-fading 459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * automatically. {@hide} 469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavapublic abstract class Transition { 489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * The transition behavior 509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava private static final int BEHAVIOR_MIN_VALUE = 0; 529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** The transition starts slowly and speed up */ 549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public static final int BEHAVIOR_SPEED_UP = 0; 559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** The transition start fast and speed down */ 569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public static final int BEHAVIOR_SPEED_DOWN = 1; 579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** The transition speed is constant */ 589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public static final int BEHAVIOR_LINEAR = 2; 599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** The transition starts fast and ends fast with a slow middle */ 609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public static final int BEHAVIOR_MIDDLE_SLOW = 3; 619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** The transition starts slowly and ends slowly with a fast middle */ 629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public static final int BEHAVIOR_MIDDLE_FAST = 4; 639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava private static final int BEHAVIOR_MAX_VALUE = 4; 659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * The unique id of the transition 689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava private final String mUniqueId; 709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * The transition is applied at the end of this media item 739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava private final MediaItem mAfterMediaItem; 759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * The transition is applied at the beginning of this media item 779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava private final MediaItem mBeforeMediaItem; 799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * The transition behavior 829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava protected final int mBehavior; 849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * The transition duration 879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava protected long mDurationMs; 899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * The transition filename 929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava protected String mFilename; 949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava protected MediaArtistNativeHelper mNativeHelper; 969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * An object of this type cannot be instantiated by using the default 989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * constructor 999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 1009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava @SuppressWarnings("unused") 1019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava private Transition() { 1029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava this(null, null, null, 0, 0); 1039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 1049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 1059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 1069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Constructor 1079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 1089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @param transitionId The transition id 1099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @param afterMediaItem The transition is applied to the end of this 1109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * media item 1119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @param beforeMediaItem The transition is applied to the beginning of 1129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * this media item 1139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @param durationMs The duration of the transition in milliseconds 1149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @param behavior The transition behavior 1159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 1169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava protected Transition(String transitionId, MediaItem afterMediaItem, 1179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava MediaItem beforeMediaItem,long durationMs, 1189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava int behavior) { 1199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (behavior < BEHAVIOR_MIN_VALUE || behavior > BEHAVIOR_MAX_VALUE) { 1209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava throw new IllegalArgumentException("Invalid behavior: " + behavior); 1219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 1229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if ((afterMediaItem == null) && (beforeMediaItem == null)) { 1239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava throw new IllegalArgumentException("Null media items"); 1249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 1259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mUniqueId = transitionId; 1269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mAfterMediaItem = afterMediaItem; 1279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mBeforeMediaItem = beforeMediaItem; 1289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mDurationMs = durationMs; 1299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mBehavior = behavior; 1309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mNativeHelper = null; 1319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (durationMs > getMaximumDuration()) { 1329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava throw new IllegalArgumentException("The duration is too large"); 1339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 134e7defc29750e5e201a5041d0fce1ffca9e305229Rajneesh Chowdury if (afterMediaItem != null) { 135e7defc29750e5e201a5041d0fce1ffca9e305229Rajneesh Chowdury mNativeHelper = afterMediaItem.getNativeContext(); 136e7defc29750e5e201a5041d0fce1ffca9e305229Rajneesh Chowdury }else { 137e7defc29750e5e201a5041d0fce1ffca9e305229Rajneesh Chowdury mNativeHelper = beforeMediaItem.getNativeContext(); 138e7defc29750e5e201a5041d0fce1ffca9e305229Rajneesh Chowdury } 1399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 1409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 1419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 1429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Get the ID of the transition. 1439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 1449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @return The ID of the transition 1459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 1469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public String getId() { 1479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return mUniqueId; 1489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 1499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 1509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 1519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Get the media item at the end of which the transition is applied. 1529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 1539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @return The media item at the end of which the transition is applied 1549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 1559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public MediaItem getAfterMediaItem() { 1569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return mAfterMediaItem; 1579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 1589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 1599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 1609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Get the media item at the beginning of which the transition is applied. 1619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 1629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @return The media item at the beginning of which the transition is 1639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * applied 1649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 1659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public MediaItem getBeforeMediaItem() { 1669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return mBeforeMediaItem; 1679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 1689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 1699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 1709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Set the duration of the transition. 1719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 1729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @param durationMs the duration of the transition in milliseconds 1739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 1749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public void setDuration(long durationMs) { 1759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (durationMs > getMaximumDuration()) { 1769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava throw new IllegalArgumentException("The duration is too large"); 1779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 1789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 1799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mDurationMs = durationMs; 1809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava invalidate(); 18106a087a52b35f6cc9096a9a60c924bb765a5a746Rajneesh Chowdury mNativeHelper.setGeneratePreview(true); 1829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 1839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 1849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 1859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Get the duration of the transition. 1869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 1879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @return the duration of the transition in milliseconds 1889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 1899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public long getDuration() { 1909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return mDurationMs; 1919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 1929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 1939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 1949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * The duration of a transition cannot be greater than half of the minimum 1959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * duration of the bounding media items. 1969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 1979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @return The maximum duration of this transition 1989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 1999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public long getMaximumDuration() { 2009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (mAfterMediaItem == null) { 2019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return mBeforeMediaItem.getTimelineDuration() / 2; 2029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } else if (mBeforeMediaItem == null) { 2039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return mAfterMediaItem.getTimelineDuration() / 2; 2049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } else { 2059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return (Math.min(mAfterMediaItem.getTimelineDuration(), 2069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mBeforeMediaItem.getTimelineDuration()) / 2); 2079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 2089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 2099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 2109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 2119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Get the behavior of the transition. 2129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 2139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @return The behavior 2149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 2159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public int getBehavior() { 2169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return mBehavior; 2179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 2189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 2199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 2209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Get the transition data. 2219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 2229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @return The transition data in TransitionSettings object 2239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * {@link android.media.videoeditor.MediaArtistNativeHelper.TransitionSettings} 2249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 2259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava TransitionSettings getTransitionSettings() { 2269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava TransitionAlpha transitionAlpha = null; 2279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava TransitionSliding transitionSliding = null; 2289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava TransitionCrossfade transitionCrossfade = null; 2299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava TransitionFadeBlack transitionFadeBlack = null; 2309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava TransitionSettings transitionSetting = null; 2319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting = new TransitionSettings(); 2329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.duration = (int)getDuration(); 2339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (this instanceof TransitionAlpha) { 2349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionAlpha = (TransitionAlpha)this; 2359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.videoTransitionType = VideoTransition.ALPHA_MAGIC; 2369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.audioTransitionType = AudioTransition.CROSS_FADE; 2379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.transitionBehaviour = mNativeHelper 2389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava .getVideoTransitionBehaviour(transitionAlpha.getBehavior()); 2399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.alphaSettings = new AlphaMagicSettings(); 2409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.slideSettings = null; 2419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.alphaSettings.file = transitionAlpha.getPNGMaskFilename(); 2429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.alphaSettings.blendingPercent = transitionAlpha.getBlendingPercent(); 2439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.alphaSettings.invertRotation = transitionAlpha.isInvert(); 2449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.alphaSettings.rgbWidth = transitionAlpha.getRGBFileWidth(); 2459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.alphaSettings.rgbHeight = transitionAlpha.getRGBFileHeight(); 2469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 2479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } else if (this instanceof TransitionSliding) { 2489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSliding = (TransitionSliding)this; 2499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.videoTransitionType = VideoTransition.SLIDE_TRANSITION; 2509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.audioTransitionType = AudioTransition.CROSS_FADE; 2519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.transitionBehaviour = mNativeHelper 2529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava .getVideoTransitionBehaviour(transitionSliding.getBehavior()); 2539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.alphaSettings = null; 2549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.slideSettings = new SlideTransitionSettings(); 2559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.slideSettings.direction = mNativeHelper 2569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava .getSlideSettingsDirection(transitionSliding.getDirection()); 2579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } else if (this instanceof TransitionCrossfade) { 2589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionCrossfade = (TransitionCrossfade)this; 2599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.videoTransitionType = VideoTransition.CROSS_FADE; 2609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.audioTransitionType = AudioTransition.CROSS_FADE; 2619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.transitionBehaviour = mNativeHelper 2629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava .getVideoTransitionBehaviour(transitionCrossfade.getBehavior()); 2639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.alphaSettings = null; 2649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.slideSettings = null; 2659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } else if (this instanceof TransitionFadeBlack) { 2669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionFadeBlack = (TransitionFadeBlack)this; 2679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.videoTransitionType = VideoTransition.FADE_BLACK; 2689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.audioTransitionType = AudioTransition.CROSS_FADE; 2699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.transitionBehaviour = mNativeHelper 2709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava .getVideoTransitionBehaviour(transitionFadeBlack.getBehavior()); 2719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.alphaSettings = null; 2729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting.slideSettings = null; 2739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 2749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 2759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return transitionSetting; 2769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 2779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 2789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 2799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Checks if the effect and overlay applied on a media item 2809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * overlaps with the transition on media item. 2819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 2829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @param m The media item 2839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @param clipSettings The ClipSettings object 2849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @param clipNo The clip no.(out of the two media items 2859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * associated with current transition)for which the effect 2869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * clip should be generated 2879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @return List of effects that overlap with the transition 2889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 2899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 2909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava List<EffectSettings> isEffectandOverlayOverlapping(MediaItem m, ClipSettings clipSettings, 2919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava int clipNo) { 2929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava List<Effect> effects; 2939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava List<Overlay> overlays; 2949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava List<EffectSettings> effectSettings = new ArrayList<EffectSettings>(); 2959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava EffectSettings tmpEffectSettings; 2969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 297ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi overlays = m.getAllOverlays(); 298ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi for (Overlay overlay : overlays) { 299ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi tmpEffectSettings = mNativeHelper.getOverlaySettings((OverlayFrame)overlay); 300ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi mNativeHelper.adjustEffectsStartTimeAndDuration(tmpEffectSettings, 301ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi clipSettings.beginCutTime, clipSettings.endCutTime); 302ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi if (tmpEffectSettings.duration != 0) { 303ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi effectSettings.add(tmpEffectSettings); 304ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi } 305ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi } 306ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi 3079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava effects = m.getAllEffects(); 3089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava for (Effect effect : effects) { 3099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (effect instanceof EffectColor) { 3109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava tmpEffectSettings = mNativeHelper.getEffectSettings((EffectColor)effect); 3119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mNativeHelper.adjustEffectsStartTimeAndDuration(tmpEffectSettings, 3129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings.beginCutTime, clipSettings.endCutTime); 3139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (tmpEffectSettings.duration != 0) { 3149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (m instanceof MediaVideoItem) { 3159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava tmpEffectSettings.fiftiesFrameRate = mNativeHelper 3169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava .GetClosestVideoFrameRate(((MediaVideoItem)m).getFps()); 3179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 3189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava effectSettings.add(tmpEffectSettings); 3199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 3209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 3219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 322ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi 3239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return effectSettings; 3249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 3259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 3269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 3279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Generate the video clip for the specified transition. This method may 3289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * block for a significant amount of time. Before the method completes 3299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * execution it sets the mFilename to the name of the newly generated 3309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * transition video clip file. 3319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 3329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava void generate() { 3339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava MediaItem m1 = this.getAfterMediaItem(); 3349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava MediaItem m2 = this.getBeforeMediaItem(); 3359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava ClipSettings clipSettings1 = new ClipSettings(); 3369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava ClipSettings clipSettings2 = new ClipSettings(); 3379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava TransitionSettings transitionSetting = null; 3389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava EditSettings editSettings = new EditSettings(); 3399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava List<EffectSettings> effectSettings_clip1; 3409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava List<EffectSettings> effectSettings_clip2; 3419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 3429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava String output = null; 3439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 3449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (mNativeHelper == null) { 3459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (m1 != null) 3469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mNativeHelper = m1.getNativeContext(); 3479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava else if (m2 != null) 3489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mNativeHelper = m2.getNativeContext(); 3499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 3509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava transitionSetting = getTransitionSettings(); 3519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (m1 != null && m2 != null) { 3529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /* transition between media items */ 3539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings1 = m1.getClipSettings(); 3549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings2 = m2.getClipSettings(); 3559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings1.beginCutTime = (int)(clipSettings1.endCutTime - 3569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava this.mDurationMs); 3579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings2.endCutTime = (int)(clipSettings2.beginCutTime + 3589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava this.mDurationMs); 3599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /* 3609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Check how many effects and overlays overlap with transition and 3619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * generate effect clip first if there is any overlap 3629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 3639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava effectSettings_clip1 = isEffectandOverlayOverlapping(m1, clipSettings1,1); 3649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava effectSettings_clip2 = isEffectandOverlayOverlapping(m2, clipSettings2,2); 3659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava for (int index = 0; index < effectSettings_clip2.size(); index++ ) { 3669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava effectSettings_clip2.get(index).startTime += this.mDurationMs; 3679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 3689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.effectSettingsArray = 3699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava new EffectSettings[effectSettings_clip1.size() 3709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava + effectSettings_clip2.size()]; 3719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava int i=0,j=0; 3729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava while (i < effectSettings_clip1.size()) { 3739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.effectSettingsArray[j] = effectSettings_clip1.get(i); 3749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava i++; 3759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava j++; 3769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 3779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava i=0; 3789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava while (i < effectSettings_clip2.size()) { 3799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.effectSettingsArray[j] = effectSettings_clip2.get(i); 3809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava i++; 3819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava j++; 3829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 3839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } else if (m1 == null && m2 != null) { 3849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /* begin transition at first media item */ 3859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava m2.generateBlankFrame(clipSettings1); 3869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings2 = m2.getClipSettings(); 3879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings1.endCutTime = (int)(this.mDurationMs + 50); 3889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings2.endCutTime = (int)(clipSettings2.beginCutTime + 3899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava this.mDurationMs); 3909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /* 3919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Check how many effects and overlays overlap with transition and 3929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * generate effect clip first if there is any overlap 3939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 3949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava effectSettings_clip2 = isEffectandOverlayOverlapping(m2, clipSettings2,2); 3959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava for (int index = 0; index < effectSettings_clip2.size(); index++ ) { 3969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava effectSettings_clip2.get(index).startTime += this.mDurationMs; 3979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 3989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.effectSettingsArray = new EffectSettings[effectSettings_clip2.size()]; 3999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava int i=0, j=0; 4009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava while (i < effectSettings_clip2.size()) { 4019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.effectSettingsArray[j] = effectSettings_clip2.get(i); 4029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava i++; 4039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava j++; 4049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } else if (m1 != null && m2 == null) { 4069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /* end transition at last media item */ 4079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings1 = m1.getClipSettings(); 4089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava m1.generateBlankFrame(clipSettings2); 4099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings1.beginCutTime = (int)(clipSettings1.endCutTime - 4109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava this.mDurationMs); 4119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava clipSettings2.endCutTime = (int)(this.mDurationMs + 50); 4129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /* 4139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Check how many effects and overlays overlap with transition and 4149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * generate effect clip first if there is any overlap 4159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 4169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava effectSettings_clip1 = isEffectandOverlayOverlapping(m1, clipSettings1,1); 4179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.effectSettingsArray = new EffectSettings[effectSettings_clip1.size()]; 4189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava int i=0,j=0; 4199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava while (i < effectSettings_clip1.size()) { 4209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.effectSettingsArray[j] = effectSettings_clip1.get(i); 4219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava i++; 4229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava j++; 4239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 4269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.clipSettingsArray = new ClipSettings[2]; 4279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.clipSettingsArray[0] = clipSettings1; 4289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.clipSettingsArray[1] = clipSettings2; 4299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.backgroundMusicSettings = null; 4309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.transitionSettingsArray = new TransitionSettings[1]; 4319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava editSettings.transitionSettingsArray[0] = transitionSetting; 4329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava output = mNativeHelper.generateTransitionClip(editSettings, mUniqueId, 4339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava m1, m2,this); 4349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava setFilename(output); 4359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 4379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 4389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 4399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Set the transition filename. 4409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 4419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava void setFilename(String filename) { 4429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mFilename = filename; 4439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 4459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 4469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Get the transition filename. 4479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 4489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava String getFilename() { 4499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return mFilename; 4509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 4529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 4539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Remove any resources associated with this transition 4549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 4559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava void invalidate() { 4569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (mFilename != null) { 4579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava new File(mFilename).delete(); 4589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava mFilename = null; 4599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 4629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /** 4639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Check if the transition is generated. 4649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * 4659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * @return true if the transition is generated 4669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 4679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava boolean isGenerated() { 4689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return (mFilename != null); 4699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 4719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /* 4729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * {@inheritDoc} 4739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 4749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava @Override 4759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public boolean equals(Object object) { 4769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava if (!(object instanceof Transition)) { 4779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return false; 4789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return mUniqueId.equals(((Transition)object).mUniqueId); 4809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 4829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /* 4839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * {@inheritDoc} 4849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 4859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava @Override 4869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava public int hashCode() { 4879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava return mUniqueId.hashCode(); 4889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava } 4899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava} 490