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