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