• 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 
18 package android.media.videoeditor;
19 
20 /**
21  * This is the super class for all effects. An effect can only be applied to a
22  * single media item.
23  * {@hide}
24  */
25 public abstract class Effect {
26     /**
27      *  Instance variables
28      */
29     private final String mUniqueId;
30     /**
31      *  The effect owner
32      */
33     private final MediaItem mMediaItem;
34 
35     protected long mDurationMs;
36     /**
37      *  The start time of the effect relative to the beginning
38      *  of the media item
39      */
40     protected long mStartTimeMs;
41 
42     /**
43      * Default constructor
44      */
45     @SuppressWarnings("unused")
Effect()46     private Effect() {
47         mMediaItem = null;
48         mUniqueId = null;
49         mStartTimeMs = 0;
50         mDurationMs = 0;
51     }
52 
53     /**
54      * Constructor
55      *
56      * @param mediaItem The media item owner
57      * @param effectId The effect id
58      * @param startTimeMs The start time relative to the media item to which it
59      *            is applied
60      * @param durationMs The effect duration in milliseconds
61      */
Effect(MediaItem mediaItem, String effectId, long startTimeMs, long durationMs)62     public Effect(MediaItem mediaItem, String effectId, long startTimeMs,
63                   long durationMs) {
64         if (mediaItem == null) {
65             throw new IllegalArgumentException("Media item cannot be null");
66         }
67 
68         if ((startTimeMs < 0) || (durationMs < 0)) {
69              throw new IllegalArgumentException("Invalid start time Or/And Duration");
70         }
71         if (startTimeMs + durationMs > mediaItem.getDuration()) {
72             throw new IllegalArgumentException("Invalid start time and duration");
73         }
74 
75         mMediaItem = mediaItem;
76         mUniqueId = effectId;
77         mStartTimeMs = startTimeMs;
78         mDurationMs = durationMs;
79     }
80 
81     /**
82      * Get the id of the effect.
83      *
84      * @return The id of the effect
85      */
getId()86     public String getId() {
87         return mUniqueId;
88     }
89 
90     /**
91      * Set the duration of the effect. If a preview or export is in progress,
92      * then this change is effective for next preview or export session.
93      *
94      * @param durationMs of the effect in milliseconds
95      */
setDuration(long durationMs)96     public void setDuration(long durationMs) {
97         if (durationMs <0) {
98             throw new IllegalArgumentException("Invalid duration");
99         }
100 
101         if (mStartTimeMs + durationMs > mMediaItem.getDuration()) {
102             throw new IllegalArgumentException("Duration is too large");
103         }
104 
105         getMediaItem().getNativeContext().setGeneratePreview(true);
106 
107         final long oldDurationMs = mDurationMs;
108         mDurationMs = durationMs;
109 
110         mMediaItem.invalidateTransitions(mStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
111     }
112 
113     /**
114      * Get the duration of the effect
115      *
116      * @return The duration of the effect in milliseconds
117      */
getDuration()118     public long getDuration() {
119         return mDurationMs;
120     }
121 
122     /**
123      * Set start time of the effect. If a preview or export is in progress, then
124      * this change is effective for next preview or export session.
125      *
126      * @param startTimeMs The start time of the effect relative to the beginning
127      *            of the media item in milliseconds
128      */
setStartTime(long startTimeMs)129     public void setStartTime(long startTimeMs) {
130         if (startTimeMs + mDurationMs > mMediaItem.getDuration()) {
131             throw new IllegalArgumentException("Start time is too large");
132         }
133 
134         getMediaItem().getNativeContext().setGeneratePreview(true);
135         final long oldStartTimeMs = mStartTimeMs;
136         mStartTimeMs = startTimeMs;
137 
138         mMediaItem.invalidateTransitions(oldStartTimeMs, mDurationMs, mStartTimeMs, mDurationMs);
139     }
140 
141     /**
142      * Get the start time of the effect
143      *
144      * @return The start time in milliseconds
145      */
getStartTime()146     public long getStartTime() {
147         return mStartTimeMs;
148     }
149 
150     /**
151      * Set the start time and duration
152      *
153      * @param startTimeMs start time in milliseconds
154      * @param durationMs The duration in milliseconds
155      */
setStartTimeAndDuration(long startTimeMs, long durationMs)156     public void setStartTimeAndDuration(long startTimeMs, long durationMs) {
157         if (startTimeMs + durationMs > mMediaItem.getDuration()) {
158             throw new IllegalArgumentException("Invalid start time or duration");
159         }
160 
161         getMediaItem().getNativeContext().setGeneratePreview(true);
162         final long oldStartTimeMs = mStartTimeMs;
163         final long oldDurationMs = mDurationMs;
164 
165         mStartTimeMs = startTimeMs;
166         mDurationMs = durationMs;
167 
168         mMediaItem.invalidateTransitions(oldStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
169     }
170 
171     /**
172      * Get the media item owner.
173      *
174      * @return The media item owner
175      */
getMediaItem()176     public MediaItem getMediaItem() {
177         return mMediaItem;
178     }
179 
180     /*
181      * {@inheritDoc}
182      */
183     @Override
equals(Object object)184     public boolean equals(Object object) {
185         if (!(object instanceof Effect)) {
186             return false;
187         }
188         return mUniqueId.equals(((Effect)object).mUniqueId);
189     }
190 
191     /*
192      * {@inheritDoc}
193      */
194     @Override
hashCode()195     public int hashCode() {
196         return mUniqueId.hashCode();
197     }
198 }
199