1fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi/* 2fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * Copyright (C) 2010 The Android Open Source Project 3fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * 4fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * Licensed under the Apache License, Version 2.0 (the "License"); 5fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * you may not use this file except in compliance with the License. 6fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * You may obtain a copy of the License at 7fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * 8fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * http://www.apache.org/licenses/LICENSE-2.0 9fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * 10fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * Unless required by applicable law or agreed to in writing, software 11fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * distributed under the License is distributed on an "AS IS" BASIS, 12fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * See the License for the specific language governing permissions and 14fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * limitations under the License. 15fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi */ 16fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi 179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava 18fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschipackage android.media.videoeditor; 19fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi 20fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschiimport java.io.File; 21fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschiimport java.io.FileNotFoundException; 22fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschiimport java.io.IOException; 23731e46575aeffa26b41d7590a0a4de637d792258Gil Dobjanschi 24731e46575aeffa26b41d7590a0a4de637d792258Gil Dobjanschiimport android.media.videoeditor.VideoEditor.MediaProcessingProgressListener; 25fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi 26fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi/** 27fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * The VideoEditorFactory class must be used to instantiate VideoEditor objects 28fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * by creating a new project {@link #create(String)} or by loading an 29fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * existing project {@link #load(String)}. 30fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * {@hide} 31fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi */ 32fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschipublic class VideoEditorFactory { 33fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi /** 34fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * This is the factory method for creating a new VideoEditor instance. 35fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * 36fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * @param projectPath The path where all VideoEditor internal 37fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * files are stored. When a project is deleted the application is 38fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * responsible for deleting the path and its contents. 39fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * 40fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * @return The VideoEditor instance 41fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * 42fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * @throws IOException if path does not exist or if the path can 43fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * not be accessed in read/write mode 44fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi */ 45731e46575aeffa26b41d7590a0a4de637d792258Gil Dobjanschi public static VideoEditor create(String projectPath) throws IOException { 469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /* 479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * If the project path does not exist create it 489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 49fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi final File dir = new File(projectPath); 50fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi if (!dir.exists()) { 51fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi if (!dir.mkdirs()) { 529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava throw new FileNotFoundException("Cannot create project path: " 539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava + projectPath); 54ce52d1ff76015413787371378a2f64ee716154a3Gil Dobjanschi } else { 559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava /* 569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Create the file which hides the media files 579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * from the media scanner 589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */ 59ce52d1ff76015413787371378a2f64ee716154a3Gil Dobjanschi if (!new File(dir, ".nomedia").createNewFile()) { 60ce52d1ff76015413787371378a2f64ee716154a3Gil Dobjanschi throw new FileNotFoundException("Cannot create file .nomedia"); 61ce52d1ff76015413787371378a2f64ee716154a3Gil Dobjanschi } 62fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi } 63fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi } 64048449ebfa3f42e1431338785f225d25125f294eGil Dobjanschi 65731e46575aeffa26b41d7590a0a4de637d792258Gil Dobjanschi return new VideoEditorImpl(projectPath); 66fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi } 67fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi 68fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi /** 69fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * This is the factory method for instantiating a VideoEditor from the 70fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * internal state previously saved with the 71fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * {@link VideoEditor#save(String)} method. 72fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * 73fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * @param projectPath The path where all VideoEditor internal files 74fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * are stored. When a project is deleted the application is 75fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * responsible for deleting the path and its contents. 76fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * @param generatePreview if set to true the 779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * {@link MediaEditor#generatePreview(MediaProcessingProgressListener 789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * listener)} 79731e46575aeffa26b41d7590a0a4de637d792258Gil Dobjanschi * will be called internally to generate any needed transitions. 80fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * 81fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * @return The VideoEditor instance 82fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * 83fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * @throws IOException if path does not exist or if the path can 84fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * not be accessed in read/write mode or if one of the resource 85fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi * media files cannot be retrieved 86fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi */ 87731e46575aeffa26b41d7590a0a4de637d792258Gil Dobjanschi public static VideoEditor load(String projectPath, boolean generatePreview) 889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava throws IOException { 89731e46575aeffa26b41d7590a0a4de637d792258Gil Dobjanschi final VideoEditor videoEditor = new VideoEditorImpl(projectPath); 90fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi if (generatePreview) { 91786ecf849c57de5400a0d594d3b133758a17a1a0Gil Dobjanschi videoEditor.generatePreview(null); 92fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi } 93fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi return videoEditor; 94fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi } 95fdacc8be92cd36f712cfdb0fcf9b0e847f8eeb58Gil Dobjanschi} 96