19bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava/*
29bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Copyright (C) 2010 The Android Open Source Project
39bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava *
49bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Licensed under the Apache License, Version 2.0 (the "License");
59bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * you may not use this file except in compliance with the License.
69bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * You may obtain a copy of the License at
79bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava *
89bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava *      http://www.apache.org/licenses/LICENSE-2.0
99bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava *
109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Unless required by applicable law or agreed to in writing, software
119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * distributed under the License is distributed on an "AS IS" BASIS,
129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * See the License for the specific language governing permissions and
149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * limitations under the License.
159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */
169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavapackage android.media.videoeditor;
189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.io.File;
209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.io.IOException;
219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.math.BigDecimal;
229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.nio.IntBuffer;
239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.util.Iterator;
249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.util.List;
252bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschiimport java.util.concurrent.Semaphore;
262bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.graphics.Bitmap;
289c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargiimport android.graphics.BitmapFactory;
299c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargiimport android.graphics.Canvas;
309c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargiimport android.graphics.Paint;
319c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargiimport android.graphics.Rect;
32c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowduryimport android.graphics.Matrix;
339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.VideoEditor.ExportProgressListener;
349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.VideoEditor.PreviewProgressListener;
359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.media.videoeditor.VideoEditor.MediaProcessingProgressListener;
369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.util.Log;
379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.util.Pair;
389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.view.Surface;
399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava/**
419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava *This class provide Native methods to be used by MediaArtist {@hide}
429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */
439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaclass MediaArtistNativeHelper {
442bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private static final String TAG = "MediaArtistNativeHelper";
459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    static {
479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        System.loadLibrary("videoeditor_jni");
489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
502bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private static final int MAX_THUMBNAIL_PERMITTED = 8;
512bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
522bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    public static final int TASK_LOADING_SETTINGS = 1;
532bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    public static final int TASK_ENCODING = 2;
542bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
552bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    /**
562bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     *  The resize paint
572bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     */
582bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private static final Paint sResizePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private final VideoEditor mVideoEditor;
613f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi    /*
623f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi     *  Semaphore to control preview calls
633f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi     */
643f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi    private final Semaphore mLock;
659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
662bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private EditSettings mStoryBoardSettings;
679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private String mOutputFilename;
699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
702bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private PreviewClipProperties mClipProperties = null;
719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private EditSettings mPreviewEditSettings;
739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private AudioSettings mAudioSettings = null;
759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private AudioTrack mAudioTrack = null;
779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
782bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private boolean mInvalidatePreviewArray = true;
799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private boolean mRegenerateAudio = true;
819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private String mExportFilename = null;
833ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury    private int mExportVideoCodec = 0;
843ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury    private int mExportAudioCodec = 0;
859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private int mProgressToApp;
869c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
879c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi    private String mRenderPreviewOverlayFile;
882bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private int mRenderPreviewRenderingMode;
899c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
909c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi    private boolean mIsFirstProgress;
919c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private static final String AUDIO_TRACK_PCM_FILE = "AudioPcm.pcm";
939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    // Processing indication
959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final int PROCESSING_NONE          = 0;
969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final int PROCESSING_AUDIO_PCM     = 1;
979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final int PROCESSING_TRANSITION    = 2;
989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final int PROCESSING_KENBURNS      = 3;
999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final int PROCESSING_INTERMEDIATE1 = 11;
1009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final int PROCESSING_INTERMEDIATE2 = 12;
1019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final int PROCESSING_INTERMEDIATE3 = 13;
1029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final int PROCESSING_EXPORT        = 20;
1039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1042bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private int mProcessingState;
1059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private Object mProcessingObject;
1069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private PreviewProgressListener mPreviewProgressListener;
1079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private ExportProgressListener mExportProgressListener;
1089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private ExtractAudioWaveformProgressListener mExtractAudioWaveformProgressListener;
1092bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private MediaProcessingProgressListener mMediaProcessingProgressListener;
1109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private final String mProjectPath;
1119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private long mPreviewProgress;
1139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private String mAudioTrackPCMFilePath;
1159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1162bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private int mTotalClips = 0;
1179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private boolean mErrorFlagSet = false;
1199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    @SuppressWarnings("unused")
1219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private int mManualEditContext;
1229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /* Listeners */
1249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Interface definition for a listener to be invoked when there is an update
1279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * in a running task.
1289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public interface OnProgressUpdateListener {
1309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
1319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Called when there is an update.
1329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *
1339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * @param taskId id of the task reporting an update.
1349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * @param progress progress of the task [0..100].
1359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * @see BasicEdit#TASK_ENCODING
1369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
1379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public void OnProgressUpdate(int taskId, int progress);
1389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Defines the version. */
1419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public final class Version {
1429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Major version number */
1449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int major;
1459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Minor version number */
1479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int minor;
1489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Revision number */
1509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int revision;
1519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** VIDEOEDITOR major version number */
1539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        private static final int VIDEOEDITOR_MAJOR_VERSION = 0;
1549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** VIDEOEDITOR minor version number */
1569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        private static final int VIDEOEDITOR_MINOR_VERSION = 0;
1579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** VIDEOEDITOR revision number */
1599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        private static final int VIDEOEDITOR_REVISION_VERSION = 1;
1609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Method which returns the current VIDEOEDITOR version */
1629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public Version getVersion() {
1639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            Version version = new Version();
1649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            version.major = Version.VIDEOEDITOR_MAJOR_VERSION;
1669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            version.minor = Version.VIDEOEDITOR_MINOR_VERSION;
1679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            version.revision = Version.VIDEOEDITOR_REVISION_VERSION;
1689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return version;
1709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
1719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines output audio formats.
1759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public final class AudioFormat {
1779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No audio present in output clip. Used to generate video only clip */
1789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NO_AUDIO = 0;
1799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** AMR Narrow Band. */
1819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int AMR_NB = 1;
1829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Advanced Audio Coding (AAC). */
1849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int AAC = 2;
1859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Advanced Audio Codec Plus (HE-AAC v1). */
1879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int AAC_PLUS = 3;
1889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Advanced Audio Codec Plus (HE-AAC v2). */
1909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ENHANCED_AAC_PLUS = 4;
1919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** MPEG layer 3 (MP3). */
1939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int MP3 = 5;
1949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Enhanced Variable RateCodec (EVRC). */
1969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int EVRC = 6;
1979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** PCM (PCM). */
1999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int PCM = 7;
2009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No transcoding. Output audio format is same as input audio format */
2029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NULL_AUDIO = 254;
2039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Unsupported audio format. */
2059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int UNSUPPORTED_AUDIO = 255;
2069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
2079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
2099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines audio sampling frequencies.
2109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
2119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public final class AudioSamplingFrequency {
2129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
2139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Default sampling frequency. Uses the default frequency for a specific
2149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * audio format. For AAC the only supported (and thus default) sampling
2159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * frequency is 16 kHz. For this audio format the sampling frequency in
2169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * the OutputParams.
2179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         **/
2189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FREQ_DEFAULT = 0;
2199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio sampling frequency of 8000 Hz. */
2219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FREQ_8000 = 8000;
2229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio sampling frequency of 11025 Hz. */
2249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FREQ_11025 = 11025;
2259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio sampling frequency of 12000 Hz. */
2279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FREQ_12000 = 12000;
2289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio sampling frequency of 16000 Hz. */
2309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FREQ_16000 = 16000;
2319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio sampling frequency of 22050 Hz. */
2339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FREQ_22050 = 22050;
2349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio sampling frequency of 24000 Hz. */
2369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FREQ_24000 = 24000;
2379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio sampling frequency of 32000 Hz. */
2399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FREQ_32000 = 32000;
2409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio sampling frequency of 44100 Hz. */
2429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FREQ_44100 = 44100;
2439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio sampling frequency of 48000 Hz. Not available for output file. */
2459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FREQ_48000 = 48000;
2469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
2479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
2499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines the supported fixed audio and video bitrates. These values are
2509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * for output audio video only.
2519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
2529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public final class Bitrate {
2539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Variable bitrate. Means no bitrate regulation */
2549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int VARIABLE = -1;
2559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** An undefined bitrate. */
2579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int UNDEFINED = 0;
2589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 9.2 kbits/s. */
2609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_9_2_KBPS = 9200;
2619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 12.2 kbits/s. */
2639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_12_2_KBPS = 12200;
2649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 16 kbits/s. */
2669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_16_KBPS = 16000;
2679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 24 kbits/s. */
2699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_24_KBPS = 24000;
2709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 32 kbits/s. */
2729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_32_KBPS = 32000;
2739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 48 kbits/s. */
2759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_48_KBPS = 48000;
2769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 64 kbits/s. */
2789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_64_KBPS = 64000;
2799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 96 kbits/s. */
2819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_96_KBPS = 96000;
2829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 128 kbits/s. */
2849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_128_KBPS = 128000;
2859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 192 kbits/s. */
2879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_192_KBPS = 192000;
2889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 256 kbits/s. */
2909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_256_KBPS = 256000;
2919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 288 kbits/s. */
2939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_288_KBPS = 288000;
2949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 384 kbits/s. */
2969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_384_KBPS = 384000;
2979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 512 kbits/s. */
2999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_512_KBPS = 512000;
3009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 800 kbits/s. */
3029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_800_KBPS = 800000;
3039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 2 Mbits/s. */
3059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_2_MBPS = 2000000;
3069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 5 Mbits/s. */
3089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_5_MBPS = 5000000;
3099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A bitrate of 8 Mbits/s. */
3119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BR_8_MBPS = 8000000;
3129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
3139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
3159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines all supported file types.
3169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
3179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public final class FileType {
3189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** 3GPP file type. */
3199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int THREE_GPP = 0;
3209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** MP4 file type. */
3229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int MP4 = 1;
3239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** AMR file type. */
3259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int AMR = 2;
3269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** MP3 audio file type. */
3289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int MP3 = 3;
3299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** PCM audio file type. */
3319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int PCM = 4;
3329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** JPEG image file type. */
3349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int JPG = 5;
3359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** GIF image file type. */
3374e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi        public static final int GIF = 7;
3389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** PNG image file type. */
3404e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi        public static final int PNG = 8;
3414e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi
3424e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi        /** M4V file type. */
3434e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi        public static final int M4V = 10;
3449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Unsupported file type. */
3469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int UNSUPPORTED = 255;
3479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
3489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
3509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines rendering types. Rendering can only be applied to files
3519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * containing video streams.
3529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     **/
3539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public final class MediaRendering {
3549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
3559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Resize to fit the output video with changing the aspect ratio if
3569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * needed.
3579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
3589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int RESIZING = 0;
3599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
3619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Crop the input video to fit it with the output video resolution.
3629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         **/
3639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int CROPPING = 1;
3649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
3669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Resize to fit the output video resolution but maintain the aspect
3679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * ratio. This framing type adds black borders if needed.
3689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
3699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BLACK_BORDERS = 2;
3709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
3719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
3739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines the results.
3749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
3759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public final class Result {
3769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No error. result OK */
3779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NO_ERROR = 0;
3789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** File not found */
3809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_FILE_NOT_FOUND = 1;
3819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
3839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * In case of UTF8 conversion, the size of the converted path will be
3849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * more than the corresponding allocated buffer.
3859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
3869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_BUFFER_OUT_TOO_SMALL = 2;
3879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid file type. */
3899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_FILE_TYPE = 3;
3909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid effect kind. */
3929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_EFFECT_KIND = 4;
3939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid video effect. */
3959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_VIDEO_EFFECT_TYPE = 5;
3969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid audio effect. */
3989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_AUDIO_EFFECT_TYPE = 6;
3999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid video transition. */
4019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_VIDEO_TRANSITION_TYPE = 7;
4029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid audio transition. */
4049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_AUDIO_TRANSITION_TYPE = 8;
4059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid encoding frame rate. */
4079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_VIDEO_ENCODING_FRAME_RATE = 9;
4089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** External effect is called but this function is not set. */
4109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_EXTERNAL_EFFECT_NULL = 10;
4119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** External transition is called but this function is not set. */
4139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_EXTERNAL_TRANSITION_NULL = 11;
4149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Begin time cut is larger than the video clip duration. */
4169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_BEGIN_CUT_LARGER_THAN_DURATION = 12;
4179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Begin cut time is larger or equal than end cut. */
4199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_BEGIN_CUT_LARGER_THAN_END_CUT = 13;
4209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Two consecutive transitions are overlapping on one clip. */
4229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_OVERLAPPING_TRANSITIONS = 14;
4239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Internal error, type size mismatch. */
4259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_ANALYSIS_DATA_SIZE_TOO_SMALL = 15;
4269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** An input 3GPP file is invalid/corrupted. */
4289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_3GPP_FILE = 16;
4299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A file contains an unsupported video format. */
4319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT = 17;
4329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A file contains an unsupported audio format. */
4349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT = 18;
4359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** A file format is not supported. */
4379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_AMR_EDITING_UNSUPPORTED = 19;
4389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** An input clip has an unexpectedly large Video AU. */
4409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INPUT_VIDEO_AU_TOO_LARGE = 20;
4419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** An input clip has an unexpectedly large Audio AU. */
4439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INPUT_AUDIO_AU_TOO_LARGE = 21;
4449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** An input clip has a corrupted Audio AU. */
4469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INPUT_AUDIO_CORRUPTED_AU = 22;
4479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The video encoder encountered an Access Unit error. */
4499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_ENCODER_ACCES_UNIT_ERROR = 23;
4509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Unsupported video format for Video Editing. */
4529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT = 24;
4539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Unsupported H263 profile for Video Editing. */
4559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_EDITING_UNSUPPORTED_H263_PROFILE = 25;
4569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Unsupported MPEG-4 profile for Video Editing. */
4589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE = 26;
4599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Unsupported MPEG-4 RVLC tool for Video Editing. */
4619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_EDITING_UNSUPPORTED_MPEG4_RVLC = 27;
4629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Unsupported audio format for Video Editing. */
4649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT = 28;
4659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** File contains no supported stream. */
4679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE = 29;
4689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** File contains no video stream or an unsupported video stream. */
4709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE = 30;
4719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Internal error, clip analysis version mismatch. */
4739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_CLIP_ANALYSIS_VERSION = 31;
4749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
4769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * At least one of the clip analysis has been generated on another
4779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * platform (WIN32, ARM, etc.).
4789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
4799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_CLIP_ANALYSIS_PLATFORM = 32;
4809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Clips don't have the same video format (H263 or MPEG4). */
4829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INCOMPATIBLE_VIDEO_FORMAT = 33;
4839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Clips don't have the same frame size. */
4859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE = 34;
4869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Clips don't have the same MPEG-4 time scale. */
4889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INCOMPATIBLE_VIDEO_TIME_SCALE = 35;
4899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Clips don't have the same use of MPEG-4 data partitioning. */
4919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING = 36;
4929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** MP3 clips can't be assembled. */
4949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_UNSUPPORTED_MP3_ASSEMBLY = 37;
4959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
4979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * The input 3GPP file does not contain any supported audio or video
4989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * track.
4999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
5009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_NO_SUPPORTED_STREAM_IN_FILE = 38;
5019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
5039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * The Volume of the added audio track (AddVolume) must be strictly
5049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * superior than zero.
5059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
5069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_ADDVOLUME_EQUALS_ZERO = 39;
5079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
5099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * The time at which an audio track is added can't be higher than the
5109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * input video track duration..
5119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
5129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION = 40;
5139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The audio track file format setting is undefined. */
5159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT = 41;
5169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The added audio track stream has an unsupported format. */
5189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_UNSUPPORTED_ADDED_AUDIO_STREAM = 42;
5199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The audio mixing feature doesn't support the audio track type. */
5219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_AUDIO_MIXING_UNSUPPORTED = 43;
5229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The audio mixing feature doesn't support MP3 audio tracks. */
5249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_AUDIO_MIXING_MP3_UNSUPPORTED = 44;
5259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
5279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * An added audio track limits the available features: uiAddCts must be
5289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * 0 and bRemoveOriginal must be true.
5299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
5309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK = 45;
5319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
5339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * An added audio track limits the available features: uiAddCts must be
5349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * 0 and bRemoveOriginal must be true.
5359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
5369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_FEATURE_UNSUPPORTED_WITH_AAC = 46;
5379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Input audio track is not of a type that can be mixed with output. */
5399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_AUDIO_CANNOT_BE_MIXED = 47;
5409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Input audio track is not AMR-NB, so it can't be mixed with output. */
5429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED = 48;
5439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
5459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * An added EVRC audio track limit the available features: uiAddCts must
5469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * be 0 and bRemoveOriginal must be true.
5479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
5489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_FEATURE_UNSUPPORTED_WITH_EVRC = 49;
5499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** H263 profiles other than 0 are not supported. */
5519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_H263_PROFILE_NOT_SUPPORTED = 51;
5529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** File contains no video stream or an unsupported video stream. */
5549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE = 52;
5559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Transcoding of the input file(s) is necessary. */
5579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_TRANSCODING_NECESSARY = 53;
5589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
5609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * The size of the output file will exceed the maximum configured value.
5619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
5629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_MAX_OUTPUT_SIZE_EXCEEDED = 54;
5639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The time scale is too big. */
5659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_TIMESCALE_TOO_BIG = 55;
5669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The year is out of range */
5689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_CLOCK_BAD_REF_YEAR = 56;
5699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The directory could not be opened */
5719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_DIR_OPEN_FAILED = 57;
5729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The directory could not be read */
5749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_DIR_READ_FAILED = 58;
5759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** There are no more entries in the current directory */
5779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_DIR_NO_MORE_ENTRY = 59;
5789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The input parameter/s has error */
5809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_PARAMETER = 60;
5819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** There is a state machine error */
5839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_STATE = 61;
5849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Memory allocation failed */
5869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_ALLOC = 62;
5879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Context is invalid */
5899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_BAD_CONTEXT = 63;
5909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Context creation failed */
5929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_CONTEXT_FAILED = 64;
5939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid stream ID */
5959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_BAD_STREAM_ID = 65;
5969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
5979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid option ID */
5989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_BAD_OPTION_ID = 66;
5999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The option is write only */
6019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_WRITE_ONLY = 67;
6029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The option is read only */
6049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_READ_ONLY = 68;
6059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The feature is not implemented in this version */
6079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_NOT_IMPLEMENTED = 69;
6089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The media type is not supported */
6109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_UNSUPPORTED_MEDIA_TYPE = 70;
6119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No data to be encoded */
6139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_NO_DATA_YET = 71;
6149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No data to be decoded */
6169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_NO_MORE_STREAM = 72;
6179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Time stamp is invalid */
6199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_INVALID_TIME = 73;
6209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No more data to be decoded */
6229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_NO_MORE_AU = 74;
6239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Semaphore timed out */
6259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_TIME_OUT = 75;
6269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Memory buffer is full */
6289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_BUFFER_FULL = 76;
6299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Server has asked for redirection */
6319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_REDIRECT = 77;
6329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Too many streams in input */
6349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_TOO_MUCH_STREAMS = 78;
6359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The file cannot be opened/ written into as it is locked */
6379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_FILE_LOCKED = 79;
6389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The file access mode is invalid */
6409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_FILE_BAD_MODE_ACCESS = 80;
6419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The file pointer points to an invalid location */
6439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_FILE_INVALID_POSITION = 81;
6449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid string */
6469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_STR_BAD_STRING = 94;
6479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The input string cannot be converted */
6499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_STR_CONV_FAILED = 95;
6509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The string size is too large */
6529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_STR_OVERFLOW = 96;
6539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Bad string arguments */
6559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_STR_BAD_ARGS = 97;
6569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The string value is larger than maximum size allowed */
6589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_STR_OVERFLOW = 98;
6599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The string value is not present in this comparison operation */
6619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_STR_NOT_FOUND = 99;
6629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The thread is not started */
6649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_THREAD_NOT_STARTED = 100;
6659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Trancoding done warning */
6679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_TRANSCODING_DONE = 101;
6689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Unsupported mediatype */
6709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_MEDIATYPE_NOT_SUPPORTED = 102;
6719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Input file contains invalid/unsupported streams */
6739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM = 103;
6749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid input file */
6769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_INPUT_FILE = 104;
6779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid output video format */
6799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT = 105;
6809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid output video frame size */
6829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE = 106;
6839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid output video frame rate */
6859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_RATE = 107;
6869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid output audio format */
6889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT = 108;
6899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid video frame size for H.263 */
6919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_VIDEO_FRAME_SIZE_FOR_H263 = 109;
6929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid video frame rate for H.263 */
6949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_VIDEO_FRAME_RATE_FOR_H263 = 110;
6959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** invalid playback duration */
6979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_DURATION_IS_NULL = 111;
6989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
6999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid H.263 profile in file */
7009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_H263_FORBIDDEN_IN_MP4_FILE = 112;
7019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid AAC sampling frequency */
7039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INVALID_AAC_SAMPLING_FREQUENCY = 113;
7049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio conversion failure */
7069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_AUDIO_CONVERSION_FAILED = 114;
7079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid trim start and end times */
7099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_BEGIN_CUT_EQUALS_END_CUT = 115;
7109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** End time smaller than start time for trim */
7129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_END_CUT_SMALLER_THAN_BEGIN_CUT = 116;
7139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Output file size is small */
7159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_MAXFILESIZE_TOO_SMALL = 117;
7169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Output video bitrate is too low */
7189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_VIDEOBITRATE_TOO_LOW = 118;
7199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Output audio bitrate is too low */
7219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_AUDIOBITRATE_TOO_LOW = 119;
7229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Output video bitrate is too high */
7249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_VIDEOBITRATE_TOO_HIGH = 120;
7259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Output audio bitrate is too high */
7279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_AUDIOBITRATE_TOO_HIGH = 121;
7289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Output file size is too small */
7309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_OUTPUT_FILE_SIZE_TOO_SMALL = 122;
7319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Unknown stream type */
7339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_READER_UNKNOWN_STREAM_TYPE = 123;
7349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid metadata in input stream */
7369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_READER_NO_METADATA = 124;
7379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invalid file reader info warning */
7399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_READER_INFORMATION_NOT_PRESENT = 125;
7409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Warning to indicate the the writer is being stopped */
7429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_WRITER_STOP_REQ = 131;
7439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Video decoder failed to provide frame for transcoding */
7459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_VIDEORENDERER_NO_NEW_FRAME = 132;
7469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Video deblocking filter is not implemented */
7489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WAR_DEBLOCKING_FILTER_NOT_IMPLEMENTED = 133;
7499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** H.263 decoder profile not supported */
7519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_DECODER_H263_PROFILE_NOT_SUPPORTED = 134;
7529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The input file contains unsupported H.263 profile */
7549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_DECODER_H263_NOT_BASELINE = 135;
7559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** There is no more space to store the output file */
7579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_NOMORE_SPACE_FOR_FILE = 136;
7589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Internal error. */
7609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ERR_INTERNAL = 255;
7619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
7629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
7649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines output video formats.
7659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
7669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public final class VideoFormat {
7679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No video present in output clip. Used to generate audio only clip */
7689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NO_VIDEO = 0;
7699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7703ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        /** H263 video format. */
7719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int H263 = 1;
7729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** H264 video */
7743ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        public static final int H264 = 2;
7753ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
7763ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        /** MPEG4 video format. */
7773ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        public static final int MPEG4 = 3;
7789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No transcoding. Output video format is same as input video format */
7809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NULL_VIDEO = 254;
7819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Unsupported video format. */
7839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int UNSUPPORTED = 255;
7849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
7859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Defines video frame sizes. */
7879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public final class VideoFrameSize {
7889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int SIZE_UNDEFINED = -1;
7909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** SQCIF 128 x 96 pixels. */
7929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int SQCIF = 0;
7939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** QQVGA 160 x 120 pixels. */
7959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int QQVGA = 1;
7969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
7979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** QCIF 176 x 144 pixels. */
7989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int QCIF = 2;
7999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** QVGA 320 x 240 pixels. */
8019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int QVGA = 3;
8029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** CIF 352 x 288 pixels. */
8049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int CIF = 4;
8059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** VGA 640 x 480 pixels. */
8079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int VGA = 5;
8089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** WVGA 800 X 480 pixels */
8109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WVGA = 6;
8119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** NTSC 720 X 480 pixels */
8139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NTSC = 7;
8149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** 640 x 360 */
8169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int nHD = 8;
8179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** 854 x 480 */
8199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int WVGA16x9 = 9;
8209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** 720p 1280 X 720 */
8229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int V720p = 10;
8239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
824600acf14ff12eaf139f0ac644fb7e17849af65faHong Teng        /** W720p 1080 x 720 */
8259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int W720p = 11;
8269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
827600acf14ff12eaf139f0ac644fb7e17849af65faHong Teng        /** S720p 960 x 720 */
8289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int S720p = 12;
829600acf14ff12eaf139f0ac644fb7e17849af65faHong Teng
830600acf14ff12eaf139f0ac644fb7e17849af65faHong Teng        /** 1080p 1920 x 1080 */
831600acf14ff12eaf139f0ac644fb7e17849af65faHong Teng        public static final int V1080p = 13;
8329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
8339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
8359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines output video frame rates.
8369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
8379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public final class VideoFrameRate {
8389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Frame rate of 5 frames per second. */
8399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FR_5_FPS = 0;
8409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Frame rate of 7.5 frames per second. */
8429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FR_7_5_FPS = 1;
8439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Frame rate of 10 frames per second. */
8459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FR_10_FPS = 2;
8469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Frame rate of 12.5 frames per second. */
8489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FR_12_5_FPS = 3;
8499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Frame rate of 15 frames per second. */
8519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FR_15_FPS = 4;
8529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Frame rate of 20 frames per second. */
8549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FR_20_FPS = 5;
8559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Frame rate of 25 frames per second. */
8579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FR_25_FPS = 6;
8589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Frame rate of 30 frames per second. */
8609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FR_30_FPS = 7;
8619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
8629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
8649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines Video Effect Types.
8659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
8669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class VideoEffect {
8679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NONE = 0;
8699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FADE_FROM_BLACK = 8;
8719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FADE_TO_BLACK = 16;
8739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int EXTERNAL = 256;
8759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BLACK_AND_WHITE = 257;
8779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int PINK = 258;
8799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int GREEN = 259;
8819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int SEPIA = 260;
8839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NEGATIVE = 261;
8859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FRAMING = 262;
8879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int TEXT = 263;
8899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ZOOM_IN = 264;
8919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ZOOM_OUT = 265;
8939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FIFTIES = 266;
8959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int COLORRGB16 = 267;
8979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
8989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int GRADIENT = 268;
8999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
9009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
9029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines the video transitions.
9039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
9049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class VideoTransition {
9059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No transition */
9069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NONE = 0;
9079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Cross fade transition */
9099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int CROSS_FADE = 1;
9109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** External transition. Currently not available. */
9129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int EXTERNAL = 256;
9139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** AlphaMagic transition. */
9159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int ALPHA_MAGIC = 257;
9169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Slide transition. */
9189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int SLIDE_TRANSITION = 258;
9199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Fade to black transition. */
9219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FADE_BLACK = 259;
9229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
9239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
9259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines settings for the AlphaMagic transition
9269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
9279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class AlphaMagicSettings {
9289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Name of the alpha file (JPEG file). */
9299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String file;
9309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Blending percentage [0..100] 0 = no blending. */
9329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int blendingPercent;
9339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Invert the default rotation direction of the AlphaMagic effect. */
9359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public boolean invertRotation;
9369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int rgbWidth;
9389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int rgbHeight;
9399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
9409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Defines the direction of the Slide transition. */
9429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final class SlideDirection {
9439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Right out left in. */
9459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int RIGHT_OUT_LEFT_IN = 0;
9469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Left out right in. */
9489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int LEFT_OUT_RIGTH_IN = 1;
9499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Top out bottom in. */
9519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int TOP_OUT_BOTTOM_IN = 2;
9529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Bottom out top in */
9549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int BOTTOM_OUT_TOP_IN = 3;
9559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
9569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Defines the Slide transition settings. */
9589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class SlideTransitionSettings {
9599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
9609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Direction of the slide transition. See {@link SlideDirection
9619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * SlideDirection} for valid values.
9629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
9639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int direction;
9649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
9659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
9679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines the settings of a single clip.
9689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
9699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class ClipSettings {
9709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
9729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * The path to the clip file.
9739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
9749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * File format of the clip, it can be:
9759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <ul>
9769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <li>3GP file containing MPEG4/H263/H264 video and AAC/AMR audio
9779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <li>JPG file
9789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * </ul>
9799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
9809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String clipPath;
9829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
9849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * The path of the decoded file. This is used only for image files.
9859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
9869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String clipDecodedPath;
9879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
9899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * The path of the Original file. This is used only for image files.
9909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
9919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String clipOriginalPath;
9929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
9949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * File type of the clip. See {@link FileType FileType} for valid
9959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * values.
9969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
9979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int fileType;
9989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
9999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Begin of the cut in the clip in milliseconds. */
10009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int beginCutTime;
10019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
10039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * End of the cut in the clip in milliseconds. Set both
10049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>beginCutTime</code> and <code>endCutTime</code> to
10059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>0</code> to get the full length of the clip without a cut. In
10069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * case of JPG clip, this is the duration of the JPEG file.
10079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
10089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int endCutTime;
10099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
10119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Begin of the cut in the clip in percentage of the file duration.
10129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
10139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int beginCutPercent;
10149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
10169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * End of the cut in the clip in percentage of the file duration. Set
10179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * both <code>beginCutPercent</code> and <code>endCutPercent</code> to
10189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>0</code> to get the full length of the clip without a cut.
10199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
10209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int endCutPercent;
10219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Enable panning and zooming. */
10239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public boolean panZoomEnabled;
10249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Zoom percentage at start of clip. 0 = no zoom, 100 = full zoom */
10269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int panZoomPercentStart;
10279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Top left X coordinate at start of clip. */
10299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int panZoomTopLeftXStart;
10309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Top left Y coordinate at start of clip. */
10329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int panZoomTopLeftYStart;
10339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Zoom percentage at start of clip. 0 = no zoom, 100 = full zoom */
10359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int panZoomPercentEnd;
10369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Top left X coordinate at end of clip. */
10389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int panZoomTopLeftXEnd;
10399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Top left Y coordinate at end of clip. */
10419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int panZoomTopLeftYEnd;
10429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
10449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Set The media rendering. See {@link MediaRendering MediaRendering}
10459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * for valid values.
10469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
10479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int mediaRendering;
10489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
10509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * RGB width and Height
10519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
10529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         public int rgbWidth;
10539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         public int rgbHeight;
1054c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury         /**
1055c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury         * Video rotation degree.
1056c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury         */
1057c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury         public int rotationDegree;
10589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
10599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
10619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines settings for a transition.
10629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
10639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class TransitionSettings {
10649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Duration of the transition in msec. */
10669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int duration;
10679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
10699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Transition type for video. See {@link VideoTransition
10709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * VideoTransition} for valid values.
10719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
10729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int videoTransitionType;
10739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
10759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Transition type for audio. See {@link AudioTransition
10769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * AudioTransition} for valid values.
10779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
10789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioTransitionType;
10799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
10819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Transition behaviour. See {@link TransitionBehaviour
10829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * TransitionBehaviour} for valid values.
10839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
10849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int transitionBehaviour;
10859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
10879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Settings for AlphaMagic transition. Only needs to be set if
10889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>videoTransitionType</code> is set to
10899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>VideoTransition.ALPHA_MAGIC</code>. See
10909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link AlphaMagicSettings AlphaMagicSettings}.
10919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
10929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public AlphaMagicSettings alphaSettings;
10939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
10949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
10959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Settings for the Slide transition. See
10969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link SlideTransitionSettings SlideTransitionSettings}.
10979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
10989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public SlideTransitionSettings slideSettings;
10999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
11009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final class AudioTransition {
11029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No audio transition. */
11039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NONE = 0;
11049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Cross-fade audio transition. */
11069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int CROSS_FADE = 1;
11079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
11089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
11102bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * Defines transition behaviors.
11112bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     */
11129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static final class TransitionBehaviour {
11139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The transition uses an increasing speed. */
11159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int SPEED_UP = 0;
11169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The transition uses a linear (constant) speed. */
11189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int LINEAR = 1;
11199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The transition uses a decreasing speed. */
11219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int SPEED_DOWN = 2;
11229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
11249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * The transition uses a constant speed, but slows down in the middle
11259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * section.
11269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
11279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int SLOW_MIDDLE = 3;
11289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
11309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * The transition uses a constant speed, but increases speed in the
11319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * middle section.
11329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
11339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FAST_MIDDLE = 4;
11349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
11359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11362bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    /**
11372bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * Defines settings for the background music.
11382bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     */
11399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class BackgroundMusicSettings {
11409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Background music file. */
11429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String file;
11439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** File type. See {@link FileType FileType} for valid values. */
11459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int fileType;
11469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
11489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Insertion time in milliseconds, in the output video where the
11499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * background music must be inserted.
11509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
11519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public long insertionTime;
11529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
11549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Volume, as a percentage of the background music track, to use. If
11559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * this field is set to 100, the background music will replace the audio
11569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * from the video input file(s).
11579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
11589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int volumePercent;
11599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
11619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Start time in milliseconds in the background muisc file from where
11629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * the background music should loop. Set both <code>beginLoop</code> and
11639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>endLoop</code> to <code>0</code> to disable looping.
11649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
11659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public long beginLoop;
11669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
11689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * End time in milliseconds in the background music file to where the
11699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * background music should loop. Set both <code>beginLoop</code> and
11709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>endLoop</code> to <code>0</code> to disable looping.
11719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
11729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public long endLoop;
11739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public boolean enableDucking;
11759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int duckingThreshold;
11779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int lowVolume;
11799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public boolean isLooping;
11819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
11829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Defines settings for an effect. */
11849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class AudioEffect {
11859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** No audio effect. */
11869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int NONE = 0;
11879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Fade-in effect. */
11899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FADE_IN = 8;
11909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Fade-out effect. */
11929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public static final int FADE_OUT = 16;
11939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
11949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Defines the effect settings. */
11969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class EffectSettings {
11979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
11989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Start time of the effect in milliseconds. */
11999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int startTime;
12009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Duration of the effect in milliseconds. */
12029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int duration;
12039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Video effect type. See {@link VideoEffect VideoEffect} for valid
12069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * values.
12079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
12089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int videoEffectType;
12099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Audio effect type. See {@link AudioEffect AudioEffect} for valid
12129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * values.
12139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
12149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioEffectType;
12159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Start time of the effect in percents of the duration of the clip. A
12189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * value of 0 percent means start time is from the beginning of the
12199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * clip.
12209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
12219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int startPercent;
12229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Duration of the effect in percents of the duration of the clip.
12259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
12269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int durationPercent;
12279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Framing file.
12309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
12319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
12329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise
12339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * this field is ignored.
12349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
12359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String framingFile;
12369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Framing buffer.
12399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
12409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
12419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise
12429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * this field is ignored.
12439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
12449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int[] framingBuffer;
12459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Bitmap type Can be from RGB_565 (4), ARGB_4444 (5), ARGB_8888 (6);
12489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         **/
12499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int bitmapType;
12519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int width;
12539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int height;
12559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Top left x coordinate. This coordinate is used to set the x
12589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * coordinate of the picture in the framing file when the framing file
12599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is selected. The x coordinate is also used to set the location of the
12609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * text in the text effect.
12619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
12629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
12639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#FRAMING VideoEffect.FRAMING} or
12649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link VideoEffect#TEXT VideoEffect.TEXT}. Otherwise this field is
12659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * ignored.
12669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
12679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int topLeftX;
12689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Top left y coordinate. This coordinate is used to set the y
12719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * coordinate of the picture in the framing file when the framing file
12729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is selected. The y coordinate is also used to set the location of the
12739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * text in the text effect.
12749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
12759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
12769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#FRAMING VideoEffect.FRAMING} or
12779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link VideoEffect#TEXT VideoEffect.TEXT}. Otherwise this field is
12789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * ignored.
12799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
12809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int topLeftY;
12819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Should the frame be resized or not. If this field is set to
12849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <link>true</code> then the frame size is matched with the output
12859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * video size.
12869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
12879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
12889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise
12899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * this field is ignored.
12909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
12919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public boolean framingResize;
12929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
12939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Size to which the framing buffer needs to be resized to
12959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This is valid only if framingResize is true
12969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
12979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int framingScaledSize;
12989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
12999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Text to insert in the video.
13009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
13019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
13029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT}. Otherwise this
13039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * field is ignored.
13049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
13059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String text;
13069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
13089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Text attributes for the text to insert in the video.
13099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
13109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
13119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT}. Otherwise this
13129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * field is ignored. For more details about this field see the
13139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * integration guide.
13149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
13159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String textRenderingData;
13169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Width of the text buffer in pixels. */
13189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int textBufferWidth;
13199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Height of the text buffer in pixels. */
13219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int textBufferHeight;
13229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
13249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Processing rate for the fifties effect. A high value (e.g. 30)
13259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * results in high effect strength.
13269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
13279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
13289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#FIFTIES VideoEffect.FIFTIES}. Otherwise
13299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * this field is ignored.
13309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
13319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int fiftiesFrameRate;
13329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
13349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * RGB 16 color of the RGB16 and gradient color effect.
13359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
13369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
13379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#COLORRGB16 VideoEffect.COLORRGB16} or
13389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link VideoEffect#GRADIENT VideoEffect.GRADIENT}. Otherwise this
13399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * field is ignored.
13409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
13419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int rgb16InputColor;
13429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
13449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Start alpha blending percentage.
13459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
13469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
13479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT} or
13489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise this field
13499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is ignored.
13509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
13519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int alphaBlendingStartPercent;
13529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
13549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Middle alpha blending percentage.
13559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
13569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
13579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT} or
13589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise this field
13599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is ignored.
13609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
13619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int alphaBlendingMiddlePercent;
13629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
13649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * End alpha blending percentage.
13659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
13669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
13679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT} or
13689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise this field
13699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is ignored.
13709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
13719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int alphaBlendingEndPercent;
13729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
13749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Duration, in percentage of effect duration of the fade-in phase.
13759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
13769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
13779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT} or
13789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise this field
13799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is ignored.
13809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
13819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int alphaBlendingFadeInTimePercent;
13829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
13849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Duration, in percentage of effect duration of the fade-out phase.
13859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
13869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * This field is only used when the field <code>videoEffectType</code>
13879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT} or
13889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise this field
13899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * is ignored.
13909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
13919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int alphaBlendingFadeOutTimePercent;
13929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
13939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Defines the clip properties for preview */
13959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class PreviewClips {
13969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
13979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
13989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * The path to the clip file.
13999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <p>
14009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * File format of the clip, it can be:
14019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <ul>
14029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <li>3GP file containing MPEG4/H263 video and AAC/AMR audio
14039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <li>JPG file
14049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * </ul>
14059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
14069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String clipPath;
14089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
14109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * File type of the clip. See {@link FileType FileType} for valid
14119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * values.
14129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
14139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int fileType;
14149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Begin of the cut in the clip in milliseconds. */
14169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public long beginPlayTime;
14179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public long endPlayTime;
14199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
14219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Set The media rendering. See {@link MediaRendering MediaRendering}
14229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * for valid values.
14239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
14249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int mediaRendering;
14259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
14279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Defines the audio settings. */
14299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class AudioSettings {
14309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        String pFile;
14329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** < PCM file path */
14349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        String Id;
14359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        boolean bRemoveOriginal;
14379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** < If true, the original audio track is not taken into account */
14399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int channels;
14409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** < Number of channels (1=mono, 2=stereo) of BGM clip */
14429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int Fs;
14439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
14459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * < Sampling audio frequency (8000 for amr, 16000 or more for aac) of
14469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * BGM clip
14479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
14489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int ExtendedFs;
14499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** < Extended frequency for AAC+, eAAC+ streams of BGM clip */
14519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        long startMs;
14529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** < Time, in milliseconds, at which the added audio track is inserted */
14549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        long beginCutTime;
14559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        long endCutTime;
14579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int fileType;
14599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int volume;
14619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** < Volume, in percentage, of the added audio track */
14639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        boolean loop;
14649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** < Looping on/off > **/
14669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio mix and Duck **/
14689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int ducking_threshold;
14699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int ducking_lowVolume;
14719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        boolean bInDucking_enable;
14739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        String pcmFilePath;
14759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
14769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Encapsulates preview clips and effect settings */
14789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class PreviewSettings {
14799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public PreviewClips[] previewClipsArray;
14819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The effect settings. */
14839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public EffectSettings[] effectSettingsArray;
14849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
14869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Encapsulates clip properties */
14889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class PreviewClipProperties {
14899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public Properties[] clipProperties;
14919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
14939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /** Defines the editing settings. */
14959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class EditSettings {
14969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
14979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
14989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Array of clip settings. There is one <code>clipSetting</code> for
14999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * each clip.
15009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
15019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public ClipSettings[] clipSettingsArray;
15029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
15049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Array of transition settings. If there are n clips (and thus n
15059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>clipSettings</code>) then there are (n-1) transitions and (n-1)
15069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>transistionSettings</code> in
15079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>transistionSettingsArray</code>.
15089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
15099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public TransitionSettings[] transitionSettingsArray;
15109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** The effect settings. */
15129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public EffectSettings[] effectSettingsArray;
15139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
15159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Video frame rate of the output clip. See {@link VideoFrameRate
15169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * VideoFrameRate} for valid values.
15179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
15189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int videoFrameRate;
15199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Output file name. Must be an absolute path. */
15219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String outputFile;
15229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
15249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Size of the video frames in the output clip. See
15259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link VideoFrameSize VideoFrameSize} for valid values.
15269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
15279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int videoFrameSize;
15289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
15309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Format of the video stream in the output clip. See
15319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link VideoFormat VideoFormat} for valid values.
15329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
15339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int videoFormat;
15349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
15363ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         * Profile of the video stream in the output clip.
15373ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         */
15383ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        public int videoProfile;
15393ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
15403ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        /**
15413ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         * Level of the video stream in the output clip.
15423ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         */
15433ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        public int videoLevel;
15443ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
15453ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        /**
15469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Format of the audio stream in the output clip. See
15479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link AudioFormat AudioFormat} for valid values.
15489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
15499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioFormat;
15509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
15529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Sampling frequency of the audio stream in the output clip. See
15539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link AudioSamplingFrequency AudioSamplingFrequency} for valid
15549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * values.
15559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
15569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioSamplingFreq;
15579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
15599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Maximum file size. By setting this you can set the maximum size of
15609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * the output clip. Set it to <code>0</code> to let the class ignore
15619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * this filed.
15629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
15639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int maxFileSize;
15649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
15669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Number of audio channels in output clip. Use <code>0</code> for none,
15679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * <code>1</code> for mono or <code>2</code> for stereo. None is only
15689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * allowed when the <code>audioFormat</code> field is set to
15699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link AudioFormat#NO_AUDIO AudioFormat.NO_AUDIO} or
15709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link AudioFormat#NULL_AUDIO AudioFormat.NULL_AUDIO} Mono is only
15719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * allowed when the <code>audioFormat</code> field is set to
15729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * {@link AudioFormat#AAC AudioFormat.AAC}
15739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
15749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioChannels;
15759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Video bitrate. See {@link Bitrate Bitrate} for valid values. */
15779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int videoBitrate;
15789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** Audio bitrate. See {@link Bitrate Bitrate} for valid values. */
15809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioBitrate;
15819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
15839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Background music settings. See {@link BackgroundMusicSettings
15849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * BackgroundMusicSettings} for valid values.
15859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
15869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public BackgroundMusicSettings backgroundMusicSettings;
15879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int primaryTrackVolume;
15899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
15919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
15939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Defines the media properties.
15949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     **/
15959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public static class Properties {
15979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
15989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
15999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Duration of the media in milliseconds.
16009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int duration;
16039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * File type.
16069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int fileType;
16099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Video format.
16129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int videoFormat;
16159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Duration of the video stream of the media in milliseconds.
16189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int videoDuration;
16219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Bitrate of the video stream of the media.
16249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int videoBitrate;
16279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Width of the video frames or the width of the still picture in
16309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * pixels.
16319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int width;
16349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Height of the video frames or the height of the still picture in
16379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * pixels.
16389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int height;
16419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Average frame rate of video in the media in frames per second.
16449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public float averageFrameRate;
16479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16493ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         * Profile of the video in the media.
16503ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         */
16513ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
16523ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        public int profile;
16533ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
16543ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        /**
16553ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         * Level of the video in the media.
16563ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         */
16573ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
16583ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        public int level;
16593ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
16603ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        /**
16613ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         * Is Video Profile supported.
16629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16643ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        public boolean profileSupported;
16653ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
16663ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        /**
16673ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         * Is Video Level supported.
16683ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury         */
16693ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
16703ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        public boolean levelSupported;
16719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Audio format.
16749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioFormat;
16779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Duration of the audio stream of the media in milliseconds.
16809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioDuration;
16839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Bitrate of the audio stream of the media.
16869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioBitrate;
16899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Number of audio channels in the media.
16929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
16939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioChannels;
16959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
16969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
16979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Sampling frequency of the audio stream in the media in samples per
16989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * second.
16999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
17009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
17019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioSamplingFrequency;
17029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
17039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
17049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Volume value of the audio track as percentage.
17059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
17069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public int audioVolumeValue;
17079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1708c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury        /**
1709c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury         * Video rotation degree.
1710c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury         */
1711c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury        public int videoRotation;
1712c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury
17139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        public String Id;
17149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
17159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
17169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
17179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Constructor
17189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
17199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param projectPath The path where the VideoEditor stores all files
17209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *        related to the project
17213f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi     * @param lock The semaphore
17229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param veObj The video editor reference
17239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
17243f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi    public MediaArtistNativeHelper(String projectPath, Semaphore lock, VideoEditor veObj) {
17259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mProjectPath = projectPath;
17269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (veObj != null) {
17279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mVideoEditor = veObj;
17289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else {
17299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mVideoEditor = null;
17309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new IllegalArgumentException("video editor object is null");
17319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
17323f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi        if (mStoryBoardSettings == null) {
17339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mStoryBoardSettings = new EditSettings();
17343f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi        }
17353f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi
17363f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi        mLock = lock;
17379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
17389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        _init(mProjectPath, "null");
17399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mAudioTrackPCMFilePath = null;
17409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
17419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
17429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
17439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The project path
17449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
17459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    String getProjectPath() {
17469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mProjectPath;
17479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
17489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
17499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
17509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The Audio Track PCM file path
17519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
17529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    String getProjectAudioTrackPCMFilePath() {
17539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mAudioTrackPCMFilePath;
17549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
17559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
17569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
17579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Invalidates the PCM file
17589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
17599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    void invalidatePcmFile() {
17609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mAudioTrackPCMFilePath != null) {
17619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            new File(mAudioTrackPCMFilePath).delete();
17629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioTrackPCMFilePath = null;
17639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
17649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
17659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
17669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    @SuppressWarnings("unused")
17679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private void onProgressUpdate(int taskId, int progress) {
17689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mProcessingState == PROCESSING_EXPORT) {
17699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (mExportProgressListener != null) {
17709d5ca4a14cca0985957eb4e23fd09068f2fd2215Santosh Madhava                if (mProgressToApp < progress) {
17719d5ca4a14cca0985957eb4e23fd09068f2fd2215Santosh Madhava                    mExportProgressListener.onProgress(mVideoEditor, mOutputFilename, progress);
17729d5ca4a14cca0985957eb4e23fd09068f2fd2215Santosh Madhava                    /* record previous progress */
17739d5ca4a14cca0985957eb4e23fd09068f2fd2215Santosh Madhava                    mProgressToApp = progress;
17749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                }
17759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
17769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
17779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        else {
17789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            // Adapt progress depending on current state
17799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int actualProgress = 0;
17809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int action = 0;
17819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
17829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (mProcessingState == PROCESSING_AUDIO_PCM) {
17839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                action = MediaProcessingProgressListener.ACTION_DECODE;
17849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } else {
17859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                action = MediaProcessingProgressListener.ACTION_ENCODE;
17869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
17879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
17889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            switch (mProcessingState) {
17899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                case PROCESSING_AUDIO_PCM:
17909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    actualProgress = progress;
17919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    break;
17929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                case PROCESSING_TRANSITION:
17939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    actualProgress = progress;
17949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    break;
17959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                case PROCESSING_KENBURNS:
17969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    actualProgress = progress;
17979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    break;
17989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                case PROCESSING_INTERMEDIATE1:
17999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    if ((progress == 0) && (mProgressToApp != 0)) {
18009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        mProgressToApp = 0;
18019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
18029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    if ((progress != 0) || (mProgressToApp != 0)) {
18039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        actualProgress = progress/4;
18049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
18059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    break;
18069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                case PROCESSING_INTERMEDIATE2:
18079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    if ((progress != 0) || (mProgressToApp != 0)) {
18089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        actualProgress = 25 + progress/4;
18099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
18109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    break;
18119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                case PROCESSING_INTERMEDIATE3:
18129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    if ((progress != 0) || (mProgressToApp != 0)) {
18139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        actualProgress = 50 + progress/2;
18149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
18159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    break;
18169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                case PROCESSING_NONE:
18179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
18189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                default:
18192bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    Log.e(TAG, "ERROR unexpected State=" + mProcessingState);
18209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    return;
18219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
18229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if ((mProgressToApp != actualProgress) && (actualProgress != 0)) {
18239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
18249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mProgressToApp = actualProgress;
18259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
18269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                if (mMediaProcessingProgressListener != null) {
18279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    // Send the progress indication
18282bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    mMediaProcessingProgressListener.onProgress(mProcessingObject, action,
18299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                                                actualProgress);
18309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                }
18319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
18329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            /* avoid 0 in next intermediate call */
18339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (mProgressToApp == 0) {
18349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                if (mMediaProcessingProgressListener != null) {
18359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    /*
18369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                     *  Send the progress indication
18379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                     */
18382bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    mMediaProcessingProgressListener.onProgress(mProcessingObject, action,
18399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                                                actualProgress);
18409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                }
18419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mProgressToApp = 1;
18429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
18439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
18449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
18459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
18469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    @SuppressWarnings("unused")
18479c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi    private void onPreviewProgressUpdate(int progress, boolean isFinished,
184863149c81adf79f43c6508647614247277f8052e2Hong Teng                  boolean updateOverlay, String filename, int renderingMode, int error) {
18499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mPreviewProgressListener != null) {
18509c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi            if (mIsFirstProgress) {
18519c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                mPreviewProgressListener.onStart(mVideoEditor);
18529c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                mIsFirstProgress = false;
18539c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi            }
18549c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
18559c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi            final VideoEditor.OverlayData overlayData;
18569c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi            if (updateOverlay) {
18579c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                overlayData = new VideoEditor.OverlayData();
18589c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                if (filename != null) {
18599c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                    overlayData.set(BitmapFactory.decodeFile(filename), renderingMode);
18609c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                } else {
18619c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                    overlayData.setClear();
18629c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                }
18639c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi            } else {
18649c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                overlayData = null;
18659c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi            }
18669c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
18674ff8a0b410a48a24a94e7d0c608b9b03e7928f71Santosh Madhava            if (progress != 0) {
18684ff8a0b410a48a24a94e7d0c608b9b03e7928f71Santosh Madhava                mPreviewProgress = progress;
18694ff8a0b410a48a24a94e7d0c608b9b03e7928f71Santosh Madhava            }
18709c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
18719c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi            if (isFinished) {
18729c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                mPreviewProgressListener.onStop(mVideoEditor);
187363149c81adf79f43c6508647614247277f8052e2Hong Teng            } else if (error != 0) {
187463149c81adf79f43c6508647614247277f8052e2Hong Teng                mPreviewProgressListener.onError(mVideoEditor, error);
18757256a7c525e079442fd733db692936f5f070b996Santosh Madhava            } else {
18767256a7c525e079442fd733db692936f5f070b996Santosh Madhava                mPreviewProgressListener.onProgress(mVideoEditor, progress, overlayData);
18779c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi            }
18789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
18799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
18809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
18819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
18829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Release the native helper object
18839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
18843f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi    void releaseNativeHelper() throws InterruptedException {
18853f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi        release();
18869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
18879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
18889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
18899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Release the native helper to end the Audio Graph process
18909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
18919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    @SuppressWarnings("unused")
18929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private void onAudioGraphExtractProgressUpdate(int progress, boolean isVideo) {
18932bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        if ((mExtractAudioWaveformProgressListener != null) && (progress > 0)) {
18949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mExtractAudioWaveformProgressListener.onProgress(progress);
18959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
18969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
18979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
18989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
18999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Populates the Effect Settings in EffectSettings
19009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
19019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param effects The reference of EffectColor
19029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
19032bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * @return The populated effect settings in EffectSettings reference
19049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
19059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    EffectSettings getEffectSettings(EffectColor effects) {
19069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        EffectSettings effectSettings = new EffectSettings();
19079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.startTime = (int)effects.getStartTime();
19089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.duration = (int)effects.getDuration();
19099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.videoEffectType = getEffectColorType(effects);
19109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.audioEffectType = 0;
19119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.startPercent = 0;
19129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.durationPercent = 0;
19139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.framingFile = null;
19149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.topLeftX = 0;
19159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.topLeftY = 0;
19169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.framingResize = false;
19179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.text = null;
19189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.textRenderingData = null;
19199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.textBufferWidth = 0;
19209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.textBufferHeight = 0;
19219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (effects.getType() == EffectColor.TYPE_FIFTIES) {
19229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.fiftiesFrameRate = 15;
19239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else {
19249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.fiftiesFrameRate = 0;
19259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
19269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
19279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if ((effectSettings.videoEffectType == VideoEffect.COLORRGB16)
19289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                || (effectSettings.videoEffectType == VideoEffect.GRADIENT)) {
19299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.rgb16InputColor = effects.getColor();
19309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
19319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
19329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.alphaBlendingStartPercent = 0;
19339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.alphaBlendingMiddlePercent = 0;
19349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.alphaBlendingEndPercent = 0;
19359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.alphaBlendingFadeInTimePercent = 0;
19369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.alphaBlendingFadeOutTimePercent = 0;
19379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return effectSettings;
19389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
19399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
19409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
19419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Populates the Overlay Settings in EffectSettings
19429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
19439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param overlay The reference of OverlayFrame
19449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
19452bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * @return The populated overlay settings in EffectSettings reference
19469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
19479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    EffectSettings getOverlaySettings(OverlayFrame overlay) {
19489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        EffectSettings effectSettings = new EffectSettings();
19499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        Bitmap bitmap = null;
19509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
19519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.startTime = (int)overlay.getStartTime();
19529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.duration = (int)overlay.getDuration();
19539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.videoEffectType = VideoEffect.FRAMING;
19549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.audioEffectType = 0;
19559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.startPercent = 0;
19569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.durationPercent = 0;
19579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.framingFile = null;
19589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
19599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if ((bitmap = overlay.getBitmap()) != null) {
19609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.framingFile = overlay.getFilename();
19619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
19629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (effectSettings.framingFile == null) {
19639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                try {
19649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    (overlay).save(mProjectPath);
19659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                } catch (IOException e) {
19662bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    Log.e(TAG, "getOverlaySettings : File not found");
19679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                }
19689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                effectSettings.framingFile = overlay.getFilename();
19699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
19709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (bitmap.getConfig() == Bitmap.Config.ARGB_8888)
19719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                effectSettings.bitmapType = 6;
19729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            else if (bitmap.getConfig() == Bitmap.Config.ARGB_4444)
19739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                effectSettings.bitmapType = 5;
19749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            else if (bitmap.getConfig() == Bitmap.Config.RGB_565)
19759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                effectSettings.bitmapType = 4;
19769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            else if (bitmap.getConfig() == Bitmap.Config.ALPHA_8)
19779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                throw new RuntimeException("Bitmap config not supported");
19789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
19799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.width = bitmap.getWidth();
19809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.height = bitmap.getHeight();
19819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.framingBuffer = new int[effectSettings.width];
19829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int tmp = 0;
19839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            short maxAlpha = 0;
19849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            short minAlpha = (short)0xFF;
19859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            short alpha = 0;
19869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            while (tmp < effectSettings.height) {
19879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                bitmap.getPixels(effectSettings.framingBuffer, 0,
19889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                 effectSettings.width, 0, tmp,
19899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                 effectSettings.width, 1);
19909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                for (int i = 0; i < effectSettings.width; i++) {
19919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    alpha = (short)((effectSettings.framingBuffer[i] >> 24) & 0xFF);
19929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    if (alpha > maxAlpha) {
19939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        maxAlpha = alpha;
19949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
19959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    if (alpha < minAlpha) {
19969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        minAlpha = alpha;
19979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
19989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                }
19999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                tmp += 1;
20009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
20019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            alpha = (short)((maxAlpha + minAlpha) / 2);
20029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            alpha = (short)((alpha * 100) / 256);
20039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.alphaBlendingEndPercent = alpha;
20049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.alphaBlendingMiddlePercent = alpha;
20059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.alphaBlendingStartPercent = alpha;
20069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.alphaBlendingFadeInTimePercent = 100;
20079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.alphaBlendingFadeOutTimePercent = 100;
20089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectSettings.framingBuffer = null;
200963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
201063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            /*
201163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             * Set the resized RGB file dimensions
201263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             */
201363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            effectSettings.width = overlay.getResizedRGBSizeWidth();
201463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            if(effectSettings.width == 0) {
201563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                effectSettings.width = bitmap.getWidth();
201663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            }
201763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
201863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            effectSettings.height = overlay.getResizedRGBSizeHeight();
201963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            if(effectSettings.height == 0) {
202063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                effectSettings.height = bitmap.getHeight();
202163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            }
202263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
20239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
20249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
20259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.topLeftX = 0;
20269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.topLeftY = 0;
20279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
20289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.framingResize = true;
20299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.text = null;
20309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.textRenderingData = null;
20319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.textBufferWidth = 0;
20329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.textBufferHeight = 0;
20339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.fiftiesFrameRate = 0;
20349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.rgb16InputColor = 0;
20359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int mediaItemHeight;
20369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int aspectRatio;
20379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (overlay.getMediaItem() instanceof MediaImageItem) {
20389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (((MediaImageItem)overlay.getMediaItem()).getGeneratedImageClip() != null) {
20392bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                // Ken Burns was applied
20409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mediaItemHeight = ((MediaImageItem)overlay.getMediaItem()).getGeneratedClipHeight();
20419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                aspectRatio = getAspectRatio(
20429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    ((MediaImageItem)overlay.getMediaItem()).getGeneratedClipWidth()
20439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    , mediaItemHeight);
20442bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            } else {
20459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                //For image get the scaled height. Aspect ratio would remain the same
20469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mediaItemHeight = ((MediaImageItem)overlay.getMediaItem()).getScaledHeight();
20479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                aspectRatio = overlay.getMediaItem().getAspectRatio();
20489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
20499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else {
20509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            aspectRatio = overlay.getMediaItem().getAspectRatio();
20519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mediaItemHeight = overlay.getMediaItem().getHeight();
20529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
20539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        effectSettings.framingScaledSize = findVideoResolution(aspectRatio, mediaItemHeight);
20549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return effectSettings;
20559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
20569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
205763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     /* get Video Editor aspect ratio */
205863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    int nativeHelperGetAspectRatio() {
205963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        return mVideoEditor.getAspectRatio();
206063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    }
206163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
20629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
20633ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury     * Sets the export audio codec
20643ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury     *
20653ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury     * @param export audio codec
20663ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury     *
20673ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury     */
20683ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury    void setAudioCodec(int codec) {
20693ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        mExportAudioCodec = codec;
20703ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury    }
20713ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury    /**
20723ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury     * Sets the export video codec
20733ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury     *
20743ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury     * @param export video codec
20753ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury     *
20763ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury     */
20773ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury    void setVideoCodec(int codec) {
20783ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        mExportVideoCodec = codec;
20793ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury    }
20803ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
20813ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury    /**
20829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Sets the audio regenerate flag
20839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
20849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param flag The boolean to set the audio regenerate flag
20859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
20869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
20879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    void setAudioflag(boolean flag) {
20889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        //check if the file exists.
20899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (!(new File(String.format(mProjectPath + "/" + AUDIO_TRACK_PCM_FILE)).exists())) {
20909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            flag = true;
20919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
20929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mRegenerateAudio = flag;
20939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
20949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
20959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
20969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Gets the audio regenerate flag
20979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
20989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param return The boolean to get the audio regenerate flag
20999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
21009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
21019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    boolean getAudioflag() {
21029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mRegenerateAudio;
21039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
21049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
21069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Maps the average frame rate to one of the defined enum values
21079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
21089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param averageFrameRate The average frame rate of video item
21099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
21109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The frame rate from one of the defined enum values
21119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
21122bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    int GetClosestVideoFrameRate(int averageFrameRate) {
21139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (averageFrameRate >= 25) {
21149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return VideoFrameRate.FR_30_FPS;
21159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (averageFrameRate >= 20) {
21169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return VideoFrameRate.FR_25_FPS;
21179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (averageFrameRate >= 15) {
21189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return VideoFrameRate.FR_20_FPS;
21199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (averageFrameRate >= 12) {
21209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return VideoFrameRate.FR_15_FPS;
21219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (averageFrameRate >= 10) {
21229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return VideoFrameRate.FR_12_5_FPS;
21239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (averageFrameRate >= 7) {
21249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return VideoFrameRate.FR_10_FPS;
21259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (averageFrameRate >= 5) {
21269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return VideoFrameRate.FR_7_5_FPS;
21279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else {
21289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return -1;
21299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
21309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
21319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
21339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Helper function to adjust the effect or overlay start time
21349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * depending on the begin and end boundary time of meddia item
21359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
21362bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    public void adjustEffectsStartTimeAndDuration(EffectSettings lEffect, int beginCutTime,
21379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                                  int endCutTime) {
21389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int effectStartTime = 0;
21409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int effectDuration = 0;
21419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
21439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * cbct -> clip begin cut time
21449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * cect -> clip end cut time
21459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         ****************************************
21469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  |                                 |
21479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  |         cbct        cect        |
21489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  | <-1-->   |           |          |
21499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  |       <--|-2->       |          |
21509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  |          | <---3---> |          |
21519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  |          |        <--|-4--->    |
21529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  |          |           | <--5-->  |
21539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  |      <---|------6----|---->     |
21549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  |                                 |
21559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  < : effectStart
21569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  > : effectStart + effectDuration
21579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         ****************************************
21589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         **/
21599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** 1 & 5 */
21619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
21629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * Effect falls out side the trim duration. In such a case effects shall
21639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * not be applied.
21649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
21659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if ((lEffect.startTime > endCutTime)
21669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                || ((lEffect.startTime + lEffect.duration) <= beginCutTime)) {
21679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectStartTime = 0;
21699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectDuration = 0;
21709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lEffect.startTime = effectStartTime;
21729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lEffect.duration = effectDuration;
21739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return;
21749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
21759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** 2 */
21779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if ((lEffect.startTime < beginCutTime)
21789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && ((lEffect.startTime + lEffect.duration) > beginCutTime)
21799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && ((lEffect.startTime + lEffect.duration) <= endCutTime)) {
21809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectStartTime = 0;
21819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectDuration = lEffect.duration;
21829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectDuration -= (beginCutTime - lEffect.startTime);
21849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lEffect.startTime = effectStartTime;
21859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lEffect.duration = effectDuration;
21869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return;
21879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
21889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** 3 */
21909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if ((lEffect.startTime >= beginCutTime)
21919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && ((lEffect.startTime + lEffect.duration) <= endCutTime)) {
21929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectStartTime = lEffect.startTime - beginCutTime;
21939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lEffect.startTime = effectStartTime;
21949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lEffect.duration = lEffect.duration;
21959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return;
21969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
21979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
21989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** 4 */
21999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if ((lEffect.startTime >= beginCutTime)
22009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && ((lEffect.startTime + lEffect.duration) > endCutTime)) {
22019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectStartTime = lEffect.startTime - beginCutTime;
22029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectDuration = endCutTime - lEffect.startTime;
22039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lEffect.startTime = effectStartTime;
22049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lEffect.duration = effectDuration;
22059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return;
22069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
22079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
22089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** 6 */
22099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if ((lEffect.startTime < beginCutTime)
22109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && ((lEffect.startTime + lEffect.duration) > endCutTime)) {
22119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectStartTime = 0;
22129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            effectDuration = endCutTime - beginCutTime;
22139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lEffect.startTime = effectStartTime;
22149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lEffect.duration = effectDuration;
22159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return;
22169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
22179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
22189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
22199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
22209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
22219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Generates the clip for preview or export
22229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
22239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param editSettings The EditSettings reference for generating
22249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * a clip for preview or export
22259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
22269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return error value
22279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
22289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public int generateClip(EditSettings editSettings) {
22299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int err = 0;
22309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
22319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        try {
22329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            err = nativeGenerateClip(editSettings);
22339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (IllegalArgumentException ex) {
22342bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Illegal Argument exception in load settings");
22359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return -1;
22369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (IllegalStateException ex) {
22372bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Illegal state exception in load settings");
22389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return -1;
22399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (RuntimeException ex) {
22402bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Runtime exception in load settings");
22419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return -1;
22429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
22439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return err;
22449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
22459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
22469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
22472bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * Init function to initialiZe the  ClipSettings reference to
22489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * default values
22499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
22509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param lclipSettings The ClipSettings reference
22519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
22529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    void initClipSettings(ClipSettings lclipSettings) {
22539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.clipPath = null;
22549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.clipDecodedPath = null;
22559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.clipOriginalPath = null;
22569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.fileType = 0;
22579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.endCutTime = 0;
22589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.beginCutTime = 0;
22599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.beginCutPercent = 0;
22609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.endCutPercent = 0;
22619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.panZoomEnabled = false;
22629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.panZoomPercentStart = 0;
22639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.panZoomTopLeftXStart = 0;
22649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.panZoomTopLeftYStart = 0;
22659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.panZoomPercentEnd = 0;
22669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.panZoomTopLeftXEnd = 0;
22679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.panZoomTopLeftYEnd = 0;
22689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        lclipSettings.mediaRendering = 0;
2269c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury        lclipSettings.rotationDegree = 0;
22709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
22719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
22729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
22739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
22749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Populates the settings for generating an effect clip
22759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
22769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param lMediaItem The media item for which the effect clip
22779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * needs to be generated
22789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param lclipSettings The ClipSettings reference containing
22799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * clips data
22809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param e The EditSettings reference containing effect specific data
22819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param uniqueId The unique id used in the name of the output clip
22829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param clipNo Used for internal purpose
22839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
22849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The name and path of generated clip
22859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
22869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    String generateEffectClip(MediaItem lMediaItem, ClipSettings lclipSettings,
22879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            EditSettings e,String uniqueId,int clipNo) {
22889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int err = 0;
22899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        EditSettings editSettings = null;
22909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        String EffectClipPath = null;
22913ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        int outVideoProfile = 0;
22923ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        int outVideoLevel = 0;
22939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings = new EditSettings();
22949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
22959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings.clipSettingsArray = new ClipSettings[1];
22969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings.clipSettingsArray[0] = lclipSettings;
22979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
22989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings.backgroundMusicSettings = null;
22999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings.transitionSettingsArray = null;
23009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings.effectSettingsArray = e.effectSettingsArray;
23019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        EffectClipPath = String.format(mProjectPath + "/" + "ClipEffectIntermediate" + "_"
23039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                + lMediaItem.getId() + uniqueId + ".3gp");
23049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        File tmpFile = new File(EffectClipPath);
23069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (tmpFile.exists()) {
23079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            tmpFile.delete();
23089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
23099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23103ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
23113ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
23123ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        editSettings.videoProfile = outVideoProfile;
23133ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        editSettings.videoLevel= outVideoLevel;
23143ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
23159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (lMediaItem instanceof MediaVideoItem) {
23169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            MediaVideoItem m = (MediaVideoItem)lMediaItem;
23179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.audioFormat = AudioFormat.AAC;
23199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.audioChannels = 2;
23209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.audioBitrate = Bitrate.BR_64_KBPS;
23219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
23229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.videoFormat = VideoFormat.H264;
23249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.videoFrameRate = VideoFrameRate.FR_30_FPS;
23252bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            editSettings.videoFrameSize = findVideoResolution(mVideoEditor.getAspectRatio(),
23262bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    m.getHeight());
23278b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            editSettings.videoBitrate = findVideoBitrate(editSettings.videoFrameSize);
23289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else {
23299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            MediaImageItem m = (MediaImageItem)lMediaItem;
23309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.audioBitrate = Bitrate.BR_64_KBPS;
23319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.audioChannels = 2;
23329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.audioFormat = AudioFormat.AAC;
23339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
23349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.videoFormat = VideoFormat.H264;
23369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            editSettings.videoFrameRate = VideoFrameRate.FR_30_FPS;
23372bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            editSettings.videoFrameSize = findVideoResolution(mVideoEditor.getAspectRatio(),
23382bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    m.getScaledHeight());
23398b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            editSettings.videoBitrate = findVideoBitrate(editSettings.videoFrameSize);
23409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
23419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings.outputFile = EffectClipPath;
23439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (clipNo == 1) {
23459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mProcessingState  = PROCESSING_INTERMEDIATE1;
23469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (clipNo == 2) {
23479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mProcessingState  = PROCESSING_INTERMEDIATE2;
23489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
23499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mProcessingObject = lMediaItem;
23509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        err = generateClip(editSettings);
23519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mProcessingState  = PROCESSING_NONE;
23529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (err == 0) {
23549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lclipSettings.clipPath = EffectClipPath;
23559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            lclipSettings.fileType = FileType.THREE_GPP;
23569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return EffectClipPath;
23579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else {
23589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new RuntimeException("preview generation cannot be completed");
23599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
23609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
23619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
23649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Populates the settings for generating a Ken Burn effect clip
23659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
23669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param m The media image item for which the Ken Burn effect clip
23679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * needs to be generated
23689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param e The EditSettings reference clip specific data
23699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
23709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The name and path of generated clip
23719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
23729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    String generateKenBurnsClip(EditSettings e, MediaImageItem m) {
23739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        String output = null;
23749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int err = 0;
23753ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        int outVideoProfile = 0;
23763ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        int outVideoLevel = 0;
23779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.backgroundMusicSettings = null;
23799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.transitionSettingsArray = null;
23809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.effectSettingsArray = null;
23819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        output = String.format(mProjectPath + "/" + "ImageClip-" + m.getId() + ".3gp");
23829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        File tmpFile = new File(output);
23849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (tmpFile.exists()) {
23859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            tmpFile.delete();
23869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
23879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23883ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
23893ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
23903ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        e.videoProfile = outVideoProfile;
23913ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        e.videoLevel = outVideoLevel;
23923ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
23939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.outputFile = output;
23949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.audioBitrate = Bitrate.BR_64_KBPS;
23959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.audioChannels = 2;
23969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.audioFormat = AudioFormat.AAC;
23979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
23989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
23999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.videoFormat = VideoFormat.H264;
24009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.videoFrameRate = VideoFrameRate.FR_30_FPS;
24019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.videoFrameSize = findVideoResolution(mVideoEditor.getAspectRatio(),
24029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                                           m.getScaledHeight());
24038b1f35099331746599298bda151eac56b041b746Chih-Chung Chang        e.videoBitrate = findVideoBitrate(e.videoFrameSize);
24048b1f35099331746599298bda151eac56b041b746Chih-Chung Chang
24059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mProcessingState  = PROCESSING_KENBURNS;
24069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mProcessingObject = m;
24079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        err = generateClip(e);
24089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        // Reset the processing state and check for errors
24099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mProcessingState  = PROCESSING_NONE;
24109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (err != 0) {
24119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new RuntimeException("preview generation cannot be completed");
24129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
24139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return output;
24149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
24159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
24169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
24179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
24189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Calculates the output resolution for transition clip
24199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
24209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param m1 First media item associated with transition
24219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param m2 Second media item associated with transition
24229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
24239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The transition resolution
24249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
24259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private int getTransitionResolution(MediaItem m1, MediaItem m2) {
24269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int clip1Height = 0;
24279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int clip2Height = 0;
24289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int videoSize = 0;
24299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
24309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (m1 != null && m2 != null) {
24319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (m1 instanceof MediaVideoItem) {
24329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                clip1Height = m1.getHeight();
24339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } else if (m1 instanceof MediaImageItem) {
24349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                clip1Height = ((MediaImageItem)m1).getScaledHeight();
24359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
24369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (m2 instanceof MediaVideoItem) {
24379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                clip2Height = m2.getHeight();
24389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } else if (m2 instanceof MediaImageItem) {
24399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                clip2Height = ((MediaImageItem)m2).getScaledHeight();
24409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
24419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (clip1Height > clip2Height) {
24422bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip1Height);
24439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } else {
24442bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip2Height);
24459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
24469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (m1 == null && m2 != null) {
24479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (m2 instanceof MediaVideoItem) {
24489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                clip2Height = m2.getHeight();
24499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } else if (m2 instanceof MediaImageItem) {
24509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                clip2Height = ((MediaImageItem)m2).getScaledHeight();
24519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
24522bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip2Height);
24539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (m1 != null && m2 == null) {
24549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (m1 instanceof MediaVideoItem) {
24559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                clip1Height = m1.getHeight();
24569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } else if (m1 instanceof MediaImageItem) {
24579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                clip1Height = ((MediaImageItem)m1).getScaledHeight();
24589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
24592bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip1Height);
24609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
24619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return videoSize;
24629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
24639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
24649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
24659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Populates the settings for generating an transition clip
24669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
24679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param m1 First media item associated with transition
24689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param m2 Second media item associated with transition
24699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param e The EditSettings reference containing
24709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * clip specific data
24719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param uniqueId The unique id used in the name of the output clip
24729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param t The Transition specific data
24739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
24749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The name and path of generated clip
24759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
24769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    String generateTransitionClip(EditSettings e, String uniqueId,
24779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            MediaItem m1, MediaItem m2,Transition t) {
24789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        String outputFilename = null;
24799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int err = 0;
24803ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        int outVideoProfile = 0;
24813ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        int outVideoLevel = 0;
24829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        outputFilename = String.format(mProjectPath + "/" + uniqueId + ".3gp");
24833ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
24843ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
24853ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
24863ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        e.videoProfile = outVideoProfile;
24873ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        e.videoLevel = outVideoLevel;
24883ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
24899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.outputFile = outputFilename;
24909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.audioBitrate = Bitrate.BR_64_KBPS;
24919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.audioChannels = 2;
24929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.audioFormat = AudioFormat.AAC;
24939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
24949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
24959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.videoFormat = VideoFormat.H264;
24969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.videoFrameRate = VideoFrameRate.FR_30_FPS;
24979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        e.videoFrameSize = getTransitionResolution(m1, m2);
24988b1f35099331746599298bda151eac56b041b746Chih-Chung Chang        e.videoBitrate = findVideoBitrate(e.videoFrameSize);
24999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
25009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (new File(outputFilename).exists()) {
25019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            new File(outputFilename).delete();
25029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
25039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mProcessingState  = PROCESSING_INTERMEDIATE3;
25049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mProcessingObject = t;
25059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        err = generateClip(e);
25069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        // Reset the processing state and check for errors
25079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mProcessingState  = PROCESSING_NONE;
25089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (err != 0) {
25099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new RuntimeException("preview generation cannot be completed");
25109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
25119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return outputFilename;
25129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
25139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
25149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
25159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Populates effects and overlays in EffectSettings structure
25169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * and also adjust the start time and duration of effects and overlays
25179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * w.r.t to total story board time
25189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
25199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param m1 Media item associated with effect
25209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param effectSettings The EffectSettings reference containing
25212bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     *      effect specific data
25229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param beginCutTime The begin cut time of the clip associated with effect
25239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param endCutTime The end cut time of the clip associated with effect
25249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param storyBoardTime The current story board time
25259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
25269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The updated index
25279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
25289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private int populateEffects(MediaItem m, EffectSettings[] effectSettings, int i,
25299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int beginCutTime, int endCutTime, int storyBoardTime) {
25309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
25319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (m.getBeginTransition() != null && m.getBeginTransition().getDuration() > 0
25329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && m.getEndTransition() != null && m.getEndTransition().getDuration() > 0) {
25339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            beginCutTime += m.getBeginTransition().getDuration();
25349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            endCutTime -= m.getEndTransition().getDuration();
25359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (m.getBeginTransition() == null && m.getEndTransition() != null
25369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && m.getEndTransition().getDuration() > 0) {
25379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            endCutTime -= m.getEndTransition().getDuration();
25389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (m.getEndTransition() == null && m.getBeginTransition() != null
25399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && m.getBeginTransition().getDuration() > 0) {
25409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            beginCutTime += m.getBeginTransition().getDuration();
25419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
25429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
25432bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        final List<Effect> effects = m.getAllEffects();
25442bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        final List<Overlay> overlays = m.getAllOverlays();
2545ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi
2546ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi        for (Overlay overlay : overlays) {
2547ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi            effectSettings[i] = getOverlaySettings((OverlayFrame)overlay);
2548ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi            adjustEffectsStartTimeAndDuration(effectSettings[i], beginCutTime, endCutTime);
2549ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi            effectSettings[i].startTime += storyBoardTime;
2550ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi            i++;
2551ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi        }
2552ab280b8db6743b826f7412ec1de70e203b91c23dDharmaray Kundargi
25539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        for (Effect effect : effects) {
25549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (effect instanceof EffectColor) {
25559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                effectSettings[i] = getEffectSettings((EffectColor)effect);
25562bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                adjustEffectsStartTimeAndDuration(effectSettings[i], beginCutTime, endCutTime);
25579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                effectSettings[i].startTime += storyBoardTime;
25589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                i++;
25599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
25609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
25612bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
25629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return i;
25639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
25649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
25659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
25669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Adjusts the media item boundaries for use in export or preview
25679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
25689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param clipSettings The ClipSettings reference
25699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param clipProperties The Properties reference
25709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param m The media item
25719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
25729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private void adjustMediaItemBoundary(ClipSettings clipSettings,
25739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                         Properties clipProperties, MediaItem m) {
25749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (m.getBeginTransition() != null && m.getBeginTransition().getDuration() > 0
25759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && m.getEndTransition() != null && m.getEndTransition().getDuration() > 0) {
25769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            clipSettings.beginCutTime += m.getBeginTransition().getDuration();
25779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            clipSettings.endCutTime -= m.getEndTransition().getDuration();
25789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (m.getBeginTransition() == null && m.getEndTransition() != null
25799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && m.getEndTransition().getDuration() > 0) {
25809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            clipSettings.endCutTime -= m.getEndTransition().getDuration();
25819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (m.getEndTransition() == null && m.getBeginTransition() != null
25829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                && m.getBeginTransition().getDuration() > 0) {
25839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            clipSettings.beginCutTime += m.getBeginTransition().getDuration();
25849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
25852bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
25862bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        clipProperties.duration = clipSettings.endCutTime - clipSettings.beginCutTime;
25879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
25889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (clipProperties.videoDuration != 0) {
25892bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            clipProperties.videoDuration = clipSettings.endCutTime - clipSettings.beginCutTime;
25909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
25919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
25929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (clipProperties.audioDuration != 0) {
25932bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            clipProperties.audioDuration = clipSettings.endCutTime - clipSettings.beginCutTime;
25949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
25959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
25969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
25979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
25989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Generates the transition if transition is present
25999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * and is in invalidated state
26009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
26019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param transition The Transition reference
26029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param editSettings The EditSettings reference
26039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param clipPropertiesArray The clip Properties array
26049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param i The index in clip Properties array for current clip
26059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
26069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private void generateTransition(Transition transition, EditSettings editSettings,
26079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            PreviewClipProperties clipPropertiesArray, int index) {
26089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (!(transition.isGenerated())) {
26099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            transition.generate();
26109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
26119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings.clipSettingsArray[index] = new ClipSettings();
26129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings.clipSettingsArray[index].clipPath = transition.getFilename();
26139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings.clipSettingsArray[index].fileType = FileType.THREE_GPP;
26149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        editSettings.clipSettingsArray[index].beginCutTime = 0;
26152bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        editSettings.clipSettingsArray[index].endCutTime = (int)transition.getDuration();
26162bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        editSettings.clipSettingsArray[index].mediaRendering = MediaRendering.BLACK_BORDERS;
26172bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
26189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        try {
26199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            clipPropertiesArray.clipProperties[index] =
26202bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                getMediaProperties(transition.getFilename());
26219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (Exception e) {
26229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new IllegalArgumentException("Unsupported file or file not found");
26239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
26242bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
26259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        clipPropertiesArray.clipProperties[index].Id = null;
26269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        clipPropertiesArray.clipProperties[index].audioVolumeValue = 100;
26272bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        clipPropertiesArray.clipProperties[index].duration = (int)transition.getDuration();
26289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (clipPropertiesArray.clipProperties[index].videoDuration != 0) {
26292bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            clipPropertiesArray.clipProperties[index].videoDuration = (int)transition.getDuration();
26309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
26312bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
26329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (clipPropertiesArray.clipProperties[index].audioDuration != 0) {
26332bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            clipPropertiesArray.clipProperties[index].audioDuration = (int)transition.getDuration();
26349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
26359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
26369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
26379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
26389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Sets the volume for current media item in clip properties array
26399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
26409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param m The media item
26419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param clipProperties The clip properties array reference
26429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param i The index in clip Properties array for current clip
26439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
26449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private void adjustVolume(MediaItem m, PreviewClipProperties clipProperties,
26459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                              int index) {
26469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (m instanceof MediaVideoItem) {
26472bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            final boolean videoMuted = ((MediaVideoItem)m).isMuted();
26489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (videoMuted == false) {
26492bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                mClipProperties.clipProperties[index].audioVolumeValue =
26502bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    ((MediaVideoItem)m).getVolume();
26519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } else {
26529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mClipProperties.clipProperties[index].audioVolumeValue = 0;
26539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
26549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (m instanceof MediaImageItem) {
26559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mClipProperties.clipProperties[index].audioVolumeValue = 0;
26569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
26579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
26589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
26599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
26609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Checks for odd size image width and height
26619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
26629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param m The media item
26639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param clipProperties The clip properties array reference
26649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param i The index in clip Properties array for current clip
26659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
26669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private void checkOddSizeImage(MediaItem m, PreviewClipProperties clipProperties, int index) {
26679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (m instanceof MediaImageItem) {
26689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int width = mClipProperties.clipProperties[index].width;
26699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int height = mClipProperties.clipProperties[index].height;
26709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
26719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if ((width % 2) != 0) {
26729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                width -= 1;
26739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
26749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if ((height % 2) != 0) {
26759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                height -= 1;
26769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
26779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mClipProperties.clipProperties[index].width = width;
26789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mClipProperties.clipProperties[index].height = height;
26799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
26809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
26819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
26829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
26839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Populates the media item properties and calculates the maximum
26849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * height among all the clips
26859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
26869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param m The media item
26879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param i The index in clip Properties array for current clip
26889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param maxHeight The max height from the clip properties
26899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
26909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return Updates the max height if current clip's height is greater
26919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * than all previous clips height
26929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
26939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private int populateMediaItemProperties(MediaItem m, int index, int maxHeight) {
26949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mPreviewEditSettings.clipSettingsArray[index] = new ClipSettings();
26959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (m instanceof MediaVideoItem) {
26962bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.clipSettingsArray[index] =
26972bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                ((MediaVideoItem)m).getVideoClipProperties();
26989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (((MediaVideoItem)m).getHeight() > maxHeight) {
26999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                maxHeight = ((MediaVideoItem)m).getHeight();
27009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
27019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (m instanceof MediaImageItem) {
27022bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.clipSettingsArray[index] =
27032bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                ((MediaImageItem)m).getImageClipProperties();
27049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (((MediaImageItem)m).getScaledHeight() > maxHeight) {
27059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                maxHeight = ((MediaImageItem)m).getScaledHeight();
27069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
27079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
27089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /** + Handle the image files here */
27099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mPreviewEditSettings.clipSettingsArray[index].fileType == FileType.JPG) {
27102bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.clipSettingsArray[index].clipDecodedPath =
27112bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                ((MediaImageItem)m).getDecodedImageFileName();
27129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
27139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mPreviewEditSettings.clipSettingsArray[index].clipOriginalPath =
27149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                         mPreviewEditSettings.clipSettingsArray[index].clipPath;
27159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
27169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return maxHeight;
27179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
27189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
27199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
27209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Populates the background music track properties
27219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
27229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param mediaBGMList The background music list
27239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
27249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
27259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private void populateBackgroundMusicProperties(List<AudioTrack> mediaBGMList) {
27269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
27279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mediaBGMList.size() == 1) {
27289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioTrack = mediaBGMList.get(0);
27292bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        } else {
27309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioTrack = null;
27319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
27329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
27339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mAudioTrack != null) {
27349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings = new AudioSettings();
27359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            Properties mAudioProperties = new Properties();
27369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.pFile = null;
27379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.Id = mAudioTrack.getId();
27389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            try {
27399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mAudioProperties = getMediaProperties(mAudioTrack.getFilename());
27409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } catch (Exception e) {
27419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava               throw new IllegalArgumentException("Unsupported file or file not found");
27429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
27439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.bRemoveOriginal = false;
27449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.channels = mAudioProperties.audioChannels;
27459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.Fs = mAudioProperties.audioSamplingFrequency;
27469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.loop = mAudioTrack.isLooping();
27479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.ExtendedFs = 0;
27489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.pFile = mAudioTrack.getFilename();
27499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.startMs = mAudioTrack.getStartTime();
27509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.beginCutTime = mAudioTrack.getBoundaryBeginTime();
27519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.endCutTime = mAudioTrack.getBoundaryEndTime();
27529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (mAudioTrack.isMuted()) {
27539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mAudioSettings.volume = 0;
27549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } else {
27559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mAudioSettings.volume = mAudioTrack.getVolume();
27569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
27579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.fileType = mAudioProperties.fileType;
27589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.ducking_lowVolume = mAudioTrack.getDuckedTrackVolume();
27599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.ducking_threshold = mAudioTrack.getDuckingThreshhold();
27609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.bInDucking_enable = mAudioTrack.isDuckingEnabled();
27619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioTrackPCMFilePath = String.format(mProjectPath + "/" + AUDIO_TRACK_PCM_FILE);
27629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioSettings.pcmFilePath = mAudioTrackPCMFilePath;
27639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
27642bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.backgroundMusicSettings = new BackgroundMusicSettings();
27652bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.backgroundMusicSettings.file = mAudioTrackPCMFilePath;
27662bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.backgroundMusicSettings.fileType = mAudioProperties.fileType;
27679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mPreviewEditSettings.backgroundMusicSettings.insertionTime =
27682bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                mAudioTrack.getStartTime();
27692bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.backgroundMusicSettings.volumePercent = mAudioTrack.getVolume();
27702bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.backgroundMusicSettings.beginLoop =
27712bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                mAudioTrack.getBoundaryBeginTime();
27729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mPreviewEditSettings.backgroundMusicSettings.endLoop =
27739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                               mAudioTrack.getBoundaryEndTime();
27742bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.backgroundMusicSettings.enableDucking =
27752bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                mAudioTrack.isDuckingEnabled();
27762bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.backgroundMusicSettings.duckingThreshold =
27772bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                mAudioTrack.getDuckingThreshhold();
27782bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.backgroundMusicSettings.lowVolume =
27792bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                mAudioTrack.getDuckedTrackVolume();
27802bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.backgroundMusicSettings.isLooping = mAudioTrack.isLooping();
27819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mPreviewEditSettings.primaryTrackVolume = 100;
27829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mProcessingState  = PROCESSING_AUDIO_PCM;
27839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mProcessingObject = mAudioTrack;
27849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else {
27852bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mAudioSettings = null;
27862bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.backgroundMusicSettings = null;
27879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mAudioTrackPCMFilePath = null;
27889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
27899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
27909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
27919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
27929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Calculates all the effects in all the media items
27939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * in media items list
27949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
27959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param mediaItemsList The media item list
27969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
27979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The total number of effects
27989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
27999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
28009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private int getTotalEffects(List<MediaItem> mediaItemsList) {
28019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int totalEffects = 0;
28029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        final Iterator<MediaItem> it = mediaItemsList.iterator();
28039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        while (it.hasNext()) {
28049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            final MediaItem t = it.next();
28059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            totalEffects += t.getAllEffects().size();
28069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            totalEffects += t.getAllOverlays().size();
28079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            final Iterator<Effect> ef = t.getAllEffects().iterator();
28089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            while (ef.hasNext()) {
28099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                final Effect e = ef.next();
28102bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                if (e instanceof EffectKenBurns) {
28119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    totalEffects--;
28122bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                }
28139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
28149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
28159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return totalEffects;
28169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
28179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
28189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
28199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * This function is responsible for forming clip settings
28209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * array and clip properties array including transition clips
28219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * and effect settings for preview purpose or export.
28229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
28239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
28249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param mediaItemsList The media item list
28259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param mediaTransitionList The transitions list
28269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param mediaBGMList The background music list
28279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param listener The MediaProcessingProgressListener
28289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
28299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
28302bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    void previewStoryBoard(List<MediaItem> mediaItemsList,
28319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            List<Transition> mediaTransitionList, List<AudioTrack> mediaBGMList,
28329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            MediaProcessingProgressListener listener) {
28339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mInvalidatePreviewArray) {
28349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int previewIndex = 0;
28359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int totalEffects = 0;
28369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int storyBoardTime = 0;
28379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int maxHeight = 0;
28389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int beginCutTime = 0;
28399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int endCutTime = 0;
28409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int effectIndex = 0;
28419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            Transition lTransition = null;
28429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            MediaItem lMediaItem = null;
28439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mPreviewEditSettings = new EditSettings();
28449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mClipProperties = new PreviewClipProperties();
28459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mTotalClips = 0;
28469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
28479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mTotalClips = mediaItemsList.size();
28489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            for (Transition transition : mediaTransitionList) {
28492bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                if (transition.getDuration() > 0) {
28509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    mTotalClips++;
28512bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                }
28529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
28539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
28549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            totalEffects = getTotalEffects(mediaItemsList);
28559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
28569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mPreviewEditSettings.clipSettingsArray = new ClipSettings[mTotalClips];
28579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mPreviewEditSettings.effectSettingsArray = new EffectSettings[totalEffects];
28589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mClipProperties.clipProperties = new Properties[mTotalClips];
28599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
28602bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            /** record the call back progress listener */
2861de412d277ce9e5dc3918401fc399ace98d4f1d31Santosh Madhava            mMediaProcessingProgressListener = listener;
2862de412d277ce9e5dc3918401fc399ace98d4f1d31Santosh Madhava            mProgressToApp = 0;
28639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
28649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (mediaItemsList.size() > 0) {
28659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                for (int i = 0; i < mediaItemsList.size(); i++) {
28669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    /* Get the Media Item from the list */
28679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    lMediaItem = mediaItemsList.get(i);
28689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    if (lMediaItem instanceof MediaVideoItem) {
28699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        beginCutTime = (int)((MediaVideoItem)lMediaItem).getBoundaryBeginTime();
28709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        endCutTime = (int)((MediaVideoItem)lMediaItem).getBoundaryEndTime();
28719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    } else if (lMediaItem instanceof MediaImageItem) {
28729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        beginCutTime = 0;
28739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        endCutTime = (int)((MediaImageItem)lMediaItem).getTimelineDuration();
28749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
28759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    /* Get the transition associated with Media Item */
28769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    lTransition = lMediaItem.getBeginTransition();
28779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    if (lTransition != null && (lTransition.getDuration() > 0)) {
28789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        /* generate transition clip */
28799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        generateTransition(lTransition, mPreviewEditSettings,
28809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                           mClipProperties, previewIndex);
28819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        storyBoardTime += mClipProperties.clipProperties[previewIndex].duration;
28829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        previewIndex++;
28839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
28849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    /* Populate media item properties */
28852bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    maxHeight = populateMediaItemProperties(lMediaItem, previewIndex, maxHeight);
28869c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi                    /* Get the clip properties of the media item. */
28872bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    if (lMediaItem instanceof MediaImageItem) {
28889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        int tmpCnt = 0;
28899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        boolean bEffectKbPresent = false;
28902bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                        final List<Effect> effectList = lMediaItem.getAllEffects();
28919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        /**
28922bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                         * Check if Ken Burns effect is present
28939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                         */
28942bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                        while (tmpCnt < effectList.size()) {
28959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                            if (effectList.get(tmpCnt) instanceof EffectKenBurns) {
28969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                bEffectKbPresent = true;
28979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                break;
28989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                            }
28999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                            tmpCnt++;
29009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        }
29019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
29029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        if (bEffectKbPresent) {
29039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                            try {
2904178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                  if(((MediaImageItem)lMediaItem).getGeneratedImageClip() != null) {
2905178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                     mClipProperties.clipProperties[previewIndex]
2906178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                        = getMediaProperties(((MediaImageItem)lMediaItem).
2907178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                                             getGeneratedImageClip());
2908178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                  }
2909178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                  else {
2910178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                   mClipProperties.clipProperties[previewIndex]
2911178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                      = getMediaProperties(((MediaImageItem)lMediaItem).
2912178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                                             getScaledImageFileName());
2913178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                   mClipProperties.clipProperties[previewIndex].width =
2914178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                             ((MediaImageItem)lMediaItem).getScaledWidth();
2915178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                   mClipProperties.clipProperties[previewIndex].height =
2916178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                             ((MediaImageItem)lMediaItem).getScaledHeight();
2917178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                  }
2918178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                } catch (Exception e) {
2919178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                   throw new IllegalArgumentException("Unsupported file or file not found");
2920178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                }
2921178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                         } else {
2922178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                              try {
2923178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                  mClipProperties.clipProperties[previewIndex]
2924178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                      = getMediaProperties(((MediaImageItem)lMediaItem).
2925178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                                               getScaledImageFileName());
2926178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                              } catch (Exception e) {
29279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                throw new IllegalArgumentException("Unsupported file or file not found");
2928178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                              }
2929178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                            mClipProperties.clipProperties[previewIndex].width =
2930178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                        ((MediaImageItem)lMediaItem).getScaledWidth();
2931178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                            mClipProperties.clipProperties[previewIndex].height =
2932178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                                        ((MediaImageItem)lMediaItem).getScaledHeight();
29339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        }
29342bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    } else {
29359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        try {
29369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                            mClipProperties.clipProperties[previewIndex]
29379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                 = getMediaProperties(lMediaItem.getFilename());
2938178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                            } catch (Exception e) {
2939178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                              throw new IllegalArgumentException("Unsupported file or file not found");
2940178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma                          }
29419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
29429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    mClipProperties.clipProperties[previewIndex].Id = lMediaItem.getId();
29439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    checkOddSizeImage(lMediaItem, mClipProperties, previewIndex);
29449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    adjustVolume(lMediaItem, mClipProperties, previewIndex);
29459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
29469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    /*
29479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                     * Adjust media item start time and end time w.r.t to begin
29489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                     * and end transitions associated with media item
29499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                     */
29509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
29519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    adjustMediaItemBoundary(mPreviewEditSettings.clipSettingsArray[previewIndex],
29529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                            mClipProperties.clipProperties[previewIndex], lMediaItem);
29539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
29549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    /*
29559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                     * Get all the effects and overlays for that media item and
29569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                     * adjust start time and duration of effects
29579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                     */
29589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
29599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    effectIndex = populateEffects(lMediaItem,
29609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                            mPreviewEditSettings.effectSettingsArray, effectIndex, beginCutTime,
29619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                            endCutTime, storyBoardTime);
29629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    storyBoardTime += mClipProperties.clipProperties[previewIndex].duration;
29639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    previewIndex++;
29649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
29659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    /* Check if there is any end transition at last media item */
29669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
29679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    if (i == (mediaItemsList.size() - 1)) {
29689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        lTransition = lMediaItem.getEndTransition();
29699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        if (lTransition != null && (lTransition.getDuration() > 0)) {
29709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                            generateTransition(lTransition, mPreviewEditSettings, mClipProperties,
29719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                    previewIndex);
29729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                            break;
29739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        }
29749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
29759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                }
29762bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
29770d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                if (!mErrorFlagSet) {
29780d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                    mPreviewEditSettings.videoFrameSize = findVideoResolution(mVideoEditor
29790d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                            .getAspectRatio(), maxHeight);
29800d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                    populateBackgroundMusicProperties(mediaBGMList);
29810d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi
29820d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                    /** call to native populate settings */
29830d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                    try {
29840d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                        nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
29850d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                    } catch (IllegalArgumentException ex) {
29860d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                        Log.e(TAG, "Illegal argument exception in nativePopulateSettings");
29870d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                        throw ex;
29880d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                    } catch (IllegalStateException ex) {
29890d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                        Log.e(TAG, "Illegal state exception in nativePopulateSettings");
29900d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                        throw ex;
29910d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                    } catch (RuntimeException ex) {
29920d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                        Log.e(TAG, "Runtime exception in nativePopulateSettings");
29930d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                        throw ex;
29940d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                    }
29950d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                    mInvalidatePreviewArray = false;
29960d99f5a95ccf45ad45824875f3c4b56510a421d1Dharmaray Kundargi                    mProcessingState  = PROCESSING_NONE;
29979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                }
29989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
29999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (mErrorFlagSet) {
30009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mErrorFlagSet = false;
30019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                throw new RuntimeException("preview generation cannot be completed");
30029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
30039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
30049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    } /* END of previewStoryBoard */
30059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
30069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
30079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * This function is responsible for starting the preview
30089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
30099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
30109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param surface The surface on which preview has to be displayed
30119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param fromMs The time in ms from which preview has to be started
30129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param toMs The time in ms till preview has to be played
30139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param loop To loop the preview or not
30149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param callbackAfterFrameCount INdicated after how many frames
30159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * the callback is needed
30169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param listener The PreviewProgressListener
30179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
30182bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    void doPreview(Surface surface, long fromMs, long toMs, boolean loop,
30199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int callbackAfterFrameCount, PreviewProgressListener listener) {
3020a6714ce2bbb593efdfb53e071607df2a5117a643Santosh Madhava        mPreviewProgress = fromMs;
30219c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi        mIsFirstProgress = true;
3022de412d277ce9e5dc3918401fc399ace98d4f1d31Santosh Madhava        mPreviewProgressListener = listener;
3023de412d277ce9e5dc3918401fc399ace98d4f1d31Santosh Madhava
30249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (!mInvalidatePreviewArray) {
30259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            try {
30269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                /** Modify the image files names to rgb image files. */
30272bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length;
30282bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    clipCnt++) {
30299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
30302bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                        mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath =
30312bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                            mPreviewEditSettings.clipSettingsArray[clipCnt].clipDecodedPath;
30329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    }
30339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                }
30349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
30359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                nativeStartPreview(surface, fromMs, toMs, callbackAfterFrameCount, loop);
30369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } catch (IllegalArgumentException ex) {
30372bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                Log.e(TAG, "Illegal argument exception in nativeStartPreview");
30389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                throw ex;
30399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } catch (IllegalStateException ex) {
30402bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                Log.e(TAG, "Illegal state exception in nativeStartPreview");
30419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                throw ex;
30429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            } catch (RuntimeException ex) {
30432bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                Log.e(TAG, "Runtime exception in nativeStartPreview");
30449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                throw ex;
30459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
3046a3f87f855b9abe2d086658eba8a92e04b69dd078Dharmaray Kundargi        } else {
3047a3f87f855b9abe2d086658eba8a92e04b69dd078Dharmaray Kundargi            throw new IllegalStateException("generatePreview is in progress");
30489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
30499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
30509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
30519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
30529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * This function is responsible for stopping the preview
30539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
30542bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    long stopPreview() {
3055df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhava        return nativeStopPreview();
30569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
30579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
30589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
30599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * This function is responsible for rendering a single frame
30609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * from the complete story board on the surface
30619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
30629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param surface The surface on which frame has to be rendered
30639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param time The time in ms at which the frame has to be rendered
30649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param surfaceWidth The surface width
30659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param surfaceHeight The surface height
30669c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi     * @param overlayData The overlay data
30679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
30689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The actual time from the story board at which the  frame was extracted
30699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * and rendered
30709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
30712bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    long renderPreviewFrame(Surface surface, long time, int surfaceWidth,
30729c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi            int surfaceHeight, VideoEditor.OverlayData overlayData) {
30732bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        if (mInvalidatePreviewArray) {
3074a3f87f855b9abe2d086658eba8a92e04b69dd078Dharmaray Kundargi            if (Log.isLoggable(TAG, Log.DEBUG)) {
3075a3f87f855b9abe2d086658eba8a92e04b69dd078Dharmaray Kundargi                Log.d(TAG, "Call generate preview first");
3076a3f87f855b9abe2d086658eba8a92e04b69dd078Dharmaray Kundargi            }
3077a3f87f855b9abe2d086658eba8a92e04b69dd078Dharmaray Kundargi            throw new IllegalStateException("Call generate preview first");
30782bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        }
30799c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
30802bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        long timeMs = 0;
30812bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        try {
30822bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length;
30832bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                  clipCnt++) {
30842bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
30852bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                    mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath =
30862bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                        mPreviewEditSettings.clipSettingsArray[clipCnt].clipDecodedPath;
30879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                }
30882bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            }
30899c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
30902bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            // Reset the render preview frame params that shall be set by native.
30912bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mRenderPreviewOverlayFile = null;
30922bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mRenderPreviewRenderingMode = MediaRendering.RESIZING;
30939c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
30942bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
30952bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
30962bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            timeMs = (long)nativeRenderPreviewFrame(surface, time, surfaceWidth, surfaceHeight);
30972bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
30982bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            if (mRenderPreviewOverlayFile != null) {
30992bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                overlayData.set(BitmapFactory.decodeFile(mRenderPreviewOverlayFile),
31002bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                        mRenderPreviewRenderingMode);
31012bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            } else {
31022bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                overlayData.setClear();
31039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
31042bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        } catch (IllegalArgumentException ex) {
31052bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Illegal Argument exception in nativeRenderPreviewFrame");
31062bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            throw ex;
31072bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        } catch (IllegalStateException ex) {
31082bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Illegal state exception in nativeRenderPreviewFrame");
31092bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            throw ex;
31102bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        } catch (RuntimeException ex) {
31112bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Runtime exception in nativeRenderPreviewFrame");
31122bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            throw ex;
31139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
31142bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
31152bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        return timeMs;
31169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
31179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
31189c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi    private void previewFrameEditInfo(String filename, int renderingMode) {
31199c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi        mRenderPreviewOverlayFile = filename;
31209c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi        mRenderPreviewRenderingMode = renderingMode;
31219c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi    }
31229c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
31239c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
31249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
31259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * This function is responsible for rendering a single frame
31269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * from a single media item on the surface
31279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
31289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param surface The surface on which frame has to be rendered
31299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param filepath The file path for which the frame needs to be displayed
31309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param time The time in ms at which the frame has to be rendered
31319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param framewidth The frame width
31329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param framewidth The frame height
31339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
31349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The actual time from media item at which the  frame was extracted
31359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * and rendered
31369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
31372bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    long renderMediaItemPreviewFrame(Surface surface, String filepath,
31382bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                                            long time, int framewidth, int frameheight) {
31399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        long timeMs = 0;
31409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        try {
31419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            timeMs = (long)nativeRenderMediaItemPreviewFrame(surface, filepath, framewidth,
31429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    frameheight, 0, 0, time);
31439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (IllegalArgumentException ex) {
31442bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Illegal Argument exception in renderMediaItemPreviewFrame");
31459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw ex;
31469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (IllegalStateException ex) {
31472bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Illegal state exception in renderMediaItemPreviewFrame");
31489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw ex;
31499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (RuntimeException ex) {
31502bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Runtime exception in renderMediaItemPreviewFrame");
31519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw ex;
31529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
31539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
31549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return timeMs;
31559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
31569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
31579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
31589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * This function sets the flag to invalidate the preview array
31599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * and for generating the preview again
31609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
31619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    void setGeneratePreview(boolean isRequired) {
31622bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        boolean semAcquiredDone = false;
31632bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        try {
31642bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            lock();
31652bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            semAcquiredDone = true;
31662bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mInvalidatePreviewArray = isRequired;
31672bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        } catch (InterruptedException ex) {
31682bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Runtime exception in renderMediaItemPreviewFrame");
31692bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        } finally {
31702bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            if (semAcquiredDone) {
31712bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                unlock();
31722bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            }
31732bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        }
31749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
31759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
31769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
31779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return Returns the current status of preview invalidation
31789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * flag
31799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
31809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    boolean getGeneratePreview() {
31819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mInvalidatePreviewArray;
31829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
31839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
31849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
31859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Calculates the aspect ratio from widht and height
31869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
31879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param w The width of media item
31889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param h The height of media item
31899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
31909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The calculated aspect ratio
31919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
31922bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    int getAspectRatio(int w, int h) {
31939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        double apRatio = (double)(w) / (double)(h);
31949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        BigDecimal bd = new BigDecimal(apRatio);
31959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        bd = bd.setScale(3, BigDecimal.ROUND_HALF_UP);
31969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        apRatio = bd.doubleValue();
31979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int var = MediaProperties.ASPECT_RATIO_16_9;
31989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (apRatio >= 1.7) {
31999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            var = MediaProperties.ASPECT_RATIO_16_9;
32009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (apRatio >= 1.6) {
32019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            var = MediaProperties.ASPECT_RATIO_5_3;
32029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (apRatio >= 1.5) {
32039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            var = MediaProperties.ASPECT_RATIO_3_2;
32049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (apRatio > 1.3) {
32059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            var = MediaProperties.ASPECT_RATIO_4_3;
32069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else if (apRatio >= 1.2) {
32079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            var = MediaProperties.ASPECT_RATIO_11_9;
32089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
32099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return var;
32109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
32119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
32129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
32139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Maps the file type used in native layer
32149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * to file type used in JAVA layer
32159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
32169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param fileType The file type in native layer
32179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
32189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The File type in JAVA layer
32199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
32202bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    int getFileType(int fileType) {
32219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int retValue = -1;
32229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (fileType) {
32239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case FileType.UNSUPPORTED:
32249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.FILE_UNSUPPORTED;
32259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case FileType.THREE_GPP:
32279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.FILE_3GP;
32289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case FileType.MP4:
32309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.FILE_MP4;
32319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case FileType.JPG:
32339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.FILE_JPEG;
32349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case FileType.PNG:
32369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.FILE_PNG;
32379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case FileType.MP3:
32399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.FILE_MP3;
32409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32414e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi            case FileType.M4V:
32424e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi                retValue = MediaProperties.FILE_M4V;
32434e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi                break;
3244f58ba6506959947d2e646833789c859ae50e6767James Dong            case FileType.AMR:
3245f58ba6506959947d2e646833789c859ae50e6767James Dong                retValue = MediaProperties.FILE_AMR;
3246f58ba6506959947d2e646833789c859ae50e6767James Dong                break;
32479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
32489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            default:
32499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = -1;
32509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
32519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return retValue;
32529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
32539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
32549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
32559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Maps the video codec type used in native layer
32569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * to video codec type used in JAVA layer
32579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
32589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param codecType The video codec type in native layer
32599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
32609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The video codec type in JAVA layer
32619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
32622bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    int getVideoCodecType(int codecType) {
32639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int retValue = -1;
32649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (codecType) {
32659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFormat.H263:
32669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.VCODEC_H263;
32679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFormat.H264:
32693ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury                retValue = MediaProperties.VCODEC_H264;
32709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFormat.MPEG4:
32729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.VCODEC_MPEG4;
32739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFormat.UNSUPPORTED:
32759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
32769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            default:
32779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = -1;
32789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
32799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return retValue;
32809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
32819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
32829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
32839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Maps the audio codec type used in native layer
32849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * to audio codec type used in JAVA layer
32859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
32869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param audioType The audio codec type in native layer
32879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
32889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The audio codec type in JAVA layer
32899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
32902bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    int getAudioCodecType(int codecType) {
32919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int retValue = -1;
32929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (codecType) {
32939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case AudioFormat.AMR_NB:
32949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.ACODEC_AMRNB;
32959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case AudioFormat.AAC:
32979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.ACODEC_AAC_LC;
32989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
32999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case AudioFormat.MP3:
33009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaProperties.ACODEC_MP3;
33019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
33039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            default:
33049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = -1;
33059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
33069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return retValue;
33079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
33089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
33099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
33109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Returns the frame rate as integer
33119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
33129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param fps The fps as enum
33139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
33149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The frame rate as integer
33159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
33162bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    int getFrameRate(int fps) {
33179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int retValue = -1;
33189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (fps) {
33199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFrameRate.FR_5_FPS:
33209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = 5;
33219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFrameRate.FR_7_5_FPS:
33239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = 8;
33249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFrameRate.FR_10_FPS:
33269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = 10;
33279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFrameRate.FR_12_5_FPS:
33299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = 13;
33309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFrameRate.FR_15_FPS:
33329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = 15;
33339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFrameRate.FR_20_FPS:
33359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = 20;
33369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFrameRate.FR_25_FPS:
33389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = 25;
33399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case VideoFrameRate.FR_30_FPS:
33419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = 30;
33429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
33449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            default:
33459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = -1;
33469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
33479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return retValue;
33489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
33499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
33509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
33519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Maps the file type used in JAVA layer
33529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * to file type used in native layer
33539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
33549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param fileType The file type in JAVA layer
33559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
33569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The File type in native layer
33579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
33589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    int getMediaItemFileType(int fileType) {
33599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int retValue = -1;
33609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
33619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (fileType) {
33629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.FILE_UNSUPPORTED:
33639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = FileType.UNSUPPORTED;
33649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.FILE_3GP:
33669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = FileType.THREE_GPP;
33679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.FILE_MP4:
33699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = FileType.MP4;
33709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.FILE_JPEG:
33729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = FileType.JPG;
33739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.FILE_PNG:
33759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = FileType.PNG;
33769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
33774e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi            case MediaProperties.FILE_M4V:
33784e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi                retValue = FileType.M4V;
33794e7032052137345450bfd2b7a4a9a05ecde17076Dharmaray Kundargi                break;
33809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
33819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            default:
33829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = -1;
33839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
33849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return retValue;
33859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
33869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
33879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
33889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
33899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Maps the rendering mode used in native layer
33909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * to rendering mode used in JAVA layer
33919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
33929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param renderingMode The rendering mode in JAVA layer
33939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
33949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The rendering mode in native layer
33959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
33969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    int getMediaItemRenderingMode(int renderingMode) {
33979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int retValue = -1;
33989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (renderingMode) {
33999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaItem.RENDERING_MODE_BLACK_BORDER:
34009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaRendering.BLACK_BORDERS;
34019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaItem.RENDERING_MODE_STRETCH:
34039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaRendering.RESIZING;
34049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaItem.RENDERING_MODE_CROPPING:
34069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = MediaRendering.CROPPING;
34079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
34099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            default:
34109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = -1;
34119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
34129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return retValue;
34139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
34149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
34159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
34169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Maps the transition behavior used in JAVA layer
34179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * to transition behavior used in native layer
34189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
34199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param transitionType The transition behavior in JAVA layer
34209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
34219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The transition behavior in native layer
34229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
34239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    int getVideoTransitionBehaviour(int transitionType) {
34249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int retValue = -1;
34259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (transitionType) {
34269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case Transition.BEHAVIOR_SPEED_UP:
34279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = TransitionBehaviour.SPEED_UP;
34289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case Transition.BEHAVIOR_SPEED_DOWN:
34309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = TransitionBehaviour.SPEED_DOWN;
34319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case Transition.BEHAVIOR_LINEAR:
34339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = TransitionBehaviour.LINEAR;
34349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case Transition.BEHAVIOR_MIDDLE_SLOW:
34369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = TransitionBehaviour.SLOW_MIDDLE;
34379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case Transition.BEHAVIOR_MIDDLE_FAST:
34399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = TransitionBehaviour.FAST_MIDDLE;
34409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
34429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            default:
34439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = -1;
34449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
34459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return retValue;
34469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
34479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
34489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
34499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Maps the transition slide direction used in JAVA layer
34509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * to transition slide direction used in native layer
34519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
34529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param slideDirection The transition slide direction
34539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * in JAVA layer
34549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
34559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The transition slide direction in native layer
34569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
34579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    int getSlideSettingsDirection(int slideDirection) {
34589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int retValue = -1;
34599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (slideDirection) {
34609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN:
34619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = SlideDirection.RIGHT_OUT_LEFT_IN;
34629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case TransitionSliding.DIRECTION_LEFT_OUT_RIGHT_IN:
34649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = SlideDirection.LEFT_OUT_RIGTH_IN;
34659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case TransitionSliding.DIRECTION_TOP_OUT_BOTTOM_IN:
34679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = SlideDirection.TOP_OUT_BOTTOM_IN;
34689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case TransitionSliding.DIRECTION_BOTTOM_OUT_TOP_IN:
34709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = SlideDirection.BOTTOM_OUT_TOP_IN;
34719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
34729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
34739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            default:
34749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = -1;
34759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
34769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return retValue;
34779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
34789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
34799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
34809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Maps the effect color type used in JAVA layer
34819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * to effect color type used in native layer
34829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
34839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param effect The EffectColor reference
34849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
34859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The color effect value from native layer
34869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
34879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private int getEffectColorType(EffectColor effect) {
34889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int retValue = -1;
34899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (effect.getType()) {
34909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case EffectColor.TYPE_COLOR:
34919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                if (effect.getColor() == EffectColor.GREEN) {
34929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoEffect.GREEN;
34939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                } else if (effect.getColor() == EffectColor.PINK) {
34949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoEffect.PINK;
34959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                } else if (effect.getColor() == EffectColor.GRAY) {
34969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoEffect.BLACK_AND_WHITE;
34979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                } else {
34989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoEffect.COLORRGB16;
34999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                }
35009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
35019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case EffectColor.TYPE_GRADIENT:
35029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = VideoEffect.GRADIENT;
35039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
35049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case EffectColor.TYPE_SEPIA:
35059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = VideoEffect.SEPIA;
35069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
35079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case EffectColor.TYPE_NEGATIVE:
35089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = VideoEffect.NEGATIVE;
35099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
35109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case EffectColor.TYPE_FIFTIES:
35119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = VideoEffect.FIFTIES;
35129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
35139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
35149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            default:
35159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                retValue = -1;
35169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
35179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return retValue;
35189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
35199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
35209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
35212bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * Calculates video resolution for output clip
35229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * based on clip's height and aspect ratio of storyboard
35239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
35249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param aspectRatio The aspect ratio of story board
35259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param height The height of clip
35269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
35279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The video resolution
35289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
35299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private int findVideoResolution(int aspectRatio, int height) {
35309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        final Pair<Integer, Integer>[] resolutions;
35319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        final Pair<Integer, Integer> maxResolution;
35329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int retValue = VideoFrameSize.SIZE_UNDEFINED;
35339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (aspectRatio) {
35349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.ASPECT_RATIO_3_2:
35359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                if (height == MediaProperties.HEIGHT_480)
35369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoFrameSize.NTSC;
35379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                else if (height == MediaProperties.HEIGHT_720)
35389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoFrameSize.W720p;
35399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
35409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.ASPECT_RATIO_16_9:
35419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                if (height == MediaProperties.HEIGHT_480)
35429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoFrameSize.WVGA16x9;
35439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                else if (height == MediaProperties.HEIGHT_720)
35449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoFrameSize.V720p;
3545600acf14ff12eaf139f0ac644fb7e17849af65faHong Teng                else if (height == MediaProperties.HEIGHT_1080)
3546600acf14ff12eaf139f0ac644fb7e17849af65faHong Teng                    retValue = VideoFrameSize.V1080p;
35479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
35489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.ASPECT_RATIO_4_3:
35499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                if (height == MediaProperties.HEIGHT_480)
35509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoFrameSize.VGA;
3551bcbf68583e38eeb79266f9f3a8c3d1b17f75a8c2Santosh Madhava                else if (height == MediaProperties.HEIGHT_720)
35529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoFrameSize.S720p;
35539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
35549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.ASPECT_RATIO_5_3:
35559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                if (height == MediaProperties.HEIGHT_480)
35569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoFrameSize.WVGA;
35579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
35589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.ASPECT_RATIO_11_9:
35599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                if (height == MediaProperties.HEIGHT_144)
35609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                    retValue = VideoFrameSize.QCIF;
3561bcbf68583e38eeb79266f9f3a8c3d1b17f75a8c2Santosh Madhava                else if (height == MediaProperties.HEIGHT_288)
3562bcbf68583e38eeb79266f9f3a8c3d1b17f75a8c2Santosh Madhava                    retValue = VideoFrameSize.CIF;
35639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
35649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
35659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (retValue == VideoFrameSize.SIZE_UNDEFINED) {
35669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            resolutions = MediaProperties.getSupportedResolutions(mVideoEditor.getAspectRatio());
35679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            // Get the highest resolution
35689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            maxResolution = resolutions[resolutions.length - 1];
35692bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            retValue = findVideoResolution(mVideoEditor.getAspectRatio(), maxResolution.second);
35709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
35719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
35729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return retValue;
35739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
35749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
35759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
35768b1f35099331746599298bda151eac56b041b746Chih-Chung Chang     *  Calculate a reasonable bitrate for generating intermediate clips.
35778b1f35099331746599298bda151eac56b041b746Chih-Chung Chang     */
35788b1f35099331746599298bda151eac56b041b746Chih-Chung Chang    private int findVideoBitrate(int videoFrameSize) {
35798b1f35099331746599298bda151eac56b041b746Chih-Chung Chang        switch (videoFrameSize) {
35808b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.SQCIF:
35818b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.QQVGA:
35828b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.QCIF:
35838b1f35099331746599298bda151eac56b041b746Chih-Chung Chang                return Bitrate.BR_128_KBPS;
35848b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.QVGA:
35858b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.CIF:
35868b1f35099331746599298bda151eac56b041b746Chih-Chung Chang                return Bitrate.BR_384_KBPS;
35878b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.VGA:
35888b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.WVGA:
35898b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.NTSC:
35908b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.nHD:
35918b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.WVGA16x9:
35928b1f35099331746599298bda151eac56b041b746Chih-Chung Chang                return Bitrate.BR_2_MBPS;
35938b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.V720p:
35948b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.W720p:
35958b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.S720p:
35968b1f35099331746599298bda151eac56b041b746Chih-Chung Chang                return Bitrate.BR_5_MBPS;
35978b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            case VideoFrameSize.V1080p:
35988b1f35099331746599298bda151eac56b041b746Chih-Chung Chang            default:
35998b1f35099331746599298bda151eac56b041b746Chih-Chung Chang                return Bitrate.BR_8_MBPS;
36008b1f35099331746599298bda151eac56b041b746Chih-Chung Chang        }
36018b1f35099331746599298bda151eac56b041b746Chih-Chung Chang    }
36028b1f35099331746599298bda151eac56b041b746Chih-Chung Chang
36038b1f35099331746599298bda151eac56b041b746Chih-Chung Chang    /**
36049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * This method is responsible for exporting a movie
36059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
36069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param filePath The output file path
36079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param projectDir The output project directory
36089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param height The height of clip
36099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param bitrate The bitrate at which the movie should be exported
36109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param mediaItemsList The media items list
36112bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * @param mediaTransitionList The transitions list
36129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param mediaBGMList The background track list
36139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param listener The ExportProgressListener
36149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
36159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
36162bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    void export(String filePath, String projectDir, int height, int bitrate,
36179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            List<MediaItem> mediaItemsList, List<Transition> mediaTransitionList,
36189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            List<AudioTrack> mediaBGMList, ExportProgressListener listener) {
36199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
36209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int outBitrate = 0;
36219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mExportFilename = filePath;
36229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        previewStoryBoard(mediaItemsList, mediaTransitionList, mediaBGMList,null);
3623de412d277ce9e5dc3918401fc399ace98d4f1d31Santosh Madhava        mExportProgressListener = listener;
36243ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        int outVideoProfile = 0;
36253ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        int outVideoLevel = 0;
36263ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury
36273ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        /** Check the platform specific maximum export resolution */
36283ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        VideoEditorProfile veProfile = VideoEditorProfile.get();
36293ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        if (veProfile == null) {
36303ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury            throw new RuntimeException("Can't get the video editor profile");
36313ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        }
36323ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        final int maxOutputHeight = veProfile.maxOutputVideoFrameHeight;
36333ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        final int maxOutputWidth = veProfile.maxOutputVideoFrameWidth;
36343ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        if (height > maxOutputHeight) {
36353ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury            throw new IllegalArgumentException(
36363ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury                    "Unsupported export resolution. Supported maximum width:" +
36373ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury                    maxOutputWidth + " height:" + maxOutputHeight +
36383ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury                    " current height:" + height);
36393ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        }
36403ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        outVideoProfile = VideoEditorProfile.getExportProfile(mExportVideoCodec);
36413ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        outVideoLevel = VideoEditorProfile.getExportLevel(mExportVideoCodec);
3642de412d277ce9e5dc3918401fc399ace98d4f1d31Santosh Madhava
36439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mProgressToApp = 0;
36449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
36459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        switch (bitrate) {
36469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_28K:
36479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_32_KBPS;
36489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_40K:
36509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_48_KBPS;
36519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_64K:
36539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_64_KBPS;
36549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_96K:
36569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_96_KBPS;
36579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_128K:
36599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_128_KBPS;
36609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_192K:
36629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_192_KBPS;
36639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_256K:
36659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_256_KBPS;
36669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_384K:
36689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_384_KBPS;
36699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_512K:
36719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_512_KBPS;
36729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_800K:
36749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_800_KBPS;
36759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_2M:
36779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_2_MBPS;
36789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_5M:
36809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_5_MBPS;
36819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            case MediaProperties.BITRATE_8M:
36839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                outBitrate = Bitrate.BR_8_MBPS;
36849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                break;
36859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
36869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            default:
36879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                throw new IllegalArgumentException("Argument Bitrate incorrect");
36889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
36899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mPreviewEditSettings.videoFrameRate = VideoFrameRate.FR_30_FPS;
36909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mPreviewEditSettings.outputFile = mOutputFilename = filePath;
36919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
36929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int aspectRatio = mVideoEditor.getAspectRatio();
36939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mPreviewEditSettings.videoFrameSize = findVideoResolution(aspectRatio, height);
36943ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        mPreviewEditSettings.videoFormat = mExportVideoCodec;
36953ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        mPreviewEditSettings.audioFormat = mExportAudioCodec;
36963ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        mPreviewEditSettings.videoProfile = outVideoProfile;
36973ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury        mPreviewEditSettings.videoLevel = outVideoLevel;
36989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mPreviewEditSettings.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
36999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mPreviewEditSettings.maxFileSize = 0;
37009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mPreviewEditSettings.audioChannels = 2;
37019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mPreviewEditSettings.videoBitrate = outBitrate;
37029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mPreviewEditSettings.audioBitrate = Bitrate.BR_96_KBPS;
37039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
37049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mPreviewEditSettings.transitionSettingsArray = new TransitionSettings[mTotalClips - 1];
37059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        for (int index = 0; index < mTotalClips - 1; index++) {
37069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mPreviewEditSettings.transitionSettingsArray[index] = new TransitionSettings();
37072bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.transitionSettingsArray[index].videoTransitionType =
37082bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                VideoTransition.NONE;
37092bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mPreviewEditSettings.transitionSettingsArray[index].audioTransitionType =
37102bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi                AudioTransition.NONE;
37119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
3712178d4f41119614b9064720a5bffeaebf3affe941Dheeraj Sharma
37139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length; clipCnt++) {
37149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
37159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath =
37169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                mPreviewEditSettings.clipSettingsArray[clipCnt].clipOriginalPath;
37179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            }
37189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
37199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
37209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
37219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        int err = 0;
37229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        try {
37239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mProcessingState  = PROCESSING_EXPORT;
37249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mProcessingObject = null;
37259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            err = generateClip(mPreviewEditSettings);
37269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mProcessingState  = PROCESSING_NONE;
37279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (IllegalArgumentException ex) {
37282bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "IllegalArgument for generateClip");
37299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw ex;
37309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (IllegalStateException ex) {
37312bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "IllegalStateExceptiont for generateClip");
37329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw ex;
37339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (RuntimeException ex) {
37342bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "RuntimeException for generateClip");
37359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw ex;
37369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
37379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
37389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (err != 0) {
37392bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "RuntimeException for generateClip");
37402bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            throw new RuntimeException("generateClip failed with error=" + err);
37419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
37429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
37439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mExportProgressListener = null;
37449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
37459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
37469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
37472bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * This methods takes care of stopping the Export process
37489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
37492bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * @param The input file name for which export has to be stopped
37509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
37512bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    void stop(String filename) {
37529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        try {
37532bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            stopEncoding();
37542bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            new File(mExportFilename).delete();
37559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (IllegalStateException ex) {
37562bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Illegal state exception in unload settings");
37579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw ex;
37589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } catch (RuntimeException ex) {
37592bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.e(TAG, "Runtime exception in unload settings");
37609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw ex;
37619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
37629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
37639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
37649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
37659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * This method extracts a frame from the input file
376647a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang     * and returns the frame as a bitmap. See getPixelsList() for more information.
376747a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang     */
376847a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang    Bitmap getPixels(String filename, int width, int height, long timeMs,
376947a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang            int videoRotation) {
377047a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final Bitmap result[] = new Bitmap[1];
377147a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        getPixelsList(filename, width, height, timeMs, timeMs, 1, new int[] {0},
377247a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                new MediaItem.GetThumbnailListCallback() {
377347a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang            public void onThumbnail(Bitmap bitmap, int index) {
377447a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                result[0] = bitmap;
377547a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang            }
377647a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        }, videoRotation);
377747a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        return result[0];
37789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
37799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
37809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
37819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * This method extracts a list of frame from the
37829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * input file and returns the frame in bitmap array
37839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
378447a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang     * @param filename The input file name
378547a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang     * @param width The width of the output frame, before rotation
378647a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang     * @param height The height of the output frame, before rotation
37879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param startMs The starting time in ms
37889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param endMs The end time in ms
37899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param thumbnailCount The number of frames to be extracted
37901f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang     * @param indices The indices of thumbnails wanted
37911f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang     * @param callback The callback used to pass back the bitmaps
379247a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang     * @param videoRotation The rotation degree need to be done for the bitmap
37939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
37949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The frames as bitmaps in bitmap array
37959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     **/
37961f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang    void getPixelsList(String filename, final int width, final int height,
37971f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang            long startMs, long endMs, int thumbnailCount, int[] indices,
3798c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury            final MediaItem.GetThumbnailListCallback callback,
3799c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury            final int videoRotation) {
380047a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang
380147a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        // The decoder needs output width and height as even
380247a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final int decWidth = (width + 1) & 0xFFFFFFFE;
380347a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final int decHeight = (height + 1) & 0xFFFFFFFE;
380447a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final int thumbnailSize = decWidth * decHeight;
380547a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang
380647a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        // We convert the decoder output (in int[]) to a bitmap by first
380747a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        // copy it into an IntBuffer, then use Bitmap.copyPixelsFromBuffer to
380847a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        // copy it to the bitmap.
380947a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final int[] decArray = new int[thumbnailSize];
381047a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final IntBuffer decBuffer = IntBuffer.allocate(thumbnailSize);
381147a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang
381247a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        // If we need to resize and/or rotate the decoder output, we need a
381347a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        // temporary bitmap to hold the decoded output.
381447a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final boolean needToMassage =
381547a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                (decWidth != width || decHeight != height || videoRotation != 0);
381647a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final Bitmap tmpBitmap = needToMassage
381747a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                ? Bitmap.createBitmap(decWidth, decHeight, Bitmap.Config.ARGB_8888)
38181f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang                : null;
38191f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang
382047a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        // The final output bitmap width/height may swap because of rotation.
382147a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final boolean needToSwapWH = (videoRotation == 90 || videoRotation == 270);
382247a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final int outWidth = needToSwapWH ? height : width;
382347a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        final int outHeight = needToSwapWH ? width : height;
382447a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang
382547a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        nativeGetPixelsList(filename, decArray, decWidth, decHeight,
382647a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                thumbnailCount, startMs, endMs, indices,
38271f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang                new NativeGetPixelsListCallback() {
38281f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang            public void onThumbnail(int index) {
382947a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                // This is the bitmap we will output to the client
383047a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                Bitmap outBitmap = Bitmap.createBitmap(
383147a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                        outWidth, outHeight, Bitmap.Config.ARGB_8888);
38321f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang
383347a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                // Copy int[] to IntBuffer
383439ca39b0268b6c8d227163c52653162e06b84bdaMarco Nelissen                decBuffer.rewind();
383547a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                decBuffer.put(decArray, 0, thumbnailSize);
383647a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                decBuffer.rewind();
38376bcbb3bd095daf2c630454f2ac0c26f48b6edf60Santosh Madhava
383847a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                if (!needToMassage) {
383947a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    // We can directly read the decoded result to output bitmap
384047a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    outBitmap.copyPixelsFromBuffer(decBuffer);
3841c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury                } else {
384247a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    // Copy the decoded result to an intermediate bitmap first
384347a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    tmpBitmap.copyPixelsFromBuffer(decBuffer);
384447a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang
384547a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    // Create a canvas to resize/rotate the bitmap
384647a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    // First scale the decoded bitmap to (0,0)-(1,1), rotate it
384747a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    // with (0.5, 0.5) as center, then scale it to
384847a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    // (outWidth, outHeight).
384947a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    final Canvas canvas = new Canvas(outBitmap);
385047a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    Matrix m = new Matrix();
385147a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    float sx = 1f / decWidth;
385247a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    float sy = 1f / decHeight;
385347a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    m.postScale(sx, sy);
385447a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    m.postRotate(videoRotation, 0.5f, 0.5f);
385547a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    m.postScale(outWidth, outHeight);
385647a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                    canvas.drawBitmap(tmpBitmap, m, sResizePaint);
3857c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury                }
385847a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang                callback.onThumbnail(outBitmap, index);
38596bcbb3bd095daf2c630454f2ac0c26f48b6edf60Santosh Madhava            }
38601f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang        });
38619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
386247a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang        if (tmpBitmap != null) {
386347a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang            tmpBitmap.recycle();
38646bcbb3bd095daf2c630454f2ac0c26f48b6edf60Santosh Madhava        }
38651f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang    }
38663f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi
38671f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang    interface NativeGetPixelsListCallback {
38681f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang        public void onThumbnail(int index);
38699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
38709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
38719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
38729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * This method generates the audio graph
38739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
38749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param uniqueId The unique id
38759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param inFileName The inputFile
38769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param OutAudiGraphFileName output filename
38779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param frameDuration The each frame duration
38789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param audioChannels The number of audio channels
38799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param samplesCount Total number of samples count
38809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param listener ExtractAudioWaveformProgressListener reference
38819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param isVideo The flag to indicate if the file is video file or not
38829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
38839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     **/
38842bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    void generateAudioGraph(String uniqueId, String inFileName, String OutAudiGraphFileName,
38859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int frameDuration, int audioChannels, int samplesCount,
38869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            ExtractAudioWaveformProgressListener listener, boolean isVideo) {
38879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        String tempPCMFileName;
38889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
3889de412d277ce9e5dc3918401fc399ace98d4f1d31Santosh Madhava        mExtractAudioWaveformProgressListener = listener;
3890de412d277ce9e5dc3918401fc399ace98d4f1d31Santosh Madhava
38919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
38922bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi         * In case of Video, first call will generate the PCM file to make the
38939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * audio graph
38949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
38959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (isVideo) {
38969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            tempPCMFileName = String.format(mProjectPath + "/" + uniqueId + ".pcm");
38979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        } else {
38989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            tempPCMFileName = mAudioTrackPCMFilePath;
38999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
39002bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
39019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
39029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         * For Video item, generate the PCM
39039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
39049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (isVideo) {
39059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            nativeGenerateRawAudio(inFileName, tempPCMFileName);
39069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
39079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
39089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        nativeGenerateAudioGraph(tempPCMFileName, OutAudiGraphFileName, frameDuration,
39099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                audioChannels, samplesCount);
39109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
39112bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        /**
39122bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi         * Once the audio graph file is generated, delete the pcm file
39132bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi         */
39149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (isVideo) {
39159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            new File(tempPCMFileName).delete();
39169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
39179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
39189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
39192bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    void clearPreviewSurface(Surface surface) {
39202bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        nativeClearSurface(surface);
39212bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    }
39222bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
39232bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    /**
39242bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * Grab the semaphore which arbitrates access to the editor
39252bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     *
39262bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * @throws InterruptedException
39272bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     */
39283f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi    private void lock() throws InterruptedException {
39292bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        if (Log.isLoggable(TAG, Log.DEBUG)) {
39302bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.d(TAG, "lock: grabbing semaphore", new Throwable());
39312bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        }
39322bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        mLock.acquire();
39332bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        if (Log.isLoggable(TAG, Log.DEBUG)) {
39342bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.d(TAG, "lock: grabbed semaphore");
39352bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        }
39362bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    }
39372bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
39382bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    /**
39392bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * Release the semaphore which arbitrates access to the editor
39402bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     */
39413f1c57394091de7204d218898696baeb20c04f25Gil Dobjanschi    private void unlock() {
39422bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        if (Log.isLoggable(TAG, Log.DEBUG)) {
39432bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            Log.d(TAG, "unlock: releasing semaphore");
39442bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        }
39452bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        mLock.release();
394605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma    }
39479c077e44c05f6829dd12067947a387c132dc6eaaDharmaray Kundargi
39489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**     Native Methods        */
394998dcca909a44e527ca3a187b13cd1e49a328cbfbJames Dong    native Properties getMediaProperties(String file) throws IllegalArgumentException,
39502bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            IllegalStateException, RuntimeException, Exception;
39519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
39529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
39539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the version of ManualEdit.
39549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
39559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return version of ManualEdit
39569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws RuntimeException if an error occurred
39579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @see Version
39589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
395998dcca909a44e527ca3a187b13cd1e49a328cbfbJames Dong    private static native Version getVersion() throws RuntimeException;
39609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
39619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
39629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Returns the video thumbnail in an array of integers. Output format is
39639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * ARGB8888.
39649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
39652bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi     * @param pixelArray the array that receives the pixel values
39669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param width width of the video thumbnail
39679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param height height of the video thumbnail
39689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param timeMS desired time of the thumbnail in ms
39699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return actual time in ms of the thumbnail generated
39709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws IllegalStateException if the class has not been initialized
39719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws IllegalArgumentException if the pixelArray is not available or
39729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *             one of the dimensions is negative or zero or the time is
39739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *             negative
39749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws RuntimeException on runtime errors in native code
39759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
397698dcca909a44e527ca3a187b13cd1e49a328cbfbJames Dong    private native int nativeGetPixels(String fileName, int[] pixelArray, int width, int height,
39779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            long timeMS);
39789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
39791f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang    private native int nativeGetPixelsList(String fileName, int[] pixelArray,
398047a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang            int width, int height, int nosofTN, long startTimeMs,
3981c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury            long endTimeMs, int[] indices, NativeGetPixelsListCallback callback);
39829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
39839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
39849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Releases the JNI and cleans up the core native module.. Should be called
39859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * only after init( )
39869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
39879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws IllegalStateException if the method could not be called
39889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
398998dcca909a44e527ca3a187b13cd1e49a328cbfbJames Dong    private native void release() throws IllegalStateException, RuntimeException;
39909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
399105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma    /*
399205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma     * Clear the preview surface
399305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma     */
39941ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma    private native void nativeClearSurface(Surface surface);
39959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
39969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
39979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Stops the encoding. This method should only be called after encoding has
39989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * started using method <code> startEncoding</code>
39999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
40009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws IllegalStateException if the method could not be called
40019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
400298dcca909a44e527ca3a187b13cd1e49a328cbfbJames Dong    private native void stopEncoding() throws IllegalStateException, RuntimeException;
40039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
40049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
40059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private native void _init(String tempPath, String libraryPath)
40069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throws IllegalArgumentException, IllegalStateException, RuntimeException;
40079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
40089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private native void nativeStartPreview(Surface mSurface, long fromMs, long toMs,
40099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int callbackAfterFrameCount, boolean loop) throws IllegalArgumentException,
40109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            IllegalStateException, RuntimeException;
40119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
40122bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi    private native void nativePopulateSettings(EditSettings editSettings,
40139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            PreviewClipProperties mProperties, AudioSettings mAudioSettings)
40149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    throws IllegalArgumentException, IllegalStateException, RuntimeException;
40159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
40169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private native int nativeRenderPreviewFrame(Surface mSurface, long timeMs,
40179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                                 int surfaceWidth, int surfaceHeight)
40189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                                 throws IllegalArgumentException,
40199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                                                 IllegalStateException, RuntimeException;
40209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
40219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private native int nativeRenderMediaItemPreviewFrame(Surface mSurface, String filepath,
40229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int framewidth, int frameheight, int surfacewidth, int surfaceheight, long timeMs)
40239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    throws IllegalArgumentException, IllegalStateException, RuntimeException;
40249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
4025df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhava    private native int nativeStopPreview();
40269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
402798dcca909a44e527ca3a187b13cd1e49a328cbfbJames Dong    private native int nativeGenerateAudioGraph(String pcmFilePath, String outGraphPath,
40289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            int frameDuration, int channels, int sampleCount);
40299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
403098dcca909a44e527ca3a187b13cd1e49a328cbfbJames Dong    private native int nativeGenerateRawAudio(String InFileName, String PCMFileName);
40319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
403298dcca909a44e527ca3a187b13cd1e49a328cbfbJames Dong    private native int nativeGenerateClip(EditSettings editSettings)
40339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    throws IllegalArgumentException, IllegalStateException, RuntimeException;
40349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
40359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava}
4036