1ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/* 2ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Copyright (C) 2010 The Android Open Source Project 3ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Licensed under the Apache License, Version 2.0 (the "License"); 5ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * you may not use this file except in compliance with the License. 6ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * You may obtain a copy of the License at 7ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 8ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * http://www.apache.org/licenses/LICENSE-2.0 9ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 10ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Unless required by applicable law or agreed to in writing, software 11ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * distributed under the License is distributed on an "AS IS" BASIS, 12ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * See the License for the specific language governing permissions and 14ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * limitations under the License. 15ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 16ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1781393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschipackage com.android.videoeditor.service; 18ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1981393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschiimport com.android.videoeditor.EffectType; 20ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 21ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.graphics.Rect; 22ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.Effect; 23ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.EffectColor; 24ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.EffectKenBurns; 25ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 26ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/** 27ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * An effect can only be applied to a single media item. 28ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 29ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschipublic class MovieEffect { 30ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Instance variables 31ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private final String mUniqueId; 32ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private final int mType; 33ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private long mDurationMs; 34ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private long mStartTimeMs; 35ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private Rect mStartRect, mEndRect; 36ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 37ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 38ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Default constructor 39ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 40ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @SuppressWarnings("unused") 41ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private MovieEffect() { 42ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi this (null); 43ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 44ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 45ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 46ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Constructor 47ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 48ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param effect The effect 49ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 50ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MovieEffect(Effect effect) { 51ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mUniqueId = effect.getId(); 52ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mStartTimeMs = effect.getStartTime(); 53ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mDurationMs = effect.getDuration(); 54ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (effect instanceof EffectKenBurns) { 55ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mStartRect = ((EffectKenBurns)effect).getStartRect(); 5669dc69ef6942308d15d7d308d67ea1477325f09bGil Dobjanschi mEndRect = ((EffectKenBurns)effect).getEndRect(); 57ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 58ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mStartRect = null; 59ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mEndRect = null; 60ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 61ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 62ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mType = toType(effect); 63ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 64ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 65ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 66ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The effect type 67ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 68ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public int getType() { 69ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mType; 70ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 71ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 72ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The id of the effect 73ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 74ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public String getId() { 75ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mUniqueId; 76ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 77ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 78ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 79ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the duration of the effect. If a preview or export is in progress, 80ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * then this change is effective for next preview or export session. s 81ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 82ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs of the effect in milliseconds 83ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 84ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi void setDuration(long durationMs) { 85ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mDurationMs = durationMs; 86ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 87ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 88ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 89ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get the duration of the effect 90ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 91ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The duration of the effect in milliseconds 92ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 93ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public long getDuration() { 94ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mDurationMs; 95ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 96ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 97ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 98ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set start time of the effect. If a preview or export is in progress, then 99ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * this change is effective for next preview or export session. 100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param startTimeMs The start time of the effect relative to the beginning 102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * of the media item in milliseconds 103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi void setStartTime(long startTimeMs) { 105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mStartTimeMs = startTimeMs; 106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The start time in milliseconds 110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi long getStartTime() { 112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mStartTimeMs; 113ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the Ken Burns start and end rectangles 117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param startRect The start rectangle 119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param endRect The end rectangle 120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi void setRectangles(Rect startRect, Rect endRect) { 122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mStartRect = startRect; 123ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mEndRect = endRect; 124ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 125ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 126ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 127ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The start rectangle 128ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 129ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public Rect getStartRect() { 130ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mStartRect; 131ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The end rectangle 135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public Rect getEndRect() { 137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mEndRect; 138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get the effect type 142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param effect The effect 144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The effect type 146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static int toType(Effect effect) { 148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (effect instanceof EffectKenBurns) { 149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return EffectType.EFFECT_KEN_BURNS; 150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else if (effect instanceof EffectColor) { 151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final EffectColor colorEffect = (EffectColor)effect; 152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi switch (colorEffect.getType()) { 153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case EffectColor.TYPE_GRADIENT: { 154ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return EffectType.EFFECT_COLOR_GRADIENT; 155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case EffectColor.TYPE_SEPIA: { 158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return EffectType.EFFECT_COLOR_SEPIA; 159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 161ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case EffectColor.TYPE_NEGATIVE: { 162ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return EffectType.EFFECT_COLOR_NEGATIVE; 163ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 164ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 165ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case EffectColor.TYPE_COLOR: 166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi default: { 167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Unsupported color type effect: " + 168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi colorEffect.getType()); 169ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 170ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 171ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 172ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Unsupported effect: " + effect.getClass()); 173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @Override 177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public boolean equals(Object object) { 178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (!(object instanceof MovieEffect)) { 179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return false; 180ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 181ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mUniqueId.equals(((MovieEffect)object).mUniqueId); 182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @Override 185ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public int hashCode() { 186ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mUniqueId.hashCode(); 187ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 188ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi} 189