ApiService.java revision b1fd023531a65d0a15f665fd975791ea1b5f22c3
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 17ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschipackage com.google.videoeditor.service; 18ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 19ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.io.File; 20ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.io.FileNotFoundException; 21ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.io.IOException; 22ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.ArrayList; 23ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.Collections; 24ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.Comparator; 25ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.HashMap; 26ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.List; 27ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.Map; 28ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.Queue; 29ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.concurrent.LinkedBlockingQueue; 30ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 31ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.app.Service; 32ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.ContentValues; 33ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.Context; 34ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.Intent; 35ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.database.Cursor; 36ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.graphics.Bitmap; 37ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.graphics.Rect; 38ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.AudioTrack; 39ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.Effect; 40ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.EffectColor; 41ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.EffectKenBurns; 42ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.ExtractAudioWaveformProgressListener; 43ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.MediaImageItem; 44ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.MediaItem; 45ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.MediaProperties; 46ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.MediaVideoItem; 47ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.Overlay; 48ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.OverlayFrame; 49ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.Transition; 50ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.TransitionAlpha; 51ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.TransitionCrossfade; 52ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.TransitionFadeBlack; 53ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.TransitionSliding; 54ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.VideoEditor; 55ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.VideoEditorFactory; 56ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.WaveformData; 57ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.VideoEditor.ExportProgressListener; 58ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.VideoEditor.MediaProcessingProgressListener; 59ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.net.Uri; 60ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.os.Bundle; 61ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.os.Handler; 62ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.os.IBinder; 63ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.os.Looper; 64ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.provider.MediaStore; 65ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.provider.MediaStore.Audio; 66ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.provider.MediaStore.Images; 67ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.provider.MediaStore.Video; 68ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.util.Log; 69ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 70ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport com.google.videoeditor.R; 71ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport com.google.videoeditor.util.FileUtils; 72ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport com.google.videoeditor.util.ImageUtils; 73ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport com.google.videoeditor.util.MediaItemUtils; 74ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport com.google.videoeditor.util.StringUtils; 75ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 76ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/** 77ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * VideoEditor service API 78ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 79ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschipublic class ApiService extends Service { 80ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Logging 81ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String TAG = "VEApiService"; 82ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 83ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Additional updates 84ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static final int ACTION_UPDATE_FRAME = MediaProcessingProgressListener.ACTION_DECODE + 100; 85ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static final int ACTION_NO_FRAME_UPDATE = MediaProcessingProgressListener.ACTION_DECODE + 101; 86ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 87ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Parameters 88ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_OP = "op"; 89ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_REQUEST_ID = "rid"; 90ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_PROJECT_PATH = "project"; 91ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_FILENAME = "filename"; 92ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_STORYBOARD_ITEM_ID = "item_id"; 93ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_RELATIVE_STORYBOARD_ITEM_ID = "r_item_id"; 94ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_PROGRESS_VALUE = "prog_value"; 95ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_EXCEPTION = "ex"; 96ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_START_TIME = "s_time"; 97ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_END_TIME = "e_time"; 98ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_DURATION = "duration"; 99ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_WIDTH = "width"; 100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_HEIGHT = "height"; 101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_BITRATE = "bitrate"; 102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_MEDIA_ITEM_RENDERING_MODE = "rm"; 103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_MEDIA_ITEM_START_RECT = "start_rect"; 104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_MEDIA_ITEM_END_RECT = "end_rect"; 105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_EFFECT_TYPE = "e_type"; 106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_EFFECT_PARAM = "e_param"; 107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_TRANSITION_BEHAVIOR = "behavior"; 108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_TRANSITION_MASK = "t_mask"; 109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_TRANSITION_BLENDING = "t_blending"; 110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_TRANSITION_INVERT = "t_invert"; 111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_TRANSITION_DIRECTION = "t_dir"; 112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_INTENT = "req_intent"; 113ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_PROJECT_NAME = "name"; 114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_MOVIES_FILENAMES = "movies"; 115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_PHOTOS_FILENAMES = "images"; 116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_ASPECT_RATIO = "aspect_ratio"; 117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_BEGIN_BOUNDARY = "b_boundary"; 118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_END_BOUNDARY = "e_boundary"; 119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_ATTRIBUTES = "attributes"; 120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_VOLUME = "volume"; 121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_LOOP = "loop"; 122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_MUTE = "mute"; 123ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_DUCK = "duck"; 124ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_MOVIE_URI = "uri"; 125ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_THEME = "theme"; 126ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_ACTION = "action"; 127ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String PARAM_COUNT = "count"; 128ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 129ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Operations 130ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_CREATE = 1; 131ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_LOAD = 2; 132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_SAVE = 3; 133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_EXPORT = 4; 134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_CANCEL_EXPORT = 5; 135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_EXPORT_STATUS = 6; 136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_RELEASE = 8; 137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_DELETE = 9; 138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_SET_ASPECT_RATIO = 10; 139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_APPLY_THEME = 11; 140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_GENERATE_PREVIEW_PROGRESS = 12; 141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_VIDEO_EDITOR_LOAD_PROJECTS = 13; 142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_ADD_VIDEO_URI = 100; 144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_ADD_IMAGE_URI = 101; 145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_MOVE = 102; 146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_REMOVE = 103; 147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_SET_RENDERING_MODE = 104; 148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_SET_DURATION = 105; 149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_SET_BOUNDARIES = 106; 150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_SET_VOLUME = 107; 151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_SET_MUTE = 108; 152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM = 109; 153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM_STATUS = 110; 154ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_GET_THUMBNAIL = 111; 155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_MEDIA_ITEM_GET_THUMBNAILS = 112; 156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_EFFECT_ADD_COLOR = 200; 158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_EFFECT_ADD_IMAGE_KEN_BURNS = 201; 159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_EFFECT_REMOVE = 202; 160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 161ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_TRANSITION_INSERT_ALPHA = 300; 162ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_TRANSITION_INSERT_CROSSFADE = 301; 163ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_TRANSITION_INSERT_FADE_BLACK = 302; 164ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_TRANSITION_INSERT_SLIDING = 303; 165ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_TRANSITION_REMOVE = 304; 166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_TRANSITION_SET_DURATION = 305; 167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_TRANSITION_GET_THUMBNAIL = 306; 168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 169ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_OVERLAY_ADD = 400; 170ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_OVERLAY_REMOVE = 401; 171ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_OVERLAY_SET_START_TIME = 402; 172ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_OVERLAY_SET_DURATION = 403; 173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_OVERLAY_SET_ATTRIBUTES = 404; 174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_AUDIO_TRACK_ADD = 500; 176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_AUDIO_TRACK_REMOVE = 501; 177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_AUDIO_TRACK_SET_VOLUME = 502; 178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_AUDIO_TRACK_SET_MUTE = 503; 179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_AUDIO_TRACK_SET_BOUNDARIES = 505; 180ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_AUDIO_TRACK_SET_LOOP = 506; 181ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_AUDIO_TRACK_SET_DUCK = 507; 182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM = 508; 183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final int OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM_STATUS = 509; 184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 185516fd1bedc49dc893d4bfbb0281aabd121e1f4f4Gil Dobjanschi private static final int DUCK_THRESHOLD = 20; 186516fd1bedc49dc893d4bfbb0281aabd121e1f4f4Gil Dobjanschi private static final int DUCK_TRACK_VOLUME = 65; 187516fd1bedc49dc893d4bfbb0281aabd121e1f4f4Gil Dobjanschi // The default audio track volume 188516fd1bedc49dc893d4bfbb0281aabd121e1f4f4Gil Dobjanschi private static final int DEFAULT_AUDIO_TRACK_VOLUME = 50; 189516fd1bedc49dc893d4bfbb0281aabd121e1f4f4Gil Dobjanschi 190ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Static member variables 191ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final Map<String, Intent> mPendingIntents = new HashMap<String, Intent>(); 192ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final List<ApiServiceListener> mListeners = new ArrayList<ApiServiceListener>(); 193ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final IntentPool mIntentPool = new IntentPool(8); 194ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static VideoEditorProject mVideoProject; 195ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static VideoEditor mVideoEditor; 196ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static ServiceMediaProcessingProgressListener mGeneratePreviewListener; 197ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 198ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private ServiceThread mVideoThread; 199ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private ServiceThread mAudioThread; 200d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi private ServiceThread mThumbnailThread; 201ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private Handler mHandler; 202ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 203ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private final Runnable mStopRunnable = new Runnable() { 204ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 205ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 206ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 207ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void run() { 208ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mPendingIntents.size() == 0) { 209ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 210ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "Stop runnable: Stopping service"); 211ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 212ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi stopSelf(); 213ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 214ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 215ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }; 216ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 217ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 218ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Generate preview listener 219ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 220ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private final class ServiceMediaProcessingProgressListener 221ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi implements VideoEditor.MediaProcessingProgressListener { 222ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Instance variables 223ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private final String mProjectPath; 224ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 225ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 226ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Constructor 227ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 228ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 229ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 230ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public ServiceMediaProcessingProgressListener(String projectPath) { 231ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mProjectPath = projectPath; 232ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 233ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 234ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 235ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 236ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 237ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onProgress(Object item, int action, int progress) { 238ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(); 239ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_GENERATE_PREVIEW_PROGRESS); 240ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, mProjectPath); 241ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_ACTION, action); 242ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROGRESS_VALUE, progress); 243ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 244ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (item == null) { // Last callback uses null 245ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else if (item instanceof MediaItem) { 246ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, ((MediaItem)item).getId()); 247ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_ATTRIBUTES, MediaItem.class.getCanonicalName()); 248ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else if (item instanceof Transition) { 249ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, ((Transition)item).getId()); 250ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_ATTRIBUTES, Transition.class.getCanonicalName()); 251ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else if (item instanceof AudioTrack) { 252ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, ((AudioTrack)item).getId()); 253ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_ATTRIBUTES, AudioTrack.class.getCanonicalName()); 254ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 255ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.w(TAG, "Unsupported storyboard item type: " + item.getClass()); 256ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return; 257ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 258ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 259ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, null, null, null, null, true); 260ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 261ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 262ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 263ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 264ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The API service listener 265ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 266ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static class ApiServiceListener { 267ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 268ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The list of projects was loaded 269ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 270ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projects The array of projects 271ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception 272ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 273ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onProjectsLoaded(List<VideoEditorProject> projects, Exception exception) { 274ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 275ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 276ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 277ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The project edit state 278ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 279ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 280ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectEdited true if the project is edited 281ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 282ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onProjectEditState(String projectPath, boolean projectEdited) { 283ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 284ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 285ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 286ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A new project was created 287ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 288ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 289ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param project The VideoEditor project 290ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItems The list of media items 291ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTracks The list of audio tracks 292ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception that occurred 293ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 294ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorCreated(String projectPath, VideoEditorProject project, 295ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi List<MediaItem> mediaItems, List<AudioTrack> audioTracks, Exception exception) { 296ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 297ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 298ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 299ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The project was loaded 300ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 301ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 302ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param project The VideoEditor project 303ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItems The list of media items 304ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTracks The list of audio tracks 305ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception that occurred 306ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 307ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorLoaded(String projectPath, VideoEditorProject project, 308ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi List<MediaItem> mediaItems, List<AudioTrack> audioTracks, Exception exception) { 309ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 310ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 311ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 312ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The aspect ratio was set 313ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 314ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 315ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param aspectRatio The aspect ratio 316ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception that occurred 317ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 318ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorAspectRatioSet(String projectPath, int aspectRatio, 319ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Exception exception) { 320ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 321ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 322ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 323ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The specified theme was applied 324ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 325ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 326ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param theme The theme 327ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception that occurred 328ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 329ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorThemeApplied(String projectPath, String theme, 330ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Exception exception) { 331ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 332ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 333ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 334ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Generate preview progress status 335ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 336ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 337ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param className The class name 338ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param itemId The storyboard item id 339ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param action The action taken on the item 340ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param progress The export progress (0, 100) 341ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 342ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorGeneratePreviewProgress(String projectPath, String className, 343ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String itemId, int action, int progress) { 344ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 345ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 346ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 347ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Export progress status 348ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 349ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 350ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param filename The name of the file to export 351ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param progress The export progress (0, 100) 352ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 353ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorExportProgress(String projectPath, String filename, 354ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int progress) { 355ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 356ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 357ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 358ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Export completed callback 359ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 360ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 361ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param filename The name of the file to export 362ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception null if no exception has occurred (export succeeded) 363ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 364ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorExportComplete(String projectPath, String filename, 365ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Exception exception) { 366ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 367ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 368ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 369ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Export canceled callback 370ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 371ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 372ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param filename The name of the file to export 373ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 374ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorExportCanceled(String projectPath, String filename) { 375ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 376ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 377ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 378ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The VideoEditor state was saved 379ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 380ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 381ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred (if any) 382ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 383ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorSaved(String projectPath, Exception exception) { 384ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 385ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 386ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 387ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The VideoEditor stated was released 388ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 389ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 390ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred (if any) 391ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 392ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorReleased(String projectPath, Exception exception) { 393ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 394ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 395ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 396ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The VideoEditor stated was deleted. 397ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 398ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 399ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred (if any) 400ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 401ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onVideoEditorDeleted(String projectPath, Exception exception) { 402ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 403ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 404ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 405ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A new media item was added 406ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 407ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 408ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 409ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItem The newly added media item (null if an error occurred) 410ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param afterMediaId The media item id preceding the media item 411ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemClass The media item class 412ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param aspectRatio The aspectRatio 413ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 414ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 415ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onMediaItemAdded(String projectPath, String mediaItemId, 416ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MovieMediaItem mediaItem, String afterMediaId, Class<?> mediaItemClass, 417ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Integer aspectRatio, Exception exception) { 418ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 419ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 420ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 421ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A media item was moved 422ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 423ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 424ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item which moved 425ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param afterMediaItemId The id of the relative media item id 426ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 427ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 428ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onMediaItemMoved(String projectPath, String mediaItemId, 429ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String afterMediaItemId, Exception exception) { 430ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 431ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 432ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 433ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A media item was removed 434ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 435ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 436ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item which was removed 437ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transition The transition inserted at the removal position 438ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * if a theme is in use. 439ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 440ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 441ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onMediaItemRemoved(String projectPath, String mediaItemId, 442ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MovieTransition transition, Exception exception) { 443ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 444ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 445ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 446ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A media item rendering mode was set 447ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 448ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 449ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 450ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param renderingMode The rendering mode 451ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 452ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 453ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onMediaItemRenderingModeSet(String projectPath, String mediaItemId, 454ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int renderingMode, Exception exception) { 455ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 456ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 457ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 458ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A media item duration was set 459ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 460ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 461ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 462ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration of the image media item 463ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 464ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 465ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onMediaItemDurationSet(String projectPath, String mediaItemId, 466ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi long durationMs, Exception exception) { 467ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 468ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 469ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 470ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A media item boundaries was set 471ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 472ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 473ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 474ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param beginBoundaryMs The begin boundary 475ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param endBoundaryMs The end boundary 476ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 477ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 478ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onMediaItemBoundariesSet(String projectPath, String mediaItemId, 479ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi long beginBoundaryMs, long endBoundaryMs, Exception exception) { 480ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 481ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 482ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 483ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A media item thumbnail was extracted 484ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 485ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 486ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 487ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param thumbnail The bitmap thumbnail 488ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param timeMs The time position 489ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 490ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 491ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return true if the bitmap is used 492ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 493ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public boolean onMediaItemThumbnail(String projectPath, String mediaItemId, 494ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Bitmap thumbnail, long timeMs, Exception exception) { 495ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return false; 496ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 497ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 498ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 499ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A set of media item thumbnails were extracted 500ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 501ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 502ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 503ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param thumbnaisl The thumbnails array 504ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param startMs The start time position 505ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param endMs The end time position 506ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 507ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 508ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return true if the bitmap is used 509ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 510ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public boolean onMediaItemThumbnails(String projectPath, String mediaItemId, 511ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Bitmap[] thumbnails, long startMs, long endMs, Exception exception) { 512ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return false; 513ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 514ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 515ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 516ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Extract media item audio waveform progress callback 517ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 518ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 519ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 520ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param progress The progress (0, 100) 521ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 522ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onMediaItemExtractAudioWaveformProgress(String projectPath, 523ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, int progress) { 524ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 525ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 526ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 527ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The audio waveform of the specified media item completed 528ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 529ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 530ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the MediaItem 531ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 532ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 533ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onMediaItemExtractAudioWaveformComplete(String projectPath, 534ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, Exception exception) { 535ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 536ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 537ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 538ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A new transition was inserted 539ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 540ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 541ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transition The newly added transition 542ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param afterMediaId After the media id 543ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 544ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 545ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onTransitionInserted(String projectPath, MovieTransition transition, 546ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String afterMediaId, Exception exception) { 547ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 548ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 549ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 550ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A transition was removed 551ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 552ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 553ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The id of the transition which was removed 554ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 555ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 556ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onTransitionRemoved(String projectPath, String transitionId, 557ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Exception exception) { 558ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 559ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 560ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 561ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A transition duration was changed 562ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 563ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 564ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The id of the transition which was modified 565ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration in milliseconds 566ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 567ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 568ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onTransitionDurationSet(String projectPath, String transitionId, 569ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi long durationMs, Exception exception) { 570ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 571ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 572ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 573ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Two transition thumbnails were extracted 574ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 575ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 576ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The id of the transition 577ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param thumbnails The thumbnails array 578ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 579ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 580ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return true if the bitmap is used 581ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 582ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public boolean onTransitionThumbnails(String projectPath, String transitionId, 583ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Bitmap[] thumbnails, Exception exception) { 584ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return false; 585ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 586ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 587ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 588ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A new overlay was added 589ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 590ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 591ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param overlay The newly added overlay 592ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 593ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 594ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 595ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onOverlayAdded(String projectPath, MovieOverlay overlay, 596ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, Exception exception) { 597ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 598ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 599ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 600ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A overlay was removed 601ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 602ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 603ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param overlayId The id of the overlay 604ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 605ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 606ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 607ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onOverlayRemoved(String projectPath, String overlayId, 608ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, Exception exception) { 609ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 610ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 611ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 612ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The overlay start time was set 613ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 614ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 615ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param overlayId The id of the overlay 616ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 617ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param startTimeMs The start time in milliseconds 618ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 619ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 620ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onOverlayStartTimeSet(String projectPath, String overlayId, 621ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, long startTimeMs, Exception exception) { 622ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 623ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 624ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 625ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The overlay duration was set 626ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 627ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 628ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param overlayId The id of the overlay 629ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 630ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration in milliseconds 631ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 632ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 633ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onOverlayDurationSet(String projectPath, String overlayId, 634ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, long durationMs, Exception exception) { 635ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 636ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 637ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 638ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The overlay user attributes were set 639ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 640ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 641ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param overlayId The id of the overlay 642ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 643ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param userAttributes The user attributes 644ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 645ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 646ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onOverlayUserAttributesSet(String projectPath, String overlayId, 647ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, Bundle userAttributes, Exception exception) { 648ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 649ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 650ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 651ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A new effect was added 652ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 653ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 654ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param effect The newly added effect 655ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 656ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 657ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 658ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onEffectAdded(String projectPath, MovieEffect effect, 659ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, Exception exception) { 660ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 661ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 662ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 663ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * An effect was removed 664ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 665ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 666ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param effectId The id of the effect which was removed 667ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 668ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 669ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 670ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onEffectRemoved(String projectPath, String effectId, 671ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, Exception exception) { 672ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 673ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 674ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 675ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A new audio track was added 676ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 677ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 678ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrack The newly added audioTrack 679ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 680ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 681ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onAudioTrackAdded(String projectPath, MovieAudioTrack audioTrack, 682ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Exception exception) { 683ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 684ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 685ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 686ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * An audio track was removed 687ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 688ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 689ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track 690ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 691ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 692ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onAudioTrackRemoved(String projectPath, String audioTrackId, 693ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Exception exception) { 694ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 695ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 696ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 697ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * An audio track boundaries was set 698ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 699ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 700ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track 701ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param beginBoundaryMs The begin boundary 702ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param endBoundaryMs The end boundary 703ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 704ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 705ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onAudioTrackBoundariesSet(String projectPath, String audioTrackId, 706ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi long beginBoundaryMs, long endBoundaryMs, Exception exception) { 707ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 708ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 709ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 710ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Extract audio waveform progress callback 711ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 712ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 713ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track 714ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param progress The progress (0, 100) 715ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 716ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onAudioTrackExtractAudioWaveformProgress(String projectPath, 717ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String audioTrackId, int progress) { 718ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 719ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 720ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 721ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The audio track audio waveform of the specified audio track completed 722ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 723ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 724ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track 725ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception which occurred 726ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 727ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onAudioTrackExtractAudioWaveformComplete(String projectPath, 728ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String audioTrackId, Exception exception) { 729ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 730ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 731ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 732ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 733ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return A unique id 734ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 735ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static String generateId() { 736ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return StringUtils.randomString(6); 737ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 738ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 739ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 740ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Register a listener 741ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 742ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param listener The listener 743ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 744ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void registerListener(ApiServiceListener listener) { 745ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mListeners.add(listener); 746ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 747ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 748ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 749ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Unregister a listener 750ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 751ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param listener The listener 752ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 753ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void unregisterListener(ApiServiceListener listener) { 754ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mListeners.remove(listener); 755ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 756ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 757ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 758ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Load the projects 759ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 760ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 761ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 762ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void loadProjects(Context context) { 763ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 764ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_LOAD_PROJECTS); 765ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 766ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 767ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 768ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 769ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 770ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Create a new VideoEditor project 771ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 772ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 773ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 774ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectName The project name 775ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param movies The array of movie file names to add to the newly 776ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * created project 777ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param photos The array of photo file names to add to the newly 778ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * created project 779ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param themeType The theme type 780ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 781ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void createVideoEditor(Context context, String projectPath, String projectName, 782ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String[] movies, String[] photos, String themeType) { 783ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 784ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_CREATE); 785ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 786ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_NAME, projectName); 787ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_MOVIES_FILENAMES, movies); 788ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PHOTOS_FILENAMES, photos); 789ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_THEME, themeType); 790ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 791ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 792ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 793ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 794ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 795ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Create a new VideoEditor project 796ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 797ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 798ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 799ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 800ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void loadVideoEditor(Context context, String projectPath) { 801ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 802ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_LOAD); 803ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 804ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 805ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 806ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 807ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 808ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 809ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Export the VideoEditor movie 810ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 811ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 812ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 813ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param filename The export filename 814ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param height The output movie height 815ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param bitrate The output movie bitrate 816ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 817ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void exportVideoEditor(Context context, String projectPath, String filename, 818ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int height, int bitrate) { 819ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 820ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_EXPORT); 821ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 822ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_FILENAME, filename); 823ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_HEIGHT, height); 824ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_BITRATE, bitrate); 825ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 826ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 827ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 828ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 829ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 830ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Check if export is pending 831ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 832ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 833ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param filename The export filename 834ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 835ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return true if the export is pending 836ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 837ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static boolean isVideoEditorExportPending(String projectPath, String filename) { 838ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (Intent intent : mPendingIntents.values()) { 839ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int op = intent.getIntExtra(PARAM_OP, -1); 840ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (op == OP_VIDEO_EDITOR_EXPORT) { 841ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String pp = intent.getStringExtra(PARAM_PROJECT_PATH); 842ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (pp.equals(projectPath)) { 843ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String fn = intent.getStringExtra(PARAM_FILENAME); 844ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (fn.equals(filename)) { 845ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return true; 846ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 847ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 848ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 849ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 850ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 851ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return false; 852ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 853ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 854ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 855ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Cancel the export of the specified VideoEditor movie 856ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 857ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 858ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 859ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param filename The export filename 860ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 861ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void cancelExportVideoEditor(Context context, String projectPath, 862ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String filename) { 863ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 864ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_CANCEL_EXPORT); 865ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 866ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_FILENAME, filename); 867ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 868ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 869ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 870ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 871ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 872ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Change the aspect ratio 873ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 874ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 875ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 876ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param aspectRatio The aspect ratio 877ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 878ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setAspectRatio(Context context, String projectPath, int aspectRatio) { 879ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 880ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_SET_ASPECT_RATIO); 881ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 882ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_ASPECT_RATIO, aspectRatio); 883ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 884ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 885ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 886ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 887ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 888ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Apply a theme 889ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 890ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 891ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 892ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param theme The theme 893ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 894ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void applyTheme(Context context, String projectPath, String theme) { 895ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 896ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_APPLY_THEME); 897ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 898ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_THEME, theme); 899ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 900ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 901ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 902ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 903ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 904ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Check if the service is busy modifying the timeline. While 905ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * the video editor is busy the application should not attempt 906ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * to preview the movie. 907ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 908ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 909ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 910ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return true if the video editor is busy 911ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 912ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static boolean isProjectEdited(String projectPath) { 913ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (Intent intent : mPendingIntents.values()) { 914ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int op = intent.getIntExtra(PARAM_OP, -1); 915ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi switch (op) { 916ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // When these operations are pending the video editor is not busy 917ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_LOAD_PROJECTS: 918ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_SAVE: 919ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_VOLUME: 920ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_MUTE: 921ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM: 922ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM_STATUS: 923ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_GET_THUMBNAIL: 924ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_GET_THUMBNAILS: 925ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_GET_THUMBNAIL: 926ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_VOLUME: 927ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_MUTE: 928ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM: 929ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM_STATUS: { 930ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 931ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 932ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 933ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi default: { 934ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String pp = intent.getStringExtra(PARAM_PROJECT_PATH); 935ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (pp.equals(projectPath)) { 936ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return true; 937ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 938ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 939ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 940ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 941ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 942ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 943ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return false; 944ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 945ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 946ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 947ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Save the VideoEditor project 948ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 949ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 950ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 951ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 952ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void saveVideoEditor(Context context, String projectPath) { 953ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 954ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_SAVE); 955ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 956ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 957ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 958ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 959ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 960ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 961ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Release the VideoEditor project 962ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 963ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 964ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 965ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 966ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void releaseVideoEditor(Context context, String projectPath) { 967ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 968ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_RELEASE); 969ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 970ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 971ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 972ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 973ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 974ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 975ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Delete the project specified by the project path 976ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 977ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 978ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 979ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 980ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void deleteProject(Context context, String projectPath) { 981ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 982ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_DELETE); 983ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 984ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 985ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 986ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 987ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 988ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 989ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Add a new video media item after the specified media item id 990ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 991ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 992ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 993ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The mediaItem id 994ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param afterMediaItemId The id of the media item preceding the media item 995ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param uri The media item URI 996ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param renderingMode The rendering mode 997ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param themeId The theme id 998ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 999ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void addMediaItemVideoUri(Context context, String projectPath, 1000ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, String afterMediaItemId, Uri uri, int renderingMode, 1001ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String themeId) { 1002ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1003ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_ADD_VIDEO_URI); 1004ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1005ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1006ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, afterMediaItemId); 1007ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_FILENAME, uri); 1008ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_MEDIA_ITEM_RENDERING_MODE, renderingMode); 1009ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_THEME, themeId); 1010ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1011ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1012ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1013ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1014ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1015ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Add a new image media item after the specified media item id 1016ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1017ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1018ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1019ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The mediaItem id 1020ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param afterMediaItemId The id of the media item preceding the media item 1021ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param uri The media item URI 1022ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param renderingMode The rendering mode 1023ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration of the item (for images only, ignored for videos) 1024ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param themeId The theme id 1025ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1026ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void addMediaItemImageUri(Context context, String projectPath, 1027ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, String afterMediaItemId, Uri uri, int renderingMode, 1028ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi long durationMs, String themeId) { 1029ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1030ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_ADD_IMAGE_URI); 1031ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1032ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1033ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, afterMediaItemId); 1034ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_FILENAME, uri); 1035ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_MEDIA_ITEM_RENDERING_MODE, renderingMode); 1036ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1037ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_THEME, themeId); 1038ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1039ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1040ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1041ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1042ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1043ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Move a media item after the specified media id 1044ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1045ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1046ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1047ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item to move 1048ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param afterMediaItemId The id of the relative media item 1049ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param themeId The theme id 1050ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1051ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void moveMediaItem(Context context, String projectPath, 1052ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, String afterMediaItemId, String themeId) { 1053ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1054ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_MOVE); 1055ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1056ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1057ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, afterMediaItemId); 1058ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_THEME, themeId); 1059ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1060ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1061ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1062ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1063ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1064ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Remove a media item 1065ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1066ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1067ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1068ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item to remove 1069ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param themeId The theme id 1070ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1071ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void removeMediaItem(Context context, String projectPath, String mediaItemId, 1072ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String themeId) { 1073ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1074ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_REMOVE); 1075ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1076ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1077ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_THEME, themeId); 1078ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1079ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1080ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1081ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1082ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1083ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the rendering mode for a media item 1084ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1085ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1086ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1087ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 1088ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1089ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setMediaItemRenderingMode(Context context, String projectPath, 1090ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, int renderingMode) { 1091ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1092ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_SET_RENDERING_MODE); 1093ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1094ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1095ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_MEDIA_ITEM_RENDERING_MODE, renderingMode); 1096ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1097ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1098ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1099ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get the thumbnail of the specified size 1102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 1106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param width The width 1107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param height The height 1108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param timeMs The time position 1109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void getMediaItemThumbnail(Context context, String projectPath, 1111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, int width, int height, long timeMs) { 1112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1113ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_GET_THUMBNAIL); 1114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_WIDTH, width); 1117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_HEIGHT, height); 1118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_START_TIME, timeMs); 1119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1123ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1124ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get the thumbnails of the specified size 1125ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1126ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1127ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1128ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 1129ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param width The width 1130ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param height The height 1131ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param startMs The start time in milliseconds 1132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param endMs The end time in milliseconds 1133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param count The number of thumbnails 1134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void getMediaItemThumbnails(Context context, String projectPath, 1136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, int width, int height, long startMs, long endMs, int count) { 1137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_GET_THUMBNAILS); 1139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_WIDTH, width); 1142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_HEIGHT, height); 1143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_START_TIME, startMs); 1144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_END_TIME, endMs); 1145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_COUNT, count); 1146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the media item duration 1152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1154ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 1156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The media item duration 1157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setMediaItemDuration(Context context, String projectPath, 1159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, long durationMs) { 1160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1161ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_SET_DURATION); 1162ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1163ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1164ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1165ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1169ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1170ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the media item boundaries 1171ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1172ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 1175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param beginBoundaryMs The media item begin boundary 1176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param endBoundaryMs The media item end boundary 1177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setMediaItemBoundaries(Context context, String projectPath, 1179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, long beginBoundaryMs, long endBoundaryMs) { 1180ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1181ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_SET_BOUNDARIES); 1182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_BEGIN_BOUNDARY, beginBoundaryMs); 1185ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_END_BOUNDARY, endBoundaryMs); 1186ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1187ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1188ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1189ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1190ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1191ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the media item volume (MediaVideoItem only) 1192ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1193ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1194ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1195ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 1196ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param volumePercentage The volume 1197ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1198ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setMediaItemVolume(Context context, String projectPath, 1199ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, int volumePercentage) { 1200ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1201ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_SET_VOLUME); 1202ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1203ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1204ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_VOLUME, volumePercentage); 1205ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1206ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1207ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1208ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1209ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1210ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Mute/unmute the media item (MediaVideoItem only) 1211ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1212ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1213ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1214ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 1215ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param muted true to mute the media item 1216ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1217ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setMediaItemMute(Context context, String projectPath, String mediaItemId, 1218ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi boolean muted) { 1219ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1220ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_SET_MUTE); 1221ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1222ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1223ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_MUTE, muted); 1224ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1225ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1226ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1227ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1228ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1229ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Extract the media item audio waveform 1230ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1231ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1232ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1233ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The id of the media item 1234ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1235ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void extractMediaItemAudioWaveform(Context context, String projectPath, 1236ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId) { 1237ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (isMediaItemAudioWaveformPending(projectPath, mediaItemId)) { 1238ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return; 1239ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1240ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1241ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1242ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM); 1243ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1244ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItemId); 1245ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1246ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1247ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1248ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1249ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1250ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Check if extract audio waveform is pending for the specified MediaItem 1251ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1252ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1253ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The MediaItem id 1254ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1255ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return true if the extract audio waveform is pending 1256ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1257ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static boolean isMediaItemAudioWaveformPending(String projectPath, String mediaItemId) { 1258ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (Intent intent : mPendingIntents.values()) { 1259ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int op = intent.getIntExtra(PARAM_OP, -1); 1260ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (op == OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM) { 1261ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String pp = intent.getStringExtra(PARAM_PROJECT_PATH); 1262ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (pp.equals(projectPath)) { 1263ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mid = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 1264ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mid.equals(mediaItemId)) { 1265ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return true; 1266ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1267ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1268ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1269ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1270ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1271ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return false; 1272ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1273ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1274ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1275ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Insert an alpha transition after the specified media item 1276ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1277ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1278ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1279ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param afterMediaItemId Insert the transition after the media item with this id 1280ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The transition id 1281ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration in milliseconds 1282ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param behavior The transition behavior 1283ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param maskRawResourceId The mask raw resource id 1284ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param blending The transition blending 1285ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param invert The transition invert 1286ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1287ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void insertAlphaTransition(Context context, String projectPath, 1288ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String afterMediaItemId, String transitionId, long durationMs, int behavior, 1289ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int maskRawResourceId, int blending, boolean invert) { 1290ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1291ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_TRANSITION_INSERT_ALPHA); 1292ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1293ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, afterMediaItemId); 1294ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, transitionId); 1295ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1296ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_TRANSITION_BEHAVIOR, behavior); 1297ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_TRANSITION_MASK, maskRawResourceId); 1298ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_TRANSITION_BLENDING, blending); 1299ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_TRANSITION_INVERT, invert); 1300ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1301ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1302ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1303ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1304ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1305ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Insert an crossfade transition after the specified media item 1306ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1307ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1308ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1309ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param afterMediaItemId Insert the transition after the media item with this id 1310ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The transition id 1311ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration in milliseconds 1312ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param behavior The transition behavior 1313ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1314ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void insertCrossfadeTransition(Context context, String projectPath, 1315ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String afterMediaItemId, String transitionId, long durationMs, int behavior) { 1316ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1317ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_TRANSITION_INSERT_CROSSFADE); 1318ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1319ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, afterMediaItemId); 1320ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, transitionId); 1321ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1322ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_TRANSITION_BEHAVIOR, behavior); 1323ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1324ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1325ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1326ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1327ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1328ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Insert a fade-to-black transition after the specified media item 1329ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1330ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1331ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1332ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param afterMediaItemId Insert the transition after the media item with this id 1333ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The transition id 1334ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration in milliseconds 1335ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param behavior The transition behavior 1336ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1337ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void insertFadeBlackTransition(Context context, String projectPath, 1338ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String afterMediaItemId, String transitionId, long durationMs, int behavior) { 1339ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1340ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_TRANSITION_INSERT_FADE_BLACK); 1341ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1342ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, afterMediaItemId); 1343ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, transitionId); 1344ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1345ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_TRANSITION_BEHAVIOR, behavior); 1346ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1347ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1348ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1349ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1350ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1351ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Insert a sliding transition after the specified media item 1352ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1353ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1354ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1355ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param afterMediaItemId Insert the transition after the media item with this id 1356ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The transition id 1357ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration in milliseconds 1358ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param behavior The transition behavior 1359ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param direction The slide direction 1360ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1361ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void insertSlidingTransition(Context context, String projectPath, 1362ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String afterMediaItemId, String transitionId, long durationMs, int behavior, 1363ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int direction) { 1364ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1365ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_TRANSITION_INSERT_SLIDING); 1366ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1367ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, afterMediaItemId); 1368ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1369ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, transitionId); 1370ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_TRANSITION_BEHAVIOR, behavior); 1371ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_TRANSITION_DIRECTION, direction); 1372ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1373ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1374ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1375ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1376ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1377ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Remove a transition 1378ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1379ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1380ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1381ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The id of the transition to remove 1382ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1383ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void removeTransition(Context context, String projectPath, String transitionId) { 1384ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1385ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_TRANSITION_REMOVE); 1386ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1387ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, transitionId); 1388ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1389ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1390ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1391ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1392ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1393ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set a transition duration 1394ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1395ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1396ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1397ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The id of the transition 1398ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The transition duration 1399ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1400ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setTransitionDuration(Context context, String projectPath, 1401ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String transitionId, long durationMs) { 1402ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1403ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_TRANSITION_SET_DURATION); 1404ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1405ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, transitionId); 1406ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1407ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1408ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1409ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1410ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1411ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1412ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get the thumbnail of the specified height 1413ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1414ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1415ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1416ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The id of the transition 1417ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param height The height 1418ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1419ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void getTransitionThumbnails(Context context, String projectPath, 1420ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String transitionId, int height) { 1421ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1422ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_TRANSITION_GET_THUMBNAIL); 1423ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1424ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, transitionId); 1425ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_HEIGHT, height); 1426ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1427ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1428ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1429ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1430ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1431ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Check if the transition thumbnailing is in progress 1432ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1433ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1434ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param transitionId The id of the transition 1435ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1436ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return true if the transition thumbnailing is in progress 1437ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1438ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static boolean isTransitionThumbnailsPending(String projectPath, String transitionId) { 1439ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (Intent intent : mPendingIntents.values()) { 1440ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int op = intent.getIntExtra(PARAM_OP, -1); 1441ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (op == OP_TRANSITION_GET_THUMBNAIL) { 1442ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String pp = intent.getStringExtra(PARAM_PROJECT_PATH); 1443ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (pp.equals(projectPath)) { 1444ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mid = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 1445ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mid.equals(transitionId)) { 1446ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return true; 1447ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1448ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1449ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1450ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1451ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1452ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return false; 1453ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1454ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1455ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1456ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Add a color effect 1457ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1458ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1459ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1460ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 1461ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param effectId The effect id 1462ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param startTimeMs The start time in milliseconds 1463ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration in milliseconds 1464ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param type The effect type 1465ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param param The effect param (if any) 1466ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1467ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void addEffectColor(Context context, String projectPath, String mediaItemId, 1468ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String effectId, long startTimeMs, long durationMs, int type, int param) { 1469ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1470ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_EFFECT_ADD_COLOR); 1471ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1472ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, mediaItemId); 1473ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, effectId); 1474ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_START_TIME, startTimeMs); 1475ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1476ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_EFFECT_TYPE, type); 1477ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_EFFECT_PARAM, param); 1478ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1479ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1480ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1481ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1482ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1483ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Add a Ken Burns effect 1484ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1485ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1486ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1487ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 1488ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param effectId The effect id 1489ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param startTimeMs The start time 1490ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration of the item 1491ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param startRect The start rectangle for the Ken Burns effect 1492ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param endRect The end rectangle for the Ken Burns effect 1493ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1494ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void addEffectKenBurns(Context context, String projectPath, 1495ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, String effectId, long startTimeMs, long durationMs, 1496ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Rect startRect, Rect endRect) { 1497ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1498ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_EFFECT_ADD_IMAGE_KEN_BURNS); 1499ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1500ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, mediaItemId); 1501ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, effectId); 1502ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_START_TIME, startTimeMs); 1503ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1504ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_MEDIA_ITEM_START_RECT, startRect); 1505ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_MEDIA_ITEM_END_RECT, endRect); 1506ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1507ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1508ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1509ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1510ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1511ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Remove an effect 1512ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1513ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1514ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1515ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 1516ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param effectId The id of the effect to remove 1517ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1518ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void removeEffect(Context context, String projectPath, String mediaItemId, 1519ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String effectId) { 1520ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1521ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_EFFECT_REMOVE); 1522ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1523ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, mediaItemId); 1524ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, effectId); 1525ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1526ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1527ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1528ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1529ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1530ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Add an overlay 1531ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1532ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1533ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1534ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 1535ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param userAttributes The overlay user attributes 1536ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param startTimeMs The start time in milliseconds 1537ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration in milliseconds 1538ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1539ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void addOverlay(Context context, String projectPath, String mediaItemId, 1540ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String overlayId, Bundle userAttributes, long startTimeMs, long durationMs) { 1541ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1542ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_OVERLAY_ADD); 1543ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1544ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, mediaItemId); 1545ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, overlayId); 1546ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_START_TIME, startTimeMs); 1547ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1548ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_ATTRIBUTES, userAttributes); 1549ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1550ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1551ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1552ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1553ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1554ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Remove an overlay 1555ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1556ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1557ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1558ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 1559ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param overlayId The id of the overlay to remove 1560ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1561ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void removeOverlay(Context context, String projectPath, String mediaItemId, 1562ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String overlayId) { 1563ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1564ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_OVERLAY_REMOVE); 1565ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1566ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, mediaItemId); 1567ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, overlayId); 1568ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1569ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1570ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1571ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1572ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1573ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the start time of an overlay 1574ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1575ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1576ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1577ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 1578ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param overlayId The id of the overlay 1579ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param startTimeMs The start time in milliseconds 1580ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1581ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setOverlayStartTime(Context context, String projectPath, String mediaItemId, 1582ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String overlayId, long startTimeMs) { 1583ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1584ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_OVERLAY_SET_START_TIME); 1585ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1586ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, mediaItemId); 1587ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, overlayId); 1588ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_START_TIME, startTimeMs); 1589ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1590ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1591ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1592ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1593ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1594ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the duration of an overlay 1595ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1596ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1597ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1598ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 1599ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param overlayId The id of the overlay 1600ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param durationMs The duration in milliseconds 1601ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1602ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setOverlayDuration(Context context, String projectPath, String mediaItemId, 1603ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String overlayId, long durationMs) { 1604ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1605ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_OVERLAY_SET_DURATION); 1606ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1607ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, mediaItemId); 1608ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, overlayId); 1609ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DURATION, durationMs); 1610ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1611ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1612ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1613ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1614ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1615ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the user attributes of an overlay 1616ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1617ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1618ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1619ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 1620ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param overlayId The id of the overlay 1621ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param userAttributes The user attributes 1622ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1623ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setOverlayUserAttributes(Context context, String projectPath, 1624ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mediaItemId, String overlayId, Bundle userAttributes) { 1625ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1626ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_OVERLAY_SET_ATTRIBUTES); 1627ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1628ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID, mediaItemId); 1629ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, overlayId); 1630ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_ATTRIBUTES, userAttributes); 1631ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1632ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1633ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1634ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1635ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1636ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Add an audio track 1637ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1638ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1639ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1640ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param id The audio track id 1641ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param uri The audio track URI 1642ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param loop true to loop the audio track 1643ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1644ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void addAudioTrack(Context context, String projectPath, String id, Uri uri, 1645ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi boolean loop) { 1646ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1647ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_AUDIO_TRACK_ADD); 1648ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1649ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, id); 1650ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_FILENAME, uri); 1651ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_LOOP, loop); 1652ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1653ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1654ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1655ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1656ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1657ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Remove an audio track from the storyboard timeline 1658ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1659ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1660ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1661ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track to remove 1662ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1663ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void removeAudioTrack(Context context, String projectPath, String audioTrackId) { 1664ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1665ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_AUDIO_TRACK_REMOVE); 1666ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1667ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, audioTrackId); 1668ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1669ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1670ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1671ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1672ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1673ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the audio track boundaries 1674ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1675ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1676ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1677ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track 1678ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param beginBoundaryMs The audio track begin boundary 1679ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param endBoundaryMs The audio track end boundary 1680ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1681ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setAudioTrackBoundaries(Context context, String projectPath, 1682ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String audioTrackId, long beginBoundaryMs, long endBoundaryMs) { 1683ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1684ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_AUDIO_TRACK_SET_BOUNDARIES); 1685ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1686ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, audioTrackId); 1687ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_BEGIN_BOUNDARY, beginBoundaryMs); 1688ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_END_BOUNDARY, endBoundaryMs); 1689ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1690ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1691ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1692ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1693ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1694ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the loop flag for an audio track 1695ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1696ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1697ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1698ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track 1699ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param loop true to loop audio 1700ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1701ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setAudioTrackLoop(Context context, String projectPath, String audioTrackId, 1702ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi boolean loop) { 1703ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1704ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_AUDIO_TRACK_SET_LOOP); 1705ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1706ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, audioTrackId); 1707ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_LOOP, loop); 1708ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1709ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1710ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1711ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1712ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1713ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the duck flag for an audio track 1714ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1715ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1716ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1717ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track 1718ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param duck true to enable ducking 1719ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1720ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setAudioTrackDuck(Context context, String projectPath, String audioTrackId, 1721ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi boolean duck) { 1722ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1723ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_AUDIO_TRACK_SET_DUCK); 1724ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1725ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, audioTrackId); 1726ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_DUCK, duck); 1727ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1728ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1729ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1730ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1731ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1732ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Set the audio track volume 1733ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1734ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1735ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1736ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track 1737ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param volumePercentage The audio track volume (in percentage) 1738ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1739ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setAudioTrackVolume(Context context, String projectPath, 1740ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String audioTrackId, int volumePercentage) { 1741ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1742ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_AUDIO_TRACK_SET_VOLUME); 1743ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1744ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, audioTrackId); 1745ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_VOLUME, volumePercentage); 1746ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1747ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1748ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1749ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1750ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1751ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Mute/unmute the audio track 1752ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1753ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1754ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1755ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track 1756ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param muted true to mute the audio track 1757ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1758ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void setAudioTrackMute(Context context, String projectPath, String audioTrackId, 1759ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi boolean muted) { 1760ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1761ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_AUDIO_TRACK_SET_MUTE); 1762ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1763ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, audioTrackId); 1764ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_MUTE, muted); 1765ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1766ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1767ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1768ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1769ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1770ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Extract the audio track audio waveform 1771ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1772ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1773ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1774ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The id of the audio track 1775ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1776ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static void extractAudioTrackAudioWaveform(Context context, String projectPath, 1777ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String audioTrackId) { 1778ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (isAudioTrackAudioWaveformPending(projectPath, audioTrackId)) { 1779ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return; 1780ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1781ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.get(context, ApiService.class); 1782ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_OP, OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM); 1783ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_PROJECT_PATH, projectPath); 1784ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_STORYBOARD_ITEM_ID, audioTrackId); 1785ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1786ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startCommand(context, intent); 1787ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1788ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1789ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1790ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Check if extract audio waveform is pending for the specified audio track 1791ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1792ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 1793ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrackId The audio track id 1794ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1795ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return true if the extract audio waveform is pending 1796ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1797ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static boolean isAudioTrackAudioWaveformPending(String projectPath, 1798ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String audioTrackId) { 1799ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (Intent intent : mPendingIntents.values()) { 1800ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int op = intent.getIntExtra(PARAM_OP, -1); 1801ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (op == OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM) { 1802ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String pp = intent.getStringExtra(PARAM_PROJECT_PATH); 1803ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (pp.equals(projectPath)) { 1804ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mid = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 1805ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mid.equals(audioTrackId)) { 1806ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return true; 1807ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1808ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1809ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1810ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1811ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1812ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return false; 1813ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1814ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1815ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 1816ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Start the service (if it is not running) with the specified Intent 1817ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1818ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 1819ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The intent 1820ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 1821ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The request id of the pending request 1822ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1823ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static String startCommand(Context context, Intent intent) { 1824ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String requestId = StringUtils.randomString(8); 1825ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.putExtra(PARAM_REQUEST_ID, requestId); 1826ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mPendingIntents.put(requestId, intent); 1827ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1828ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi context.startService(intent); 1829ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1830ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String projectPath = intent.getStringExtra(PARAM_PROJECT_PATH); 1831ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (projectPath != null) { 1832ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final boolean projectEdited = isProjectEdited(projectPath); 1833ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (projectEdited) { 1834ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 1835ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onProjectEditState(projectPath, projectEdited); 1836ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1837ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1838ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1839ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1840ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return requestId; 1841ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1842ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1843ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 1844ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 1845ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1846ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @Override 1847ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onCreate() { 1848ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi super.onCreate(); 1849ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mHandler = new Handler(Looper.getMainLooper()); 1850ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1851ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread = new ServiceThread(mHandler, "VideoServiceThread"); 1852ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread.start(); 1853ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1854ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mAudioThread = new ServiceThread(mHandler, "AudioServiceThread"); 1855ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mAudioThread.start(); 1856d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi 1857d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi mThumbnailThread = new ServiceThread(mHandler, "ThumbnailServiceThread"); 1858d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi mThumbnailThread.start(); 1859ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1860ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1861ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 1862ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 1863ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1864ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @Override 1865ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public int onStartCommand (final Intent intent, int flags, int startId) { 1866ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int op = intent.getIntExtra(PARAM_OP, -1); 1867ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi switch(op) { 1868ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_LOAD_PROJECTS: 1869ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_CREATE: 1870ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_LOAD: 1871ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_SAVE: 1872ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_RELEASE: 1873ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_DELETE: 1874ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_SET_ASPECT_RATIO: 1875ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_APPLY_THEME: 1876ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_EXPORT: 1877ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_CANCEL_EXPORT: 1878ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_EXPORT_STATUS: 1879ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1880ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_ADD_VIDEO_URI: 1881ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_ADD_IMAGE_URI: 1882ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_MOVE: 1883ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_REMOVE: 1884ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_RENDERING_MODE: 1885ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_DURATION: 1886ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_BOUNDARIES: 1887ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM: 1888ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM_STATUS: 1889ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1890ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_EFFECT_ADD_COLOR: 1891ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_EFFECT_ADD_IMAGE_KEN_BURNS: 1892ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_EFFECT_REMOVE: 1893ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1894ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_ALPHA: 1895ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_CROSSFADE: 1896ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_FADE_BLACK: 1897ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_SLIDING: 1898ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_REMOVE: 1899ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_SET_DURATION: 1900ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_GET_THUMBNAIL: 1901ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1902ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_ADD: 1903ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_REMOVE: 1904ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_SET_START_TIME: 1905ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_SET_DURATION: 1906ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_SET_ATTRIBUTES: 1907ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1908ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_ADD: 1909ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_REMOVE: 1910ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_BOUNDARIES: 1911ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM: 1912ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM_STATUS: { 1913ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread.put(intent); 1914ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 1915ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1916ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1917ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_GET_THUMBNAIL: 1918ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_GET_THUMBNAILS: { 1919ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String projectPath = intent.getStringExtra(PARAM_PROJECT_PATH); 1920ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 1921ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Cancel any pending thumbnail request for the same media item 1922d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi for (Intent qIntent : mThumbnailThread.mQueue) { 1923ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int opi = qIntent.getIntExtra(PARAM_OP, -1); 1924ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (opi == op) { 1925ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String pp = qIntent.getStringExtra(PARAM_PROJECT_PATH); 1926ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (pp.equals(projectPath)) { 1927ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String mid = qIntent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 1928ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mid.equals(mediaItemId)) { 1929d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi if (mThumbnailThread.cancel(qIntent)) { 1930ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 1931ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "Canceled op: " + op + 1932ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi " for media item: " + mediaItemId); 1933ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1934ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Cancel the request 1935ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mPendingIntents.remove( 1936ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi qIntent.getStringExtra(PARAM_REQUEST_ID)); 1937ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mIntentPool.put(qIntent); 1938ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1939ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 1940ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1941ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1942ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1943ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1944ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1945d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi mThumbnailThread.put(intent); 1946ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 1947ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1948ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1949ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_VOLUME: 1950ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_MUTE: 1951ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1952ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_VOLUME: 1953ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_MUTE: 1954ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_LOOP: 1955ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_DUCK: { 1956ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mAudioThread.put(intent); 1957ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 1958ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1959ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1960ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi default: { 1961ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.e(TAG, "No thread assigned: " + op); 1962ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 1963ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1964ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1965ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1966ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return START_NOT_STICKY; 1967ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1968ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1969ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 1970ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 1971ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1972ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @Override 1973ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onDestroy() { 1974ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi super.onDestroy(); 1975ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1976d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi if (mThumbnailThread != null) { 1977d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi mThumbnailThread.quit(); 1978d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi mThumbnailThread = null; 1979d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi } 1980d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi 1981ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mAudioThread != null) { 1982ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mAudioThread.quit(); 1983ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mAudioThread = null; 1984ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1985ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1986ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoThread != null) { 1987ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread.quit(); 1988ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread = null; 1989ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1990ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1991ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1992ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 1993ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 1994ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 1995ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @Override 1996ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public IBinder onBind(Intent intent) { 1997ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return null; 1998ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 1999ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2000ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 2001ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Process the intent 2002ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 2003ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The intent 2004ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 2005ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void processIntent(Intent intent) { 2006ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int op = intent.getIntExtra(PARAM_OP, -1); 2007ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi VideoEditor videoEditor = null; 2008ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 2009ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String projectPath = intent.getStringExtra(PARAM_PROJECT_PATH); 2010ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Check if the project path matches the current VideoEditor project 2011ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi switch (op) { 2012ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_LOAD_PROJECTS: 2013ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_CREATE: 2014ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_LOAD: 2015ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_DELETE: { 2016ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2017ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2018ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2019ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi default: { 2020ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor = getVideoEditor(projectPath); 2021ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoEditor == null) { 2022ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Invalid project path: " 2023ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + projectPath + " for operation: " + op); 2024ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2025ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2026ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2027ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2028ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2029ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi switch (op) { 2030ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_LOAD_PROJECTS: { 2031ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2032ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_LOAD_PROJECTS"); 2033ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2034ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2035ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<VideoEditorProject> projects = new ArrayList<VideoEditorProject>(); 203683af1c18a2eaab1b53fd29d5c9118e1f078b6e3dGil Dobjanschi final File dir = FileUtils.getProjectsRootDir(getApplicationContext()); 2037ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final File[] files = dir.listFiles(); 2038ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (files != null) { 2039ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Collect valid projects (project with valid metadata) 2040ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < files.length; i++) { 2041ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (files[i].isDirectory()) { 2042ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String pp = files[i].getAbsolutePath(); 2043ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 2044ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi projects.add(VideoEditorProject.fromXml(null, pp)); 2045ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } catch (FileNotFoundException ex) { 2046ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.w(TAG, "processIntent: Project file not found: " + pp); 2047ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi FileUtils.deleteDir(new File(pp)); 2048ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } catch (Exception ex) { 2049ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ex.printStackTrace(); 2050ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2051ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2052ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2053ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2054ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (projects.size() > 0) { 2055ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Sort the projects in order of "last saved" 2056ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Collections.sort(projects, new Comparator<VideoEditorProject>() { 2057ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 2058ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 2059ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 2060ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public int compare(VideoEditorProject object1, 2061ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi VideoEditorProject object2) { 2062ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (object1.getLastSaved() > object2.getLastSaved()) { 2063ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return -1; 2064ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else if (object1.getLastSaved() == object2.getLastSaved()) { 2065ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return 0; 2066ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2067ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return 1; 2068ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2069ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2070ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }); 2071ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2072ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2073ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2074ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, projects, null, true); 2075ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2076ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2077ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2078ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_CREATE: { 2079ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2080ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_CREATE: " + projectPath); 2081ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2082ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2083ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 2084ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Release the current video editor if any 2085ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi releaseEditor(); 2086ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2087ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor = VideoEditorFactory.create(projectPath); 2088ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2089ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the movies to the timeline 2090ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String[] movies = intent.getStringArrayExtra(PARAM_MOVIES_FILENAMES); 2091ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < movies.length; i++) { 2092ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = new MediaVideoItem(videoEditor, 2093ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generateId(), movies[i], 2094ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaItem.RENDERING_MODE_BLACK_BORDER); 2095ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addMediaItem(mediaItem); 2096ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2097ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2098ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the photos to the timeline 2099ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String[] photos = intent.getStringArrayExtra(PARAM_PHOTOS_FILENAMES); 2100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < photos.length; i++) { 2101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = new MediaImageItem(videoEditor, 2102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generateId(), photos[i], 2103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaItemUtils.getDefaultImageDuration(), 2104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaItem.RENDERING_MODE_BLACK_BORDER); 2105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addMediaItem(mediaItem); 2106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Create the project 2109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String projectName = intent.getStringExtra(PARAM_PROJECT_NAME); 2110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String themeId = intent.getStringExtra(PARAM_THEME); 2111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (themeId != null) { 2112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi applyThemeToMovie(videoEditor, themeId); 2113ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Set the aspect ratio to the aspect ratio of the first item 2116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MediaItem> mediaItems = videoEditor.getAllMediaItems(); 2117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItems.size() > 0) { 2118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.setAspectRatio(mediaItems.get(0).getAspectRatio()); 2119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Create the video editor project 2122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = new VideoEditorProject( 2123ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor, projectPath, projectName, System.currentTimeMillis(), 2124ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 0, 0, VideoEditorProject.DEFAULT_ZOOM_LEVEL, null, themeId); 2125ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setMediaItems(copyMediaItems( 2126ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.getAllMediaItems())); 2127ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setAudioTracks(copyAudioTracks( 2128ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.getAllAudioTracks())); 2129ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2130ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Make this project the current project 2131ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoEditor = videoEditor; 2132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mGeneratePreviewListener = new ServiceMediaProcessingProgressListener( 2133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi projectPath); 2134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, videoProject, null, false); 2136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } catch (Exception ex) { 2139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoEditor != null) { 2140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.release(); 2141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor = null; 2142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw ex; 2144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_LOAD: { 2150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor = releaseEditorNot(projectPath); 2151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoEditor == null) { // The old project was released 2153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2154ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_LOAD: Loading: " + projectPath); 2155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 2157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Load the project 2158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor = VideoEditorFactory.load(projectPath, false); 2159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Load the video editor project 2161ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = VideoEditorProject.fromXml( 2162ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor, projectPath); 2163ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setMediaItems(copyMediaItems( 2164ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.getAllMediaItems())); 2165ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setAudioTracks(copyAudioTracks( 2166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.getAllAudioTracks())); 2167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Make this the current project 2168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoEditor = videoEditor; 2169ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mGeneratePreviewListener = new ServiceMediaProcessingProgressListener( 2170ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi projectPath); 2171ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2172ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, videoProject, null, false); 2173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } catch (Exception ex) { 2176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoEditor != null) { 2177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.release(); 2178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor = null; 2179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2180ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw ex; 2181ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // The project is already loaded 2183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_LOAD: Was already loaded: " + projectPath); 2185ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2186ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, true); 2187ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2188ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2189ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2190ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2191ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2192ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_SET_ASPECT_RATIO: { 2193ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2194ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_SET_ASPECT_RATIO"); 2195ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2196ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2197ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.setAspectRatio(intent.getIntExtra(PARAM_ASPECT_RATIO, 2198ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaProperties.ASPECT_RATIO_UNDEFINED)); 2199ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2200ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 2201ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2202ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2203ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2204ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2205ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2206ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_APPLY_THEME: { 2207ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2208ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_APPLY_THEME"); 2209ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2210ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2211ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Apply the theme 2212ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi applyThemeToMovie(videoEditor, intent.getStringExtra(PARAM_THEME)); 2213ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2214ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MovieMediaItem> mediaItems = 2215ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi copyMediaItems(videoEditor.getAllMediaItems()); 2216ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MovieAudioTrack> audioTracks = 2217ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi copyAudioTracks(videoEditor.getAllAudioTracks()); 2218ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2219ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, mediaItems, audioTracks, false); 2220ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2221ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2222ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2223ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2224ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2225ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_EXPORT: { 2226ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2227ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_EXPORT"); 2228ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2229ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2230ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi exportMovie(videoEditor, intent); 2231ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2232ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2233ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2234ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_CANCEL_EXPORT: { 2235ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2236ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_CANCEL_EXPORT"); 2237ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2238ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2239ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.cancelExport(intent.getStringExtra(PARAM_FILENAME)); 2240ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2241ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, true); 2242ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2243ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2244ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2245ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_EXPORT_STATUS: { 2246ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2247ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_EXPORT_STATUS"); 2248ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2249ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2250ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, true); 2251ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2252ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2253ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2254ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_SAVE: { 2255ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2256ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_SAVE: " + projectPath); 2257ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2258ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2259ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.save(); 2260ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2261ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 2262ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 2263ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.saveToXml(); 2264ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2265ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2266ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, true); 2267ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2268ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2269ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2270ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_RELEASE: { 2271ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2272ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_RELEASE: " + projectPath); 2273ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2274ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2275ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi releaseEditor(projectPath); 2276ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2277ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, true); 2278ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2279ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2280ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2281ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_DELETE: { 2282ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2283ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_VIDEO_EDITOR_DELETE: " + projectPath); 2284ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2285ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2286ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi releaseEditor(projectPath); 2287ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Delete all the files and the project folder 2288ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi FileUtils.deleteDir(new File(projectPath)); 2289ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2290ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, true); 2291ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2292ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2293ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2294ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_ADD_VIDEO_URI: { 2295ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2296ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_ADD_VIDEO_URI: " 2297ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2298ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2299ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2300ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Uri data = intent.getParcelableExtra(PARAM_FILENAME); 2301ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String filename = null; 2302ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Get the filename 2303ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Cursor cursor = null; 2304ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 2305ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi cursor = getContentResolver().query(data, 2306ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi new String[] {Video.Media.DATA}, null, null, null); 2307ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (cursor.moveToFirst()) { 2308ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = cursor.getString(0); 2309ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2310ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } finally { 2311ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (cursor != null) { 2312ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi cursor.close(); 2313ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2314ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2315ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2316ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (filename == null) { 2317ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Media file not found: " + data); 2318ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2319ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2320ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = new MediaVideoItem(videoEditor, 2321ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 2322ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename, 2323ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_MEDIA_ITEM_RENDERING_MODE, 0)); 2324ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2325ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.insertMediaItem(mediaItem, 2326ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 2327ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2328ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // If this is the first media item, change the aspect ratio 2329ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Integer aspectRatio; 2330ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoEditor.getAllMediaItems().size() == 1) { 2331ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.setAspectRatio(mediaItem.getAspectRatio()); 2332ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi aspectRatio = videoEditor.getAspectRatio(); 2333ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2334ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi aspectRatio = null; 2335ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2336ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2337ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Apply the theme if any 2338ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String themeId = intent.getStringExtra(PARAM_THEME); 2339ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (themeId != null) { 2340ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi applyThemeToMediaItem(videoEditor, themeId, mediaItem); 2341ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2342ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2343ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, new MovieMediaItem(mediaItem), 2344ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi aspectRatio, false); 2345ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2346ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2347ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2348ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2349ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2350ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_ADD_IMAGE_URI: { 2351ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2352ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_ADD_IMAGE_URI: " 2353ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2354ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2355ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2356ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Uri data = intent.getParcelableExtra(PARAM_FILENAME); 2357ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String filename = null; 2358ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Get the filename 2359ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Cursor cursor = null; 2360ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 2361ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi cursor = getContentResolver().query(data, 2362ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi new String[] {Images.Media.DATA}, null, null, null); 2363ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (cursor.moveToFirst()) { 2364ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = cursor.getString(0); 2365ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2366ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } finally { 2367ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (cursor != null) { 2368ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi cursor.close(); 2369ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2370ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2371ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2372ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (filename == null) { 2373ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Media file not found: " + data); 2374ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2375ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2376ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = new MediaImageItem(videoEditor, 2377ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 2378ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename, 2379ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_DURATION, 0), 2380ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_MEDIA_ITEM_RENDERING_MODE, 0)); 2381ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2382ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.insertMediaItem(mediaItem, 2383ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 2384ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2385ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // If this is the first media item, change the aspect ratio 2386ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Integer aspectRatio; 2387ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoEditor.getAllMediaItems().size() == 1) { 2388ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.setAspectRatio(mediaItem.getAspectRatio()); 2389ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi aspectRatio = videoEditor.getAspectRatio(); 2390ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2391ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi aspectRatio = null; 2392ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2393ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2394ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Apply the theme if any 2395ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String themeId = intent.getStringExtra(PARAM_THEME); 2396ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (themeId != null) { 2397ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi applyThemeToMediaItem(videoEditor, themeId, mediaItem); 2398ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2399ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2400ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, new MovieMediaItem(mediaItem), 2401ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi aspectRatio, false); 2402ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2403ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2404ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2405ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2406ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2407ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_MOVE: { 2408ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2409ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2410ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_MOVE: " + mediaItemId); 2411ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2412ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2413ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Determine the position of the media item we are moving 2414ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MediaItem> mediaItems = videoEditor.getAllMediaItems(); 2415ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int mediaItemsCount = mediaItems.size(); 2416ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int movedItemPosition = -1; 2417ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaItem movedMediaItem = null; 2418ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < mediaItemsCount; i++) { 2419ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mi = mediaItems.get(i); 2420ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mi.getId().equals(mediaItemId)) { 2421ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movedMediaItem = mi; 2422ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movedItemPosition = i; 2423ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2424ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2425ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2426ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2427ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (movedItemPosition == -1) { 2428ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Moved MediaItem not found: " + 2429ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItemId); 2430ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2431ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2432ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition beginTransition = movedMediaItem.getBeginTransition(); 2433ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition endTransition = movedMediaItem.getEndTransition(); 2434ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2435ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String afterMediaItemId = intent.getStringExtra( 2436ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_RELATIVE_STORYBOARD_ITEM_ID); 2437ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.moveMediaItem(mediaItemId, afterMediaItemId); 2438ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2439ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Apply the theme if any 2440ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String themeId = intent.getStringExtra(PARAM_THEME); 2441ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (themeId != null) { 2442ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Apply the theme at the removed position 2443ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi applyThemeAfterMove(videoEditor, themeId, movedMediaItem, 2444ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movedItemPosition, beginTransition, endTransition); 2445ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2446ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2447ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MovieMediaItem> mediaItemsCopy = copyMediaItems(mediaItems); 2448ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, mediaItemsCopy, null, false); 2449ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2450ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2451ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2452ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2453ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2454ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_REMOVE: { 2455ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2456ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2457ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_REMOVE: " + mediaItemId); 2458ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2459ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2460ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Determine the position of the media item we are removing 2461ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MediaItem> mediaItems = videoEditor.getAllMediaItems(); 2462ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int mediaItemsCount = mediaItems.size(); 2463ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int removedItemPosition = -1; 2464ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaItem removedMediaItem = null; 2465ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < mediaItemsCount; i++) { 2466ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItems.get(i).getId().equals(mediaItemId)) { 2467ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi removedMediaItem = mediaItems.get(i); 2468ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi removedItemPosition = i; 2469ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2470ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2471ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2472ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2473ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (removedMediaItem == null) { 2474ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + mediaItemId); 2475ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2476ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2477ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition beginTransition = removedMediaItem.getBeginTransition(); 2478ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition endTransition = removedMediaItem.getEndTransition(); 2479ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2480ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.removeMediaItem(mediaItemId); 2481ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2482ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Apply the theme if any 2483ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MovieTransition movieTransition = null; 2484ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String themeId = intent.getStringExtra(PARAM_THEME); 2485ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (themeId != null && mediaItems.size() > 0) { 2486ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = applyThemeAfterRemove(videoEditor, themeId, 2487ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi removedItemPosition, beginTransition, endTransition); 2488ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (transition != null) { 2489ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieTransition = new MovieTransition(transition); 2490ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2491ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2492ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2493ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, movieTransition, null, false); 2494ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2495ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2496ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2497ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2498ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2499ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_RENDERING_MODE: { 2500ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2501ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2502ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_SET_RENDERING_MODE: " + mediaItemId); 2503ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2504ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2505ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem(mediaItemId); 2506ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 2507ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + mediaItemId); 2508ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2509ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setRenderingMode(intent.getIntExtra(PARAM_MEDIA_ITEM_RENDERING_MODE, 2510ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaItem.RENDERING_MODE_BLACK_BORDER)); 2511ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2512ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 2513ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2514ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2515ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2516ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2517ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2518ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_DURATION: { 2519ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2520ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2521ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_SET_DURATION: " + mediaItemId); 2522ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2523ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2524ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaImageItem mediaItem = 2525ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi (MediaImageItem)videoEditor.getMediaItem(mediaItemId); 2526ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 2527ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + mediaItemId); 2528ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2529ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2530ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final long durationMs = intent.getLongExtra(PARAM_DURATION, 0); 2531ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setDuration(durationMs); 2532ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Adjust all effects to the new duration 2533ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<Effect> effects = mediaItem.getAllEffects(); 2534ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (Effect effect : effects) { 2535ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi effect.setDuration(durationMs); 2536ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2537ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2538ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, new MovieMediaItem(mediaItem), null, 2539ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi false); 2540ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2541ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2542ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2543ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2544ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2545ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_BOUNDARIES: { 2546ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2547ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaVideoItem mediaItem = 2548ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi (MediaVideoItem)videoEditor.getMediaItem(mediaItemId); 2549ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 2550ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + mediaItemId); 2551ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2552ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2553ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setExtractBoundaries(intent.getLongExtra(PARAM_BEGIN_BOUNDARY, 0), 2554ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_END_BOUNDARY, 0)); 2555ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2556ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<Overlay> overlays = mediaItem.getAllOverlays(); 2557ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (overlays.size() > 0) { 2558ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Adjust the overlay 2559ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Overlay overlay = overlays.get(0); 2560ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (overlay.getStartTime() < mediaItem.getBoundaryBeginTime()) { 2561ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setStartTime(mediaItem.getBoundaryBeginTime()); 2562ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setDuration(Math.min(overlay.getDuration(), 2563ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.getTimelineDuration())); 2564ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else if (overlay.getStartTime() + overlay.getDuration() > 2565ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.getBoundaryEndTime()) { 2566ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setStartTime(Math.max(mediaItem.getBoundaryBeginTime(), 2567ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.getBoundaryEndTime() - overlay.getDuration())); 2568ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setDuration(mediaItem.getBoundaryEndTime() - 2569ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.getStartTime()); 2570ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2571ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2572ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2573ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, new MovieMediaItem(mediaItem), null, 2574ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi false); 2575ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2576ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2577ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2578ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2579ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2580ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_GET_THUMBNAIL: { 2581d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi // Note that this command is executed in the thumbnail thread 2582ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2583ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2584ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_GET_THUMBNAIL: " + mediaItemId); 2585ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2586ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2587ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem(mediaItemId); 2588ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 2589ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + mediaItemId); 2590ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2591ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2592ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bitmap thumbnail = mediaItem.getThumbnail( 2593ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_WIDTH, 0), 2594ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_HEIGHT, 0), 2595ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_START_TIME, 0)); 2596ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2597ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, thumbnail, null, true); 2598ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2599ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2600ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2601ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_GET_THUMBNAILS: { 2602d15e9cf8eab634dc3b95a945dcd1b4e634d9a026Gil Dobjanschi // Note that this command is executed in the thumbnail thread 2603ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2604ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2605ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_GET_THUMBNAILS: " + mediaItemId); 2606ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2607ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2608ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem(mediaItemId); 2609ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 2610ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + mediaItemId); 2611ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2612ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2613ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bitmap[] thumbnails = mediaItem.getThumbnailList( 2614ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_WIDTH, 0), 2615ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_HEIGHT, 0), 2616ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_START_TIME, 0), 2617ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_END_TIME, 0), 2618ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_COUNT, 0)); 2619ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2620ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, thumbnails, null, true); 2621ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2622ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2623ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2624ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_VOLUME: { 2625ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2626ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2627ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_SET_VOLUME: " + mediaItemId); 2628ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2629ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2630ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem(mediaItemId); 2631ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem != null && mediaItem instanceof MediaVideoItem) { 2632ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ((MediaVideoItem)mediaItem).setVolume(intent.getIntExtra(PARAM_VOLUME, 0)); 2633ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2634ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 2635ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, false); 2636ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2637ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2638ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + mediaItemId); 2639ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2640ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2641ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2642ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2643ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_MUTE: { 2644ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2645ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2646ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_SET_MUTE: " + mediaItemId); 2647ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2648ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2649ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem(mediaItemId); 2650ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem != null && mediaItem instanceof MediaVideoItem) { 2651ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ((MediaVideoItem)mediaItem).setMute(intent.getBooleanExtra(PARAM_MUTE, 2652ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi false)); 2653ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2654ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 2655ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, false); 2656ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2657ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2658ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + mediaItemId); 2659ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2660ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2661ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2662ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2663ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM: { 2664ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2665ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2666ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM: " + mediaItemId); 2667ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2668ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2669ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem(mediaItemId); 2670ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem != null && mediaItem instanceof MediaVideoItem) { 2671ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaVideoItem movieMediaItem = ((MediaVideoItem)mediaItem); 2672ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final WaveformData waveformData = movieMediaItem.getWaveformData(); 2673ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (waveformData == null) { 2674ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi extractMediaItemAudioWaveform(intent, movieMediaItem); 2675ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2676ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, waveformData, null, true); 2677ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2678ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2679ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + mediaItemId); 2680ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2681ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2682ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2683ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2684ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM_STATUS: { 2685ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2686ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaVideoItem mediaItem = 2687ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi (MediaVideoItem)videoEditor.getMediaItem(mediaItemId); 2688ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2689ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, mediaItem.getWaveformData(), null, 2690ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi true); 2691ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2692ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2693ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2694ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_ALPHA: { 2695ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2696ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_TRANSITION_INSERT_ALPHA: " 2697ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2698ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2699ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2700ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String afterMediaItemId = 2701ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID); 2702ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem afterMediaItem; 2703ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (afterMediaItemId != null) { 2704ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem = videoEditor.getMediaItem(afterMediaItemId); 2705ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2706ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem = null; 2707ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2708ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2709ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int maskRawResourceId = intent.getIntExtra(PARAM_TRANSITION_MASK, 2710ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi R.raw.mask_contour); 2711ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2712ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem beforeMediaItem = nextMediaItem(videoEditor, afterMediaItemId); 2713ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = new TransitionAlpha( 2714ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 2715ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem, beforeMediaItem, 2716ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_DURATION, 0), 2717ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_TRANSITION_BEHAVIOR, 2718ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Transition.BEHAVIOR_LINEAR), 2719ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi FileUtils.getMaskFilename(getApplicationContext(), 2720ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi maskRawResourceId), 2721ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_TRANSITION_BLENDING, 100), 2722ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getBooleanExtra(PARAM_TRANSITION_INVERT, false)); 2723ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 2724ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2725ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, transition, null, false); 2726ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2727ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2728ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2729ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2730ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2731ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_CROSSFADE: { 2732ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2733ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_TRANSITION_INSERT_CROSSFADE: " 2734ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2735ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2736ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2737ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String afterMediaItemId = 2738ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID); 2739ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem afterMediaItem; 2740ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (afterMediaItemId != null) { 2741ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem = videoEditor.getMediaItem(afterMediaItemId); 2742ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2743ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem = null; 2744ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2745ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2746ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem beforeMediaItem = nextMediaItem(videoEditor, afterMediaItemId); 2747ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = new TransitionCrossfade( 2748ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 2749ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem, beforeMediaItem, 2750ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_DURATION, 0), 2751ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_TRANSITION_BEHAVIOR, 2752ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Transition.BEHAVIOR_LINEAR)); 2753ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 2754ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2755ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, transition, null, false); 2756ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2757ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2758ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2759ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2760ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2761ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_FADE_BLACK: { 2762ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2763ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_TRANSITION_INSERT_FADE_TO_BLACK: " 2764ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2765ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2766ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2767ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String afterMediaItemId = 2768ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID); 2769ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem afterMediaItem; 2770ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (afterMediaItemId != null) { 2771ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem = videoEditor.getMediaItem(afterMediaItemId); 2772ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2773ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem = null; 2774ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2775ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2776ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem beforeMediaItem = nextMediaItem(videoEditor, afterMediaItemId); 2777ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = new TransitionFadeBlack( 2778ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 2779ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem, beforeMediaItem, 2780ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_DURATION, 0), 2781ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_TRANSITION_BEHAVIOR, 2782ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Transition.BEHAVIOR_LINEAR)); 2783ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 2784ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2785ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, transition, null, false); 2786ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2787ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2788ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2789ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2790ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2791ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_SLIDING: { 2792ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2793ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_TRANSITION_INSERT_SLIDING: " 2794ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2795ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2796ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2797ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String afterMediaItemId = 2798ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID); 2799ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem afterMediaItem; 2800ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (afterMediaItemId != null) { 2801ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem = videoEditor.getMediaItem(afterMediaItemId); 2802ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2803ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem = null; 2804ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2805ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2806ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem beforeMediaItem = nextMediaItem(videoEditor, afterMediaItemId); 2807ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = new TransitionSliding( 2808ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 2809ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItem, beforeMediaItem, 2810ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_DURATION, 0), 2811ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_TRANSITION_BEHAVIOR, 2812ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Transition.BEHAVIOR_LINEAR), 2813ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_TRANSITION_DIRECTION, 2814ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN)); 2815ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 2816ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2817ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, transition, null, false); 2818ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2819ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2820ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2821ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2822ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2823ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_REMOVE: { 2824ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2825ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_TRANSITION_REMOVE: " 2826ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2827ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2828ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2829ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.removeTransition(intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2830ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2831ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 2832ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2833ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2834ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2835ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2836ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2837ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_SET_DURATION: { 2838ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String transitionId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2839ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2840ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_TRANSITION_SET_DURATION: " + transitionId); 2841ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2842ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2843ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = videoEditor.getTransition(transitionId); 2844ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (transition == null) { 2845ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Transition not found: " + 2846ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi transitionId); 2847ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2848ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi transition.setDuration(intent.getLongExtra(PARAM_DURATION, 0)); 2849ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2850ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 2851ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2852ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2853ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2854ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2855ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2856ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_GET_THUMBNAIL: { 2857ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String transitionId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 2858ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2859ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_TRANSITION_GET_THUMBNAIL: " + transitionId); 2860ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2861ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2862ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = videoEditor.getTransition(transitionId); 2863ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (transition == null) { 2864ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Transition not found: " + 2865ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi transitionId); 2866ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2867ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2868ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int height = intent.getIntExtra(PARAM_HEIGHT, 0); 2869ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem afterMediaItem = transition.getAfterMediaItem(); 2870ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bitmap[] thumbnails = new Bitmap[2]; 2871ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (afterMediaItem != null) { 2872ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi thumbnails[0] = afterMediaItem.getThumbnail( 2873ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi (afterMediaItem.getWidth() * height) / afterMediaItem.getHeight(), 2874ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi height, afterMediaItem.getTimelineDuration()); 2875ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2876ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi thumbnails[0] = null; 2877ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2878ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2879ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem beforeMediaItem = transition.getBeforeMediaItem(); 2880ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (beforeMediaItem != null) { 2881ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi thumbnails[1] = beforeMediaItem.getThumbnail( 2882ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi (beforeMediaItem.getWidth() * height) / beforeMediaItem.getHeight(), 2883ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi height, 0); 2884ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2885ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi thumbnails[1] = null; 2886ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2887ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2888ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, thumbnails, null, true); 2889ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2890ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2891ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2892ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_EFFECT_ADD_COLOR: { 2893ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2894ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_EFFECT_ADD_COLOR: " 2895ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2896ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2897ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2898ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem( 2899ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 2900ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 2901ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + 2902ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 2903ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2904ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2905ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Effect effect = new EffectColor(mediaItem, 2906ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 2907ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_START_TIME, -1), 2908ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_DURATION, 0), 2909ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_EFFECT_TYPE, -1), 2910ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_EFFECT_PARAM, -1)); 2911ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.addEffect(effect); 2912ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2913ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, new MovieEffect(effect), null, 2914ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi false); 2915ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2916ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2917ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2918ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2919ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2920ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_EFFECT_ADD_IMAGE_KEN_BURNS: { 2921ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2922ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_EFFECT_ADD_IMAGE_KEN_BURNS: " 2923ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2924ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2925ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2926ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem( 2927ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 2928ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 2929ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + 2930ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 2931ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2932ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2933ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Effect effect = new EffectKenBurns(mediaItem, 2934ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 2935ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi (Rect)intent.getParcelableExtra(PARAM_MEDIA_ITEM_START_RECT), 2936ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi (Rect)intent.getParcelableExtra(PARAM_MEDIA_ITEM_END_RECT), 2937ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_START_TIME, 0), 2938ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_DURATION, 0)); 2939ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.addEffect(effect); 2940ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2941ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, new MovieEffect(effect), null, 2942ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi false); 2943ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2944ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2945ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2946ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2947ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2948ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_EFFECT_REMOVE: { 2949ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2950ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_EFFECT_REMOVE: " 2951ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2952ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2953ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2954ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem( 2955ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 2956ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 2957ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + 2958ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 2959ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2960ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2961ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.removeEffect(intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2962ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2963ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 2964ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 2965ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 2966ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 2967ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2968ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2969ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_ADD: { 2970ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 2971ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_OVERLAY_ADD: " 2972ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 2973ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2974ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2975ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem( 2976ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 2977ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 2978ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + 2979ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 2980ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2981ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2982ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int scaledWidth, scaledHeight; 2983ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem instanceof MediaVideoItem) { 2984ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledWidth = ((MediaVideoItem)mediaItem).getWidth(); 2985ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledHeight = ((MediaVideoItem)mediaItem).getHeight(); 2986ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 2987ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledWidth = ((MediaImageItem)mediaItem).getScaledWidth(); 2988ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledHeight = ((MediaImageItem)mediaItem).getScaledHeight(); 2989ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 2990ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2991ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bundle userAttributes = intent.getBundleExtra(PARAM_ATTRIBUTES); 2992ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2993ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int overlayType = MovieOverlay.getType(userAttributes); 2994ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String title = MovieOverlay.getTitle(userAttributes); 2995ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String subTitle = MovieOverlay.getSubtitle(userAttributes); 2996ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2997ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final OverlayFrame overlay = new OverlayFrame(mediaItem, 2998ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 2999ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ImageUtils.buildOverlayBitmap(null, overlayType, title, subTitle, 3000ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledWidth, scaledHeight), 3001ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_START_TIME, -1), 3002ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_DURATION, 0)); 3003ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3004ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Set the user attributes 3005ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (String name : userAttributes.keySet()) { 3006ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (MovieOverlay.getAttributeType(name).equals(Integer.class)) { 3007ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setUserAttribute(name, 3008ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Integer.toString(userAttributes.getInt(name))); 3009ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // Strings 3010ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setUserAttribute(name, userAttributes.getString(name)); 3011ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3012ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3013ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.addOverlay(overlay); 3014ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3015ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, new MovieOverlay(overlay), null, 3016ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi false); 3017ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 3018ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3019ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3020ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3021ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3022ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_REMOVE: { 3023ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3024ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_OVERLAY_REMOVE: " 3025ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3026ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3027ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3028ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem( 3029ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 3030ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 3031ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + 3032ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 3033ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3034ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3035ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.removeOverlay(intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3036ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3037ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 3038ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 3039ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3040ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3041ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3042ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3043ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_SET_START_TIME: { 3044ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3045ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_OVERLAY_SET_START_TIME: " 3046ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3047ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3048ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3049ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem( 3050ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 3051ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 3052ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + 3053ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 3054ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3055ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3056ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Overlay overlay = mediaItem.getOverlay( 3057ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3058ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (overlay == null) { 3059ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Overlay not found: " + 3060ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3061ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3062ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3063ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setStartTime(intent.getLongExtra(PARAM_START_TIME, 0)); 3064ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3065ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 3066ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 3067ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3068ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3069ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3070ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3071ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_SET_DURATION: { 3072ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3073ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_OVERLAY_SET_DURATION: " 3074ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3075ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3076ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3077ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem( 3078ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 3079ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 3080ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + 3081ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 3082ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3083ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3084ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Overlay overlay = mediaItem.getOverlay( 3085ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3086ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (overlay == null) { 3087ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Overlay not found: " + 3088ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3089ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3090ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3091ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setDuration(intent.getLongExtra(PARAM_DURATION, 0)); 3092ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3093ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 3094ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 3095ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3096ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3097ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3098ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3099ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_SET_ATTRIBUTES: { 3100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_OVERLAY_SET_ATTRIBUTES: " 3102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = videoEditor.getMediaItem( 3106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 3107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem == null) { 3108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("MediaItem not found: " + 3109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID)); 3110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Overlay overlay = mediaItem.getOverlay( 3113ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (overlay == null) { 3115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Overlay not found: " + 3116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int scaledWidth, scaledHeight; 3120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem instanceof MediaVideoItem) { 3121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledWidth = ((MediaVideoItem)mediaItem).getWidth(); 3122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledHeight = ((MediaVideoItem)mediaItem).getHeight(); 3123ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3124ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledWidth = ((MediaImageItem)mediaItem).getScaledWidth(); 3125ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledHeight = ((MediaImageItem)mediaItem).getScaledHeight(); 3126ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3127ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3128ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bundle userAttributes = intent.getBundleExtra(PARAM_ATTRIBUTES); 3129ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int overlayType = MovieOverlay.getType(userAttributes); 3130ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String title = MovieOverlay.getTitle(userAttributes); 3131ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String subTitle = MovieOverlay.getSubtitle(userAttributes); 3132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ((OverlayFrame)overlay).setBitmap( 3134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ImageUtils.buildOverlayBitmap(null, overlayType, title, subTitle, 3135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledWidth, scaledHeight)); 3136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (String name : userAttributes.keySet()) { 3138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (MovieOverlay.getAttributeType(name).equals(Integer.class)) { 3139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setUserAttribute(name, 3140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Integer.toString(userAttributes.getInt(name))); 3141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // Strings 3142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setUserAttribute(name, userAttributes.getString(name)); 3143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 3147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, true); 3148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_ADD: { 3153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3154ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_AUDIO_TRACK_ADD: " 3155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Uri data = intent.getParcelableExtra(PARAM_FILENAME); 3159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi String filename = null; 3160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Get the filename 3161ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Cursor cursor = null; 3162ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 3163ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi cursor = getContentResolver().query(data, 3164ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi new String[] {Audio.Media.DATA}, null, null, null); 3165ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (cursor.moveToFirst()) { 3166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = cursor.getString(0); 3167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } finally { 3169ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (cursor != null) { 3170ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi cursor.close(); 3171ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3172ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (filename == null) { 3175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Media file not found: " + data); 3176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final AudioTrack audioTrack = new AudioTrack(videoEditor, 3179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), filename); 3180516fd1bedc49dc893d4bfbb0281aabd121e1f4f4Gil Dobjanschi audioTrack.enableDucking(DUCK_THRESHOLD, DUCK_TRACK_VOLUME); 3181516fd1bedc49dc893d4bfbb0281aabd121e1f4f4Gil Dobjanschi audioTrack.setVolume(DEFAULT_AUDIO_TRACK_VOLUME); 3182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (intent.getBooleanExtra(PARAM_LOOP, false)) { 3183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.enableLoop(); 3184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3185ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.disableLoop(); 3186ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3187ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3188ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addAudioTrack(audioTrack); 3189ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3190ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, new MovieAudioTrack(audioTrack), 3191ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi null, false); 3192ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3193ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // This is needed to decode the audio file into a PCM file 3194ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, false); 3195ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3196ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3197ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3198ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3199ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3200ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_REMOVE: { 3201ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3202ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_AUDIO_TRACK_REMOVE: " 3203ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi + intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3204ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3205ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3206ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.removeAudioTrack(intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID)); 3207ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3208ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 3209ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, false); 3210ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3211ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3212ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3213ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3214ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_BOUNDARIES: { 3215ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3216ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3217ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_AUDIO_TRACK_SET_BOUNDARIES: " + audioTrackId); 3218ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3219ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3220ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final AudioTrack audioTrack = videoEditor.getAudioTrack(audioTrackId); 3221ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack == null) { 3222ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("AudioTrack not found: " + 3223ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrackId); 3224ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3225ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3226ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.setExtractBoundaries(intent.getLongExtra(PARAM_BEGIN_BOUNDARY, 0), 3227ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_END_BOUNDARY, 0)); 3228ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3229ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 3230ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, false); 3231ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3232ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3233ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3234ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3235ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_LOOP: { 3236ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3237ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3238ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_AUDIO_TRACK_SET_LOOP: " + audioTrackId); 3239ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3240ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3241ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final AudioTrack audioTrack = videoEditor.getAudioTrack(audioTrackId); 3242ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack == null) { 3243ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("AudioTrack not found: " + 3244ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrackId); 3245ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3246ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3247ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (intent.getBooleanExtra(PARAM_LOOP, false)) { 3248ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.enableLoop(); 3249ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3250ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.disableLoop(); 3251ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3252ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3253ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 3254ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, false); 3255ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3256ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3257ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3258ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3259ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_DUCK: { 3260ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3261ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3262ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_AUDIO_TRACK_SET_DUCK: " + audioTrackId); 3263ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3264ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3265ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final AudioTrack audioTrack = videoEditor.getAudioTrack(audioTrackId); 3266ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack == null) { 3267ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("AudioTrack not found: " + 3268ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrackId); 3269ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3270ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3271ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (intent.getBooleanExtra(PARAM_DUCK, false)) { 3272516fd1bedc49dc893d4bfbb0281aabd121e1f4f4Gil Dobjanschi audioTrack.enableDucking(DUCK_THRESHOLD, DUCK_TRACK_VOLUME); 3273ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3274ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.disableDucking(); 3275ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3276ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3277ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 3278ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, false); 3279ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3280ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3281ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3282ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3283ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_VOLUME: { 3284ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3285ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3286ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_AUDIO_TRACK_SET_VOLUME: " + audioTrackId); 3287ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3288ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3289ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final AudioTrack audioTrack = videoEditor.getAudioTrack(audioTrackId); 3290ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack == null) { 3291ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("AudioTrack not found: " + 3292ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrackId); 3293ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3294ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3295ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.setVolume(intent.getIntExtra(PARAM_VOLUME, 0)); 3296ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3297ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 3298ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, false); 3299ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3300ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3301ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3302ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3303ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_MUTE: { 3304ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3305ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3306ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_AUDIO_TRACK_SET_MUTE: " + audioTrackId); 3307ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3308ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3309ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final AudioTrack audioTrack = videoEditor.getAudioTrack(audioTrackId); 3310ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack == null) { 3311ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("AudioTrack not found: " + 3312ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrackId); 3313ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3314ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3315ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.setMute(intent.getBooleanExtra(PARAM_MUTE, false)); 3316ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3317ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, null, null, false); 3318ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi generatePreview(videoEditor, false); 3319ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent); 3320ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3321ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3322ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3323ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM: { 3324ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3325ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 3326ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM: " + audioTrackId); 3327ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3328ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3329ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final AudioTrack audioTrack = videoEditor.getAudioTrack(audioTrackId); 3330ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack == null) { 3331ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("AudioTrack not found: " + 3332ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrackId); 3333ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3334ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3335ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final WaveformData waveformData = audioTrack.getWaveformData(); 3336ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (waveformData == null) { 3337ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi extractAudioTrackAudioWaveform(intent, audioTrack); 3338ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3339ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, waveformData, null, true); 3340ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3341ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3342ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3343ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3344ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM_STATUS: { 3345ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3346ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final AudioTrack audioTrack = videoEditor.getAudioTrack(audioTrackId); 3347ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack == null) { 3348ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("AudioTrack not found: " + 3349ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrackId); 3350ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3351ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3352ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, null, audioTrack.getWaveformData(), null, 3353ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi true); 3354ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3355ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3356ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3357ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi default: { 3358ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Unhandled operation: " + op); 3359ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3360ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3361ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } catch (Exception ex) { 3362ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ex.printStackTrace(); 3363ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi completeRequest(intent, videoEditor, ex, null, null, true); 3364ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3365ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3366ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3367ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 3368ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Complete the request 3369ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 3370ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The intent 3371ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param videoEditor The video editor 3372ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param exception The exception 3373ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param result The result object 3374ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param extraResult The extra result object 3375ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param finalize true if the request should be finalized 3376ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 3377ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void completeRequest(final Intent intent, final VideoEditor videoEditor, 3378ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Exception exception, final Object result, final Object extraResult, 3379ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final boolean finalize) { 3380ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mHandler.post (new Runnable() { 3381ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 3382ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 3383ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 3384ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void run() { 3385ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi onIntentProcessed(intent, videoEditor, result, extraResult, exception, finalize); 3386ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3387ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }); 3388ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3389ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3390ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 3391ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Complete the request 3392ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 3393ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The intent 3394ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 3395ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void completeRequest(final Intent intent) { 3396ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mHandler.post (new Runnable() { 3397ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 3398ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 3399ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 3400ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void run() { 3401ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3402ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mIntentPool.put(intent); 3403ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3404ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }); 3405ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3406ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3407ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 3408ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Process the intent 3409ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 3410ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The intent 3411ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param videoEditor The VideoEditor on which the operation was performed 3412ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param result The result object 3413ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param extraResult The extra result object 3414ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param ex The exception 3415ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param finalize true if the request should be finalized 3416ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 3417ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @SuppressWarnings("unchecked") 3418ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onIntentProcessed(final Intent intent, VideoEditor videoEditor, 3419ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Object result, Object extraResult, Exception ex, boolean finalize) { 3420ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3421ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String projectPath = intent.getStringExtra(PARAM_PROJECT_PATH); 3422ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int op = intent.getIntExtra(PARAM_OP, -1); 3423ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi switch (op) { 3424ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_LOAD_PROJECTS: { 3425ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3426ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3427ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3428ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3429ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<VideoEditorProject> projects = (List<VideoEditorProject>)result; 3430ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3431ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onProjectsLoaded(projects, ex); 3432ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3433ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3434ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3435ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3436ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3437ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_CREATE: { 3438ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3439ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3440ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3441ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3442ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Release the old project 3443ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoProject != null) { 3444ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoProject.release(); 3445ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoProject = null; 3446ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3447ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3448ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex != null) { 3449ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi FileUtils.deleteDir(new File(projectPath)); 3450ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3451ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoProject = (VideoEditorProject)result; 3452ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3453ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3454ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3455ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorCreated(projectPath, mVideoProject, 3456ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor != null ? videoEditor.getAllMediaItems() : null, 3457ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor != null ? videoEditor.getAllAudioTracks() : null, ex); 3458ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3459ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3460ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3461ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3462ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3463ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_LOAD: { 3464ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3465ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3466ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3467ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3468ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (result != null) { // A new project was created 3469ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoProject != null) { 3470ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoProject.release(); 3471ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoProject = null; 3472ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3473ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoProject = (VideoEditorProject)result; 3474ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3475ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3476ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3477ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorLoaded(projectPath, mVideoProject, 3478ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ex == null ? videoEditor.getAllMediaItems() : null, 3479ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ex == null ? videoEditor.getAllAudioTracks() : null, ex); 3480ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3481ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3482ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3483ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3484ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3485ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_SET_ASPECT_RATIO: { 3486ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3487ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3488ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3489ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3490ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int aspectRatio = intent.getIntExtra(PARAM_ASPECT_RATIO, 3491ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaProperties.ASPECT_RATIO_UNDEFINED); 3492ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3493ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3494ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3495ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setAspectRatio(aspectRatio); 3496ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3497ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3498ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3499ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3500ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorAspectRatioSet(projectPath, aspectRatio, ex); 3501ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3502ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3503ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3504ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3505ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3506ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_APPLY_THEME: { 3507ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3508ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3509ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3510ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3511ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String theme = intent.getStringExtra(PARAM_THEME); 3512ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3513ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3514ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3515ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setTheme(theme); 3516ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setMediaItems((List<MovieMediaItem>)result); 3517ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setAudioTracks((List<MovieAudioTrack>)extraResult); 3518ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3519ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3520ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3521ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3522ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorThemeApplied(projectPath, theme, ex); 3523ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3524ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3525ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3526ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3527ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3528ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_GENERATE_PREVIEW_PROGRESS: { 3529ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String className = intent.getStringExtra(PARAM_ATTRIBUTES); 3530ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String itemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3531ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int action = intent.getIntExtra(PARAM_ACTION, 3532ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi VideoEditor.MediaProcessingProgressListener.ACTION_DECODE); 3533ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int progress = intent.getIntExtra(PARAM_PROGRESS_VALUE, 0); 3534ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3535ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3536ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorGeneratePreviewProgress(projectPath, className, itemId, 3537ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi action, progress); 3538ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3539ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3540ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3541ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3542ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3543ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_EXPORT: { 3544ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex != null) { 3545ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3546ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3547ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3548ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3549ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String filename = intent.getStringExtra(PARAM_FILENAME); 3550ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3551ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorExportComplete(projectPath, filename, ex); 3552ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3553ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3554ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // The request is still pending 3555ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3556ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3557ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3558ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3559ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_CANCEL_EXPORT: { 3560ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3561ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3562ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3563ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3564ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3565ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorExportCanceled(projectPath, 3566ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_FILENAME)); 3567ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3568ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3569ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3570ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3571ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_EXPORT_STATUS: { 3572ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // This operation is for the service internal use only 3573ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3574ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3575ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3576ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3577ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String filename = intent.getStringExtra(PARAM_FILENAME); 3578ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (intent.hasExtra(PARAM_EXCEPTION)) { // Complete 3579ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest((Intent)intent.getParcelableExtra(PARAM_INTENT)); 3580ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3581ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Exception exception = 3582ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi (Exception)intent.getSerializableExtra(PARAM_EXCEPTION); 3583ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3584ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null && exception == null) { 3585ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Uri uri = (Uri)intent.getParcelableExtra(PARAM_MOVIE_URI); 3586ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.addExportedMovieUri(uri); 3587ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3588ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3589ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3590ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorExportComplete(projectPath, filename, exception); 3591ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3592ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // Progress 3593ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3594ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorExportProgress(projectPath, filename, 3595ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getIntExtra(PARAM_PROGRESS_VALUE, -1)); 3596ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3597ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3598ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // The original request is still pending 3599ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3600ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3601ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3602ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3603ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_SAVE: { 3604ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3605ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3606ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3607ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3608ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3609ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorSaved(projectPath, ex); 3610ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3611ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3612ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3613ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3614ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_RELEASE: { 3615ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3616ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3617ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3618ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3619ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3620ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3621ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.release(); 3622ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoProject == videoProject) { 3623ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoProject = null; 3624ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3625ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3626ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3627ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3628ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorReleased(projectPath, ex); 3629ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3630ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3631ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3632ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3633ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3634ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_VIDEO_EDITOR_DELETE: { 3635ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3636ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3637ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3638ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3639ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3640ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3641ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.release(); 3642ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoProject == videoProject) { 3643ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoProject = null; 3644ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3645ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3646ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3647ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3648ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onVideoEditorDeleted(projectPath, ex); 3649ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3650ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3651ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3652ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3653ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3654ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_ADD_VIDEO_URI: { 3655ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3656ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3657ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3658ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3659ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String afterMediaItemId = 3660ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID); 3661ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3662ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem movieMediaItem = (MovieMediaItem)result; 3663ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3664ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3665ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null && extraResult != null) { 3666ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // The aspect ratio has changed 3667ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setAspectRatio((Integer)extraResult); 3668ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3669ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3670ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3671ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.insertMediaItem(movieMediaItem, afterMediaItemId); 3672ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3673ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3674ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3675ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3676ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onMediaItemAdded(projectPath, 3677ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), movieMediaItem, 3678ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItemId, MediaVideoItem.class, (Integer)extraResult, ex); 3679ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3680ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3681ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3682ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3683ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3684ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_ADD_IMAGE_URI: { 3685ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3686ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3687ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3688ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3689ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String afterMediaItemId = 3690ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID); 3691ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3692ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem movieMediaItem = (MovieMediaItem)result; 3693ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3694ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3695ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null && extraResult != null) { 3696ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // The aspect ratio has changed 3697ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setAspectRatio((Integer)extraResult); 3698ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3699ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3700ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3701ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.insertMediaItem(movieMediaItem, afterMediaItemId); 3702ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3703ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3704ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3705ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3706ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onMediaItemAdded(projectPath, 3707ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), movieMediaItem, 3708ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItemId, MediaImageItem.class, (Integer)extraResult, ex); 3709ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3710ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3711ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3712ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3713ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3714ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_MOVE: { 3715ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3716ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3717ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3718ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3719ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3720ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3721ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3722ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.setMediaItems((List<MovieMediaItem>)result); 3723ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3724ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3725ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3726ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3727ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onMediaItemMoved(projectPath, 3728ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 3729ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_RELATIVE_STORYBOARD_ITEM_ID), ex); 3730ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3731ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3732ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3733ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3734ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3735ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_REMOVE: { 3736ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3737ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3738ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3739ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3740ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3741ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTransition transition = (MovieTransition)result; 3742ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3743ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3744ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3745ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.removeMediaItem(mediaItemId, transition); 3746ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3747ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3748ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3749ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3750ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onMediaItemRemoved(projectPath, mediaItemId, transition, ex); 3751ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3752ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3753ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3754ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3755ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3756ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_RENDERING_MODE: { 3757ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3758ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3759ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3760ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3761ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3762ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int renderingMode = intent.getIntExtra(PARAM_MEDIA_ITEM_RENDERING_MODE, 3763ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaItem.RENDERING_MODE_BLACK_BORDER); 3764ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3765ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3766ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3767ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem mediaItem = videoProject.getMediaItem(mediaItemId); 3768ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem != null) { 3769ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3770ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setRenderingMode(renderingMode); 3771ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3772ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setAppRenderingMode(mediaItem.getRenderingMode()); 3773ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3774ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3775ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3776ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3777ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3778ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onMediaItemRenderingModeSet(projectPath, mediaItemId, renderingMode, 3779ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ex); 3780ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3781ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3782ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3783ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3784ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3785ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_DURATION: { 3786ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3787ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3788ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3789ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3790ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3791ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3792ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3793ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3794ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3795ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.updateMediaItem((MovieMediaItem)result); 3796ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3797ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem oldMediaItem = videoProject.getMediaItem(mediaItemId); 3798ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (oldMediaItem != null) { 3799ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi oldMediaItem.setAppExtractBoundaries(0, oldMediaItem.getDuration()); 3800ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3801ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3802ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3803ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3804ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3805ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onMediaItemDurationSet(projectPath, mediaItemId, 3806ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_DURATION, 0), ex); 3807ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3808ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3809ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3810ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3811ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3812ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_BOUNDARIES: { 3813ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3814ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3815ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3816ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3817ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3818ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3819ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3820ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3821ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3822ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem mediaItem = (MovieMediaItem)result; 3823ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.updateMediaItem(mediaItem); 3824ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3825ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem oldMediaItem = videoProject.getMediaItem(mediaItemId); 3826ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (oldMediaItem != null) { 3827ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi oldMediaItem.setAppExtractBoundaries( 3828ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi oldMediaItem.getBoundaryBeginTime(), 3829ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi oldMediaItem.getBoundaryEndTime()); 3830ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3831ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3832ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3833ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3834ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3835ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onMediaItemBoundariesSet(projectPath, mediaItemId, 3836ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_BEGIN_BOUNDARY, 0), 3837ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_END_BOUNDARY, 0), ex); 3838ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3839ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3840ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3841ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3842ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3843ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_GET_THUMBNAIL: { 3844ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3845ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3846ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3847ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3848ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bitmap bitmap = (Bitmap)result; 3849ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi boolean used = false; 3850ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3851ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi used |= listener.onMediaItemThumbnail(projectPath, 3852ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 3853ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi bitmap, intent.getLongExtra(PARAM_START_TIME, 0), ex); 3854ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3855ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3856ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (used == false) { 3857ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (bitmap != null) { 3858ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi bitmap.recycle(); 3859ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3860ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3861ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3862ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3863ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3864ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3865ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_GET_THUMBNAILS: { 3866ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3867ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3868ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3869ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3870ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bitmap[] bitmaps = (Bitmap[])result; 3871ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi boolean used = false; 3872ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3873ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi used |= listener.onMediaItemThumbnails(projectPath, 3874ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 3875ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi bitmaps, intent.getLongExtra(PARAM_START_TIME, 0), 3876ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getLongExtra(PARAM_END_TIME, 0), ex); 3877ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3878ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3879ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (used == false) { 3880ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (bitmaps != null) { 3881ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < bitmaps.length; i++) { 3882ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi bitmaps[i].recycle(); 3883ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3884ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3885ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3886ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3887ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3888ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3889ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3890ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_VOLUME: { 3891ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3892ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3893ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3894ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3895ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3896ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3897ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3898ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem mediaItem = videoProject.getMediaItem(mediaItemId); 3899ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem != null) { 3900ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3901ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setVolume(intent.getIntExtra(PARAM_VOLUME, 0)); 3902ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3903ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setAppVolume(mediaItem.getVolume()); 3904ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3905ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3906ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3907ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3908ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3909ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3910ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3911ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_SET_MUTE: { 3912ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3913ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3914ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3915ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3916ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3917ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3918ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3919ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem mediaItem = videoProject.getMediaItem(mediaItemId); 3920ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem != null) { 3921ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 3922ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setMute(intent.getBooleanExtra(PARAM_MUTE, false)); 3923ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3924ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setAppMute(mediaItem.isMuted()); 3925ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3926ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3927ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3928ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3929ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3930ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3931ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3932ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM_STATUS: { 3933ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3934ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3935ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3936ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3937ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3938ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3939ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // This operation is for internal use only 3940ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (intent.hasExtra(PARAM_EXCEPTION)) { // Complete 3941ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest((Intent)intent.getParcelableExtra(PARAM_INTENT)); 3942ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3943ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3944ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3945ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (result != null) { 3946ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem mediaItem = 3947ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.getMediaItem(mediaItemId); 3948ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem != null) { 3949ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setWaveformData((WaveformData)result); 3950ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3951ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3952ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3953ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3954ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3955ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onMediaItemExtractAudioWaveformComplete(projectPath, mediaItemId, 3956ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi (Exception)intent.getSerializableExtra(PARAM_EXCEPTION)); 3957ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3958ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // Progress 3959ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3960ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onMediaItemExtractAudioWaveformProgress(projectPath, 3961ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItemId, intent.getIntExtra(PARAM_PROGRESS_VALUE, -1)); 3962ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3963ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // The original request is still pending 3964ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3965ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3966ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3967ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3968ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3969ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM: { 3970ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex != null || result != null) { 3971ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 3972ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 3973ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3974ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3975ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 3976ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3977ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 3978ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 3979ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (result != null) { 3980ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem mediaItem = 3981ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.getMediaItem(mediaItemId); 3982ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.setWaveformData((WaveformData)result); 3983ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3984ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3985ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3986ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 3987ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onMediaItemExtractAudioWaveformComplete(projectPath, 3988ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItemId, ex); 3989ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3990ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 3991ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // The request is still pending 3992ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3993ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3994ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 3995ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 3996ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 3997ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_ALPHA: 3998ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_CROSSFADE: 3999ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_FADE_BLACK: 4000ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_INSERT_SLIDING: { 4001ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4002ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4003ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4004ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4005ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String afterMediaItemId = intent.getStringExtra( 4006ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_RELATIVE_STORYBOARD_ITEM_ID); 4007ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4008ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTransition movieTransition; 4009ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4010ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4011ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = (Transition)result; 4012ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // This is null for start transitions 4013ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4014ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieTransition = new MovieTransition(transition); 4015ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.addTransition(movieTransition, afterMediaItemId); 4016ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4017ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieTransition = null; 4018ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4019ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4020ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieTransition = null; 4021ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4022ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4023ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4024ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onTransitionInserted(projectPath, movieTransition, 4025ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi afterMediaItemId, ex); 4026ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4027ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4028ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4029ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4030ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4031ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_REMOVE: { 4032ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4033ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4034ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4035ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4036ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String transitionId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4037ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4038ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4039ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4040ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4041ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.removeTransition(transitionId); 4042ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4043ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4044ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4045ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4046ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onTransitionRemoved(projectPath, transitionId, ex); 4047ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4048ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4049ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4050ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4051ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4052ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_SET_DURATION: { 4053ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4054ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4055ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4056ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4057ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String transitionId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4058ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final long durationMs = intent.getLongExtra(PARAM_DURATION, 0); 4059ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4060ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4061ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4062ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTransition transition = videoProject.getTransition(transitionId); 4063ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (transition != null) { 4064ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4065ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi transition.setDuration(durationMs); 4066ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4067ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi transition.setAppDuration(transition.getDuration()); 4068ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4069ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4070ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4071ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4072ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4073ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onTransitionDurationSet(projectPath, transitionId, durationMs, ex); 4074ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4075ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4076ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4077ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4078ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4079ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_TRANSITION_GET_THUMBNAIL: { 4080ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4081ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4082ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4083ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4084ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bitmap[] bitmaps = (Bitmap[])result; 4085ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi boolean used = false; 4086ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4087ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi used |= listener.onTransitionThumbnails(projectPath, 4088ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID), 4089ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi bitmaps, ex); 4090ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4091ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4092ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (used == false) { 4093ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (bitmaps != null) { 4094ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < bitmaps.length; i++) { 4095ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (bitmaps[i] != null) { 4096ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi bitmaps[i].recycle(); 4097ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4098ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4099ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_ADD: { 4106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra( 4111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_RELATIVE_STORYBOARD_ITEM_ID); 4112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4113ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieOverlay movieOverlay = (MovieOverlay)result; 4114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.addOverlay(mediaItemId, movieOverlay); 4118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onOverlayAdded(projectPath, movieOverlay, mediaItemId, ex); 4123ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4124ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4125ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4126ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4127ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4128ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_REMOVE: { 4129ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4130ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4131ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra( 4134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_RELATIVE_STORYBOARD_ITEM_ID); 4135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String overlayId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.removeOverlay(mediaItemId, overlayId); 4141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onOverlayRemoved(projectPath, overlayId, mediaItemId, ex); 4146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_SET_START_TIME: { 4152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4154ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra( 4157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_RELATIVE_STORYBOARD_ITEM_ID); 4158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String overlayId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final long startTimeMs = intent.getLongExtra(PARAM_START_TIME, 0); 4160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4161ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4162ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4163ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieOverlay overlay = videoProject.getOverlay(mediaItemId, overlayId); 4164ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (overlay != null) { 4165ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setStartTime(startTimeMs); 4167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setAppStartTime(overlay.getStartTime()); 4169ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4170ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4171ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4172ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onOverlayStartTimeSet(projectPath, overlayId, mediaItemId, 4175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi startTimeMs, ex); 4176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4180ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4181ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_SET_DURATION: { 4182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4185ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4186ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra( 4187ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_RELATIVE_STORYBOARD_ITEM_ID); 4188ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String overlayId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4189ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final long durationMs = intent.getLongExtra(PARAM_DURATION, 0); 4190ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4191ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4192ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4193ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieOverlay overlay = videoProject.getOverlay(mediaItemId, overlayId); 4194ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (overlay != null) { 4195ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4196ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setDuration(durationMs); 4197ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4198ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setAppDuration(overlay.getDuration()); 4199ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4200ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4201ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4202ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4203ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4204ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onOverlayDurationSet(projectPath, overlayId, mediaItemId, 4205ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi durationMs, ex); 4206ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4207ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4208ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4209ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4210ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4211ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_OVERLAY_SET_ATTRIBUTES: { 4212ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4213ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4214ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4215ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4216ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra( 4217ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_RELATIVE_STORYBOARD_ITEM_ID); 4218ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String overlayId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4219ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bundle userAttributes = intent.getBundleExtra(PARAM_ATTRIBUTES); 4220ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4221ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4222ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4223ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4224ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieOverlay overlay = videoProject.getOverlay(mediaItemId, 4225ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlayId); 4226ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (overlay != null) { 4227ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.updateUserAttributes(userAttributes); 4228ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4229ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4230ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4231ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4232ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4233ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onOverlayUserAttributesSet(projectPath, overlayId, mediaItemId, 4234ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi userAttributes, ex); 4235ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4236ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4237ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4238ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4239ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4240ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_EFFECT_ADD_COLOR: 4241ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_EFFECT_ADD_IMAGE_KEN_BURNS:{ 4242ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4243ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4244ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4245ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4246ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra( 4247ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_RELATIVE_STORYBOARD_ITEM_ID); 4248ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4249ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieEffect movieEffect = (MovieEffect)result; 4250ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4251ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4252ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4253ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.addEffect(mediaItemId, movieEffect); 4254ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4255ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4256ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4257ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4258ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onEffectAdded(projectPath, movieEffect, mediaItemId, ex); 4259ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4260ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4261ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4262ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4263ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4264ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_EFFECT_REMOVE: { 4265ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4266ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4267ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4268ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4269ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String mediaItemId = intent.getStringExtra( 4270ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_RELATIVE_STORYBOARD_ITEM_ID); 4271ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String effectId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4272ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4273ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4274ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4275ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4276ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.removeEffect(mediaItemId, effectId); 4277ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4278ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4279ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4280ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4281ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onEffectRemoved(projectPath, effectId, mediaItemId, ex); 4282ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4283ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4284ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4285ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4286ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4287ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_ADD: { 4288ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4289ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4290ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4291ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4292ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieAudioTrack movieAudioTrack = (MovieAudioTrack)result; 4293ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4294ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4295ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4296ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.addAudioTrack(movieAudioTrack); 4297ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4298ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4299ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4300ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4301ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onAudioTrackAdded(projectPath, movieAudioTrack, ex); 4302ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4303ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4304ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4305ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4306ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4307ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_REMOVE: { 4308ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4309ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4310ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4311ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4312ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4313ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4314ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4315ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4316ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4317ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.removeAudioTrack(audioTrackId); 4318ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4319ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4320ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4321ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4322ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onAudioTrackRemoved(projectPath, audioTrackId, ex); 4323ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4324ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4325ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4326ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4327ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4328ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_BOUNDARIES: { 4329ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4330ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4331ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4332ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4333ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4334ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final long beginBoundary = intent.getLongExtra(PARAM_BEGIN_BOUNDARY, 0); 4335ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final long endBoundary = intent.getLongExtra(PARAM_END_BOUNDARY, 0); 4336ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4337ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4338ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4339ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4340ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieAudioTrack audioTrack = 4341ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.getAudioTrack(audioTrackId); 4342ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack != null) { 4343ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.setExtractBoundaries(beginBoundary, endBoundary); 4344ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4345ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4346ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4347ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4348ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4349ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onAudioTrackBoundariesSet(projectPath, audioTrackId, 4350ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi beginBoundary, endBoundary, ex); 4351ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4352ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4353ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4354ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4355ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4356ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_LOOP: { 4357ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4358ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4359ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4360ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4361ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4362ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4363ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4364ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieAudioTrack audioTrack = videoProject.getAudioTrack(audioTrackId); 4365ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack != null) { 4366ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4367ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.enableLoop(intent.getBooleanExtra(PARAM_LOOP, false)); 4368ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4369ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.enableAppLoop(audioTrack.isLooping()); 4370ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4371ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4372ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4373ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4374ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4375ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4376ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4377ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_DUCK: { 4378ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4379ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4380ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4381ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4382ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4383ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4384ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4385ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieAudioTrack audioTrack = videoProject.getAudioTrack(audioTrackId); 4386ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack != null) { 4387ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4388ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.enableDucking(intent.getBooleanExtra(PARAM_DUCK, false)); 4389ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4390ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.enableAppDucking(audioTrack.isDuckingEnabled()); 4391ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4392ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4393ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4394ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4395ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4396ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4397ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4398ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_VOLUME: { 4399ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4400ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4401ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4402ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4403ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4404ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4405ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4406ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieAudioTrack audioTrack = videoProject.getAudioTrack(audioTrackId); 4407ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack != null) { 4408ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4409ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.setVolume(intent.getIntExtra(PARAM_VOLUME, 0)); 4410ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4411ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.setAppVolume(audioTrack.getVolume()); 4412ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4413ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4414ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4415ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4416ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4417ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4418ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4419ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_SET_MUTE: { 4420ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4421ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4422ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4423ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4424ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4425ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4426ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4427ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieAudioTrack audioTrack = videoProject.getAudioTrack(audioTrackId); 4428ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack != null) { 4429ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex == null) { 4430ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.setMute(intent.getBooleanExtra(PARAM_MUTE, false)); 4431ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4432ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.setAppMute(audioTrack.isMuted()); 4433ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4434ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4435ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4436ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4437ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4438ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4439ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4440ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM: { 4441ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (ex != null || result != null) { 4442ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4443ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4444ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4445ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4446ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4447ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4448ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4449ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4450ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (result != null) { 4451ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieAudioTrack audioTrack = 4452ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.getAudioTrack(audioTrackId); 4453ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack != null) { 4454ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.setWaveformData((WaveformData)result); 4455ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4456ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4457ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4458ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4459ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4460ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onAudioTrackExtractAudioWaveformComplete(projectPath, 4461ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrackId, ex); 4462ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4463ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4464ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // The request is still pending 4465ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4466ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4467ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4468ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4469ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4470ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM_STATUS: { 4471ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4472ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4473ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4474ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4475ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String audioTrackId = intent.getStringExtra(PARAM_STORYBOARD_ITEM_ID); 4476ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // This operation is for internal use only 4477ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (intent.hasExtra(PARAM_EXCEPTION)) { // Complete 4478ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest((Intent)intent.getParcelableExtra(PARAM_INTENT)); 4479ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4480ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final VideoEditorProject videoProject = getProject(projectPath); 4481ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (videoProject != null) { 4482ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (result != null) { 4483ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieAudioTrack audioTrack = 4484ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoProject.getAudioTrack(audioTrackId); 4485ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (audioTrack != null) { 4486ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.setWaveformData((WaveformData)result); 4487ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4488ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4489ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4490ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4491ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4492ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onAudioTrackExtractAudioWaveformComplete(projectPath, 4493ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrackId, 4494ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi (Exception)intent.getSerializableExtra(PARAM_EXCEPTION)); 4495ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4496ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // Progress 4497ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4498ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onAudioTrackExtractAudioWaveformProgress(projectPath, 4499ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrackId, intent.getIntExtra(PARAM_PROGRESS_VALUE, -1)); 4500ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4501ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4502ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4503ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4504ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4505ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4506ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi default: { 4507ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4508ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi finalizeRequest(intent); 4509ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4510ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4511ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4512ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4513ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4514ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (finalize) { 4515ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mIntentPool.put(intent); 4516ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4517ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4518ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4519ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4520ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Finalize a request 4521ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4522ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The intent which completed 4523ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4524ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void finalizeRequest(Intent intent) { 4525ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mPendingIntents.remove(intent.getStringExtra(PARAM_REQUEST_ID)); 4526ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4527ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String projectPath = intent.getStringExtra(PARAM_PROJECT_PATH); 4528ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (projectPath != null) { 4529ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final boolean projectEdited = isProjectEdited(projectPath); 4530ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (projectEdited == false) { 4531ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (ApiServiceListener listener : mListeners) { 4532ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi listener.onProjectEditState(projectPath, projectEdited); 4533ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4534ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4535ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4536ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4537ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mPendingIntents.size() == 0) { 4538ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Cancel the current timer. Extend the timeout by 5000 ms 4539ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mHandler.removeCallbacks(mStopRunnable); 4540ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4541ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Start a timer which will stop the service if the queue of 4542ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // pending intent will be empty at that time. 4543ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // This prevents the service from starting & stopping too often. 4544ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mHandler.postDelayed(mStopRunnable, 5000); 4545ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 4546ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "completeRequest: Stopping service in 5000 ms"); 4547ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4548ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4549ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4550ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4551ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4552ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Check if the current project is the project specified by the specified path 4553ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4554ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 4555ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4556ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The video editor project 4557ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4558ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private VideoEditorProject getProject(String projectPath) { 4559ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoProject != null) { 4560ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoProject.getPath().equals(projectPath)) { 4561ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mVideoProject; 4562ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4563ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4564ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4565ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return null; 4566ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4567ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4568ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4569ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Check if the current editor is the project specified by the specified path 4570ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4571ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 4572ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4573ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The video editor 4574ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4575ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private synchronized VideoEditor getVideoEditor(String projectPath) { 4576ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoEditor != null) { 4577ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoEditor.getPath().equals(projectPath)) { 4578ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mVideoEditor; 4579ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4580ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4581ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4582ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return null; 4583ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4584ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4585ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4586ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Release the editor 4587ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4588ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private synchronized void releaseEditor() { 4589ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoEditor != null) { 4590ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 4591ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "releaseEditor (current): " + mVideoEditor.getPath()); 4592ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4593ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoEditor.release(); 4594ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoEditor = null; 4595ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mGeneratePreviewListener = null; 4596ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4597ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi System.gc(); 4598ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4599ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4600ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4601ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4602ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Release the specified editor 4603ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4604ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 4605ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4606ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private synchronized void releaseEditor(String projectPath) { 4607ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoEditor != null) { 4608ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoEditor.getPath().equals(projectPath)) { 4609ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 4610ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "releaseEditor: " + projectPath); 4611ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4612ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoEditor.release(); 4613ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoEditor = null; 4614ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mGeneratePreviewListener = null; 4615ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4616ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi System.gc(); 4617ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4618ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4619ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4620ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4621ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4622ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Release the current editor if it is *not* the current editor 4623ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4624ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param projectPath The project path 4625ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4626ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The current video editor 4627ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4628ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private synchronized VideoEditor releaseEditorNot(String projectPath) { 4629ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mVideoEditor != null) { 4630ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (!mVideoEditor.getPath().equals(projectPath)) { 4631ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 4632ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "releaseEditorNot: " + mVideoEditor.getPath()); 4633ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4634ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoEditor.release(); 4635ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoEditor = null; 4636ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mGeneratePreviewListener = null; 4637ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4638ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi System.gc(); 4639ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4640ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4641ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4642ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mVideoEditor; 4643ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4644ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4645ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4646ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Generate the preview 4647ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4648ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param videoEditor The video editor 4649ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param updatePreviewFrame true to show preview frame when done 4650ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4651ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void generatePreview(VideoEditor videoEditor, boolean updatePreviewFrame) { 4652ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 4653ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.generatePreview(mGeneratePreviewListener); 4654ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mGeneratePreviewListener != null) { 4655ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // This is the last callback which is always fired last to 4656ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // let the UI know that generate preview completed 4657ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mGeneratePreviewListener.onProgress(null, 4658ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi updatePreviewFrame ? ACTION_UPDATE_FRAME : ACTION_NO_FRAME_UPDATE, 100); 4659ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4660ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } catch (Exception ex) { 4661ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ex.printStackTrace(); 4662ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4663ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4664ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4665ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4666ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Export a movie 4667ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4668ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param videoEditor The video editor 4669ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The intent 4670ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4671ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void exportMovie(final VideoEditor videoEditor, final Intent intent) { 4672ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi new Thread() { 4673ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 4674ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 4675ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4676ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @Override 4677ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void run() { 4678ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String filename = intent.getStringExtra(PARAM_FILENAME); 4679ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int height = intent.getIntExtra(PARAM_HEIGHT, -1); 4680ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int bitrate = intent.getIntExtra(PARAM_BITRATE, -1); 4681ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4682ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Create the export status Intent 4683ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent statusIntent = mIntentPool.get(); 4684ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_EXPORT_STATUS); 4685ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_PROJECT_PATH, intent.getStringExtra( 4686ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_PROJECT_PATH)); 4687ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_FILENAME, filename); 4688ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_INTENT, intent); 4689ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4690ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 4691ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Export is always executed in a distinct worker thread. 4692ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.export(filename, height, bitrate, new ExportProgressListener() { 4693ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 4694ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 4695ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4696ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onProgress(VideoEditor videoEditor, String filename, 4697ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int progress) { 4698ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent progressIntent = mIntentPool.get(); 4699ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_OP, OP_VIDEO_EDITOR_EXPORT_STATUS); 4700ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_PROJECT_PATH, intent.getStringExtra( 4701ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi PARAM_PROJECT_PATH)); 4702ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_FILENAME, filename); 4703ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_INTENT, intent); 4704ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_PROGRESS_VALUE, progress); 4705ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread.put(progressIntent); 4706b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi if (Log.isLoggable(TAG, Log.VERBOSE)) { 4707b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi Log.v(TAG, "Export progress: " + progress + " for: " + filename); 4708b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi } 4709ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4710ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }); 4711ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4712ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Complete the request 4713ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_EXCEPTION, (Exception)null); 4714ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (new File(filename).exists()) { 4715ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_MOVIE_URI, exportToGallery(filename)); 4716ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4717ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalStateException("Export file does not exist: " + filename); 4718ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4719b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi 4720b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi if (Log.isLoggable(TAG, Log.VERBOSE)) { 4721b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi Log.v(TAG, "Export complete for: " + filename); 4722b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi } 4723ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } catch (Exception ex) { 4724ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_EXCEPTION, ex); 4725b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi 4726b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi if (Log.isLoggable(TAG, Log.VERBOSE)) { 4727b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi Log.v(TAG, "Export error for: " + filename); 4728b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi ex.printStackTrace(); 4729b1fd023531a65d0a15f665fd975791ea1b5f22c3Gil Dobjanschi } 4730ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4731ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread.put(statusIntent); 4732ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4733ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }.start(); 4734ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4735ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4736ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4737ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Extract the audio waveform of a media item 4738ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4739ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The original Intent 4740ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItem The media item 4741ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4742ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void extractMediaItemAudioWaveform(final Intent intent, 4743ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaVideoItem mediaItem) { 4744ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi new Thread() { 4745ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 4746ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 4747ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4748ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @Override 4749ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void run() { 4750ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent statusIntent = mIntentPool.get(); 4751ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_OP, OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM_STATUS); 4752ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_PROJECT_PATH, 4753ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_PROJECT_PATH)); 4754ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_INTENT, intent); 4755ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItem.getId()); 4756ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 4757ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.extractAudioWaveform( 4758ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi new ExtractAudioWaveformProgressListener() { 4759ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 4760ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 4761ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4762ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onProgress(int progress) { 4763ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent progressIntent = mIntentPool.get(); 4764ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_OP, OP_MEDIA_ITEM_EXTRACT_AUDIO_WAVEFORM_STATUS); 4765ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_PROJECT_PATH, 4766ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_PROJECT_PATH)); 4767ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_INTENT, intent); 4768ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_STORYBOARD_ITEM_ID, mediaItem.getId()); 4769ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_PROGRESS_VALUE, progress); 4770ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread.put(progressIntent); 4771ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4772ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }); 4773ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_EXCEPTION, (Exception)null); 4774ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } catch (Exception ex) { 4775ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_EXCEPTION, ex); 4776ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4777ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread.put(statusIntent); 4778ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4779ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }.start(); 4780ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4781ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4782ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4783ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Extract the audio waveform of an AudioTrack 4784ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4785ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The original Intent 4786ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTrack The audio track 4787ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4788ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void extractAudioTrackAudioWaveform(final Intent intent, final AudioTrack audioTrack) { 4789ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi new Thread() { 4790ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 4791ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 4792ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4793ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @Override 4794ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void run() { 4795ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent statusIntent = mIntentPool.get(); 4796ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_OP, OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM_STATUS); 4797ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_PROJECT_PATH, 4798ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_PROJECT_PATH)); 4799ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_INTENT, intent); 4800ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_STORYBOARD_ITEM_ID, audioTrack.getId()); 4801ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 4802ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 4803ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "extractAudioTrackAudioWaveform: start: " + audioTrack.getId()); 4804ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4805ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.extractAudioWaveform( 4806ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi new ExtractAudioWaveformProgressListener() { 4807ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 4808ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 4809ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4810ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void onProgress(int progress) { 4811ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent progressIntent = mIntentPool.get(); 4812ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_OP, 4813ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi OP_AUDIO_TRACK_EXTRACT_AUDIO_WAVEFORM_STATUS); 4814ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_PROJECT_PATH, 4815ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.getStringExtra(PARAM_PROJECT_PATH)); 4816ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_INTENT, intent); 4817ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_STORYBOARD_ITEM_ID, audioTrack.getId()); 4818ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi progressIntent.putExtra(PARAM_PROGRESS_VALUE, progress); 4819ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread.put(progressIntent); 4820ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4821ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }); 4822ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 4823ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "extractAudioTrackAudioWaveform: stop: " + audioTrack.getId()); 4824ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4825ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_EXCEPTION, (Exception)null); 4826ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } catch (Exception ex) { 4827ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi statusIntent.putExtra(PARAM_EXCEPTION, ex); 4828ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4829ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mVideoThread.put(statusIntent); 4830ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4831ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }.start(); 4832ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4833ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4834ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4835ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get the media item following the specified media item 4836ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4837ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param videoEditor The video editor 4838ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItemId The media item id 4839ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The next media item 4840ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4841ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static MediaItem nextMediaItem(VideoEditor videoEditor, String mediaItemId) { 4842ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MediaItem> mediaItems = videoEditor.getAllMediaItems(); 4843ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItemId == null) { 4844ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItems.size() > 0) { 4845ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mediaItems.get(0); 4846ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4847ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4848ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int mediaItemCount = mediaItems.size(); 4849ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < mediaItemCount; i++) { 4850ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaItem mi = mediaItems.get(i); 4851ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mi.getId().equals(mediaItemId)) { 4852ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (i < mediaItemCount - 1) { 4853ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mediaItems.get(i + 1); 4854ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4855ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 4856ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4857ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4858ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4859ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4860ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4861ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return null; 4862ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4863ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4864ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4865ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Export the movie to the Gallery 4866ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4867ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param filename The filename 4868ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The video MediaStore URI 4869ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4870ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private Uri exportToGallery(String filename) { 4871ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Save the name and description of a video in a ContentValues map. 4872ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final ContentValues values = new ContentValues(2); 4873ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4"); 4874ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi values.put(MediaStore.Video.Media.DATA, filename); 4875ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add a new record (identified by uri) 4876ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Uri uri = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, 4877ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi values); 4878ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); 4879ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return uri; 4880ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4881ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4882ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4883ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Apply a theme to the entire movie. This method shall be used when the 4884ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * theme is changing. 4885ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4886ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param videoEditor The video editor 4887ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param themeId The theme id 4888ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 4889ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void applyThemeToMovie(VideoEditor videoEditor, String themeId) throws IOException { 4890ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Context context = getApplicationContext(); 4891ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTheme theme = MovieTheme.getTheme(context, themeId); 4892ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MediaItem> mediaItems = videoEditor.getAllMediaItems(); 4893ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4894ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the transitions 4895ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int mediaItemsCount = mediaItems.size(); 4896ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItemsCount > 0) { 4897ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Remove all the transitions 4898ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < mediaItemsCount; i++) { 4899ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mi = mediaItems.get(i); 4900ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (i == 0) { 4901ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition beginTransition = mi.getBeginTransition(); 4902ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (beginTransition != null) { 4903ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.removeTransition(beginTransition.getId()); 4904ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4905ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4906ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4907ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition endTransition = mi.getEndTransition(); 4908ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (endTransition != null) { 4909ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.removeTransition(endTransition.getId()); 4910ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4911ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4912ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4913ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the begin transition to the first media item 4914ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTransition beginMovieTransition = theme.getBeginTransition(); 4915ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (beginMovieTransition != null) { 4916ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem firstMediaItem = mediaItems.get(0); 4917ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition( 4918ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi beginMovieTransition.buildTransition(context, null, firstMediaItem)); 4919ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4920ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4921ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the mid transitions 4922ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTransition midMovieTransition = theme.getMidTransition(); 4923ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (midMovieTransition != null) { 4924ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < mediaItemsCount - 1; i++) { 4925ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition( 4926ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi midMovieTransition.buildTransition(context, 4927ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItems.get(i), mediaItems.get(i + 1))); 4928ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4929ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4930ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4931ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the end transition to the last media item 4932ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTransition endMovieTransition = theme.getEndTransition(); 4933ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (endMovieTransition != null) { 4934ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem lastMediaItem = mediaItems.get(mediaItemsCount - 1); 4935ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition( 4936ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi endMovieTransition.buildTransition(context, lastMediaItem, null)); 4937ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4938ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4939ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4940ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the overlay 4941ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieOverlay movieOverlay = theme.getOverlay(); 4942ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (movieOverlay != null && mediaItemsCount > 0) { 4943ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Remove all the overlay for the first media item 4944ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mediaItem = mediaItems.get(0); 4945ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<Overlay> overlays = mediaItem.getAllOverlays(); 4946ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (overlays.size() > 0) { 4947ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.removeOverlay(overlays.get(0).getId()); 4948ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4949ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4950ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the new overlay 4951ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int scaledWidth, scaledHeight; 4952ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem instanceof MediaVideoItem) { 4953ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledWidth = ((MediaVideoItem)mediaItem).getWidth(); 4954ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledHeight = ((MediaVideoItem)mediaItem).getHeight(); 4955ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 4956ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledWidth = ((MediaImageItem)mediaItem).getScaledWidth(); 4957ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledHeight = ((MediaImageItem)mediaItem).getScaledHeight(); 4958ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4959ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4960ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Overlay overlay = new OverlayFrame(mediaItem, generateId(), 4961ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ImageUtils.buildOverlayBitmap(null, movieOverlay.getType(), 4962ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieOverlay.getTitle(), 4963ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieOverlay.getSubtitle(), scaledWidth, scaledHeight), 4964ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieOverlay.getStartTime(), movieOverlay.getDuration()); 4965ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4966ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Set the user attributes 4967ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bundle userAttributes = movieOverlay.buildUserAttributes(); 4968ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (String name : userAttributes.keySet()) { 4969ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (MovieOverlay.getAttributeType(name).equals(Integer.class)) { 4970ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setUserAttribute(name, 4971ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Integer.toString(userAttributes.getInt(name))); 4972ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // Strings 4973ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setUserAttribute(name, userAttributes.getString(name)); 4974ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4975ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4976ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.addOverlay(overlay); 4977ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4978ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4979ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieAudioTrack at = theme.getAudioTrack(); 4980ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (at != null) { 4981ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Remove all audio tracks 4982ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<AudioTrack> audioTracks = videoEditor.getAllAudioTracks(); 4983ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi while (audioTracks.size() > 0) { 4984ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.removeAudioTrack(audioTracks.get(0).getId()); 4985ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4986ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4987ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the new audio track 4988ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final AudioTrack audioTrack = new AudioTrack(videoEditor, generateId(), 4989ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi FileUtils.getAudioTrackFilename(context, at.getRawResourceId())); 4990ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4991ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Enable looping if necessary 4992ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (at.isLooping()) { 4993ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi audioTrack.enableLoop(); 4994ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 4995ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 4996ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Enable ducking 4997516fd1bedc49dc893d4bfbb0281aabd121e1f4f4Gil Dobjanschi audioTrack.enableDucking(DUCK_THRESHOLD, DUCK_TRACK_VOLUME); 4998516fd1bedc49dc893d4bfbb0281aabd121e1f4f4Gil Dobjanschi audioTrack.setVolume(DEFAULT_AUDIO_TRACK_VOLUME); 4999ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addAudioTrack(audioTrack); 5000ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5001ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5002ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5003ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 5004ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Apply a theme 5005ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5006ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param videoEditor The video editor 5007ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param themeId The theme id 5008ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItem The mediaItem 5009ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5010ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void applyThemeToMediaItem(VideoEditor videoEditor, String themeId, 5011ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaItem mediaItem) throws IOException { 5012ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MediaItem> mediaItems = videoEditor.getAllMediaItems(); 5013ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int mediaItemsCount = mediaItems.size(); 5014ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItemsCount == 0) { 5015ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return; 5016ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5017ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5018ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // We would only add transitions if the transitions don't exist 5019ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition beginTransition = mediaItem.getBeginTransition(); 5020ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition endTransition = mediaItem.getEndTransition(); 5021ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5022ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Context context = getApplicationContext(); 5023ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTheme theme = MovieTheme.getTheme(context, themeId); 5024ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5025ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem firstMediaItem = mediaItems.get(0); 5026ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (beginTransition == null) { 5027ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the begin transition 5028ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTransition beginMovieTransition = theme.getBeginTransition(); 5029ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (beginMovieTransition != null) { 5030ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (firstMediaItem == mediaItem) { 5031ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition( 5032ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi beginMovieTransition.buildTransition(context, null, mediaItem)); 5033ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5034ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5035ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5036ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5037ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the mid transitions 5038ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTransition midMovieTransition = theme.getMidTransition(); 5039ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (midMovieTransition != null) { 5040ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < mediaItemsCount; i++) { 5041ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem mi = mediaItems.get(i); 5042ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mi == mediaItem) { 5043ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (i > 0) { // Not the first one 5044ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (beginTransition == null) { 5045ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add transition before this media item 5046ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(midMovieTransition.buildTransition(context, 5047ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItems.get(i - 1), mi)); 5048ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5049ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5050ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5051ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (i < mediaItemsCount - 1) { // Not the last one 5052ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (endTransition == null) { 5053ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the transition after this media item 5054ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(midMovieTransition.buildTransition(context, 5055ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mi, mediaItems.get(i + 1))); 5056ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5057ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5058ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 5059ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5060ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5061ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5062ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5063ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (endTransition == null) { 5064ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the end transition to the last media item 5065ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTransition endMovieTransition = theme.getEndTransition(); 5066ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MediaItem lastMediaItem = mediaItems.get(mediaItemsCount - 1); 5067ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (endMovieTransition != null && lastMediaItem == mediaItem) { 5068ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition( 5069ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi endMovieTransition.buildTransition(context, lastMediaItem, null)); 5070ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5071ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5072ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5073ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the overlay 5074ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieOverlay movieOverlay = theme.getOverlay(); 5075ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (movieOverlay != null) { 5076ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (firstMediaItem == mediaItem) { 5077ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Remove the overlay 5078ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<Overlay> overlays = mediaItem.getAllOverlays(); 5079ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (overlays.size() > 0) { 5080ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.removeOverlay(overlays.get(0).getId()); 5081ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5082ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5083ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Add the new overlay 5084ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int scaledWidth, scaledHeight; 5085ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItem instanceof MediaVideoItem) { 5086ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledWidth = ((MediaVideoItem)mediaItem).getWidth(); 5087ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledHeight = ((MediaVideoItem)mediaItem).getHeight(); 5088ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 5089ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledWidth = ((MediaImageItem)mediaItem).getScaledWidth(); 5090ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi scaledHeight = ((MediaImageItem)mediaItem).getScaledHeight(); 5091ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5092ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5093ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Overlay overlay = new OverlayFrame(mediaItem, generateId(), 5094ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi ImageUtils.buildOverlayBitmap(null, movieOverlay.getType(), 5095ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieOverlay.getTitle(), 5096ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieOverlay.getSubtitle(), scaledWidth, scaledHeight), 5097ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieOverlay.getStartTime(), 5098ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Math.min(movieOverlay.getDuration(), 5099ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.getDuration() - movieOverlay.getStartTime())); 5100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Set the user attributes 5102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bundle userAttributes = movieOverlay.buildUserAttributes(); 5103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (String name : userAttributes.keySet()) { 5104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (MovieOverlay.getAttributeType(name).equals(Integer.class)) { 5105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setUserAttribute(name, 5106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Integer.toString(userAttributes.getInt(name))); 5107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // Strings 5108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi overlay.setUserAttribute(name, userAttributes.getString(name)); 5109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItem.addOverlay(overlay); 5112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5113ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 5117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Apply theme transitions after an item was removed 5118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param videoEditor The video editor 5120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param themeId The theme id 5121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param removedItemPosition The position of the removed item 5122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param beginTransition The removed item begin transition 5123ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param endTransition The removed item end transition 5124ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5125ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The transition that was added 5126ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5127ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private Transition applyThemeAfterRemove(VideoEditor videoEditor, String themeId, 5128ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int removedItemPosition, Transition beginTransition, 5129ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Transition endTransition) throws IOException { 5130ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MediaItem> mediaItems = videoEditor.getAllMediaItems(); 5131ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int mediaItemCount = mediaItems.size(); 5132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItemCount == 0) { 5133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return null; 5134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Context context = getApplicationContext(); 5137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTheme theme = MovieTheme.getTheme(context, themeId); 5138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Transition transition = null; 5140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (removedItemPosition == 0) { // First item removed 5141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (theme.getBeginTransition() != null && beginTransition != null) { 5142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi transition = 5143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi theme.getBeginTransition().buildTransition(context, null, mediaItems.get(0)); 5144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 5145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else if (removedItemPosition == mediaItemCount) { // Last item removed 5147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (theme.getEndTransition() != null && endTransition != null) { 5148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi transition = theme.getEndTransition().buildTransition(context, 5149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItems.get(mediaItemCount - 1), null); 5150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 5151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // Mid item removed 5153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (theme.getMidTransition() != null && beginTransition != null) { 5154ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi transition = 5155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi theme.getMidTransition().buildTransition(context, 5156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItems.get(removedItemPosition - 1), 5157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItems.get(removedItemPosition)); 5158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 5159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5161ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5162ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return transition; 5163ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5164ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5165ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 5166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Apply theme transitions after an item was moved 5167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param videoEditor The video editor 5169ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param themeId The theme id 5170ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param movedMediaItem The moved media item 5171ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param originalItemPosition The original media item position 5172ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param beginTransition The moved item begin transition 5173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param endTransition The moved item end transition 5174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void applyThemeAfterMove(VideoEditor videoEditor, String themeId, 5176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MediaItem movedMediaItem, int originalItemPosition, Transition beginTransition, 5177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Transition endTransition) throws IOException { 5178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MediaItem> mediaItems = videoEditor.getAllMediaItems(); 5179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int mediaItemCount = mediaItems.size(); 5180ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mediaItemCount == 0) { 5181ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return; 5182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Context context = getApplicationContext(); 5185ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTheme theme = MovieTheme.getTheme(context, themeId); 5186ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5187ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (originalItemPosition == 0) { // First item moved 5188ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (theme.getBeginTransition() != null && beginTransition != null) { 5189ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = 5190ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi theme.getBeginTransition().buildTransition(context, null, mediaItems.get(0)); 5191ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 5192ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5193ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else if (originalItemPosition == mediaItemCount - 1) { // Last item moved 5194ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (theme.getEndTransition() != null && endTransition != null) { 5195ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = theme.getEndTransition().buildTransition(context, 5196ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItems.get(mediaItemCount - 1), null); 5197ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 5198ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5199ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // Mid item moved 5200ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int newPosition = mediaItems.indexOf(movedMediaItem); 5201ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (newPosition > originalItemPosition) { // Moved forward 5202ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (endTransition != null && theme.getMidTransition() != null) { 5203ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = theme.getMidTransition().buildTransition( 5204ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi context, mediaItems.get(originalItemPosition - 1), 5205ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItems.get(originalItemPosition)); 5206ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 5207ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5208ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { // Moved backward 5209ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (beginTransition != null && theme.getMidTransition() != null) { 5210ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Transition transition = theme.getMidTransition().buildTransition( 5211ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi context, mediaItems.get(originalItemPosition), 5212ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mediaItems.get(originalItemPosition + 1)); 5213ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi videoEditor.addTransition(transition); 5214ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5215ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5216ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5217ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5218ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Apply the theme at the new position 5219ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi applyThemeToMediaItem(videoEditor, themeId, movedMediaItem); 5220ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5221ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5222ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 5223ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Copy the media items 5224ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5225ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param mediaItems The media items 5226ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5227ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The list of media items 5228ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5229ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private List<MovieMediaItem> copyMediaItems(List<MediaItem> mediaItems) { 5230ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MovieMediaItem> movieMediaItems 5231ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi = new ArrayList<MovieMediaItem>(mediaItems.size()); 5232ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi MovieMediaItem prevMediaItem = null; 5233ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (MediaItem mediaItem : mediaItems) { 5234ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieTransition prevTransition; 5235ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (prevMediaItem != null) { 5236ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi prevTransition = prevMediaItem.getEndTransition(); 5237ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else if (mediaItem.getBeginTransition() != null) { 5238ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi prevTransition = new MovieTransition(mediaItem.getBeginTransition()); 5239ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 5240ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi prevTransition = null; 5241ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5242ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5243ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final MovieMediaItem movieMediaItem = new MovieMediaItem(mediaItem, prevTransition); 5244ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieMediaItems.add(movieMediaItem); 5245ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi prevMediaItem = movieMediaItem; 5246ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5247ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5248ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return movieMediaItems; 5249ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5250ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5251ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 5252ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Copy the audio tracks 5253ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5254ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param audioTracks The audio tracks 5255ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5256ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The list of audio tracks 5257ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5258ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private List<MovieAudioTrack> copyAudioTracks(List<AudioTrack> audioTracks) { 5259ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final List<MovieAudioTrack> movieAudioTracks 5260ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi = new ArrayList<MovieAudioTrack>(audioTracks.size()); 5261ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (AudioTrack audioTrack : audioTracks) { 5262ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi movieAudioTracks.add(new MovieAudioTrack(audioTrack)); 5263ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5264ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return movieAudioTracks; 5265ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5266ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5267ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 5268ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * The service worker thread 5269ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5270ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private class ServiceThread extends Thread { 5271ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private final Handler mHandler; 5272ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private final Queue<Intent> mQueue; 5273ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private Handler mThreadHandler; 5274ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private final Runnable mProcessQueueRunnable = new Runnable() { 5275ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 5276ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 5277ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5278ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void run() { 5279ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Process whatever accumulated in the queue 5280ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Intent intent; 5281ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi while ((intent = mQueue.poll()) != null) { 5282ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Process the Intent 5283ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi processIntent(intent); 5284ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5285ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5286ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }; 5287ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5288ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 5289ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Constructor 5290ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5291ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param handler The handler 5292ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param threadName The thread name 5293ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5294ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public ServiceThread(Handler handler, String threadName) { 5295ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mHandler = handler; 5296ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi setName(threadName + this); 5297ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mQueue = new LinkedBlockingQueue<Intent>(); 5298ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5299ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5300ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 5301ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Add a new message to the thread queue 5302ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5303ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The request intent 5304ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5305ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private void put(Intent intent) { 5306ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mQueue.add(intent); 5307ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5308ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mThreadHandler != null) { 5309ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mThreadHandler.post(mProcessQueueRunnable); 5310ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5311ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5312ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5313ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 5314ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Remove an intent from the queue 5315ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5316ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent The intent 5317ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5318ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return true if the request was canceled 5319ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5320ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private boolean cancel(Intent intent) { 5321ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mQueue.remove(intent); 5322ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5323ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5324ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 5325ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 5326ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5327ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi @Override 5328ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void run() { 5329ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Looper.prepare(); 5330ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5331ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mThreadHandler = new Handler(); 5332ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5333ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Ensure that the queued items are processed 5334ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mHandler.post(new Runnable() { 5335ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /* 5336ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * {@inheritDoc} 5337ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5338ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void run() { 5339ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mThreadHandler.post(mProcessQueueRunnable); 5340ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5341ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi }); 5342ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5343ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Run the loop 5344ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Looper.loop(); 5345ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5346ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5347ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 5348ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Quit the thread 5349ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5350ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public void quit() { 5351ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mThreadHandler != null) { 5352ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mThreadHandler.getLooper().quit(); 5353ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5354ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 5355ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Display an error if the queue is not empty 5356ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int queueSize = mQueue.size(); 5357ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (queueSize > 0) { 5358ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.e(TAG, "Thread queue is not empty. Size: " + queueSize); 5359ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mQueue.clear(); 5360ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5361ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5362ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 5363ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi} 5364