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