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