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