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 Madhava
189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavapackage android.media.videoeditor;
199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.io.File;
219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.io.FileNotFoundException;
229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.io.FileOutputStream;
239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.io.IOException;
2463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhavaimport java.io.DataOutputStream;
2563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhavaimport java.nio.ByteBuffer;
2663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhavaimport java.nio.IntBuffer;
279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhavaimport android.graphics.Canvas;
2963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhavaimport android.graphics.Paint;
3063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhavaimport android.graphics.Rect;
319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.graphics.Bitmap;
329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.graphics.BitmapFactory;
339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport android.graphics.Bitmap.CompressFormat;
3463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhavaimport android.util.Pair;
359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava/**
389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * This class is used to overlay an image on top of a media item.
399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * {@hide}
409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */
419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavapublic class OverlayFrame extends Overlay {
429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *  Instance variables
449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private Bitmap mBitmap;
469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private String mFilename;
479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private String mBitmapFileName;
489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private int mOFWidth;
509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private int mOFHeight;
519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
5363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     * resized RGB Image dimensions
5463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     */
5563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    private int mResizedRGBWidth;
5663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    private int mResizedRGBHeight;
5763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
5863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    /**
5963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     *  The resize paint
6063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     */
6163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    private static final Paint sResizePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
6263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
6363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    /**
649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * An object of this type cannot be instantiated by using the default
659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * constructor
669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    @SuppressWarnings("unused")
689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private OverlayFrame() {
699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        this(null, null, (String)null, 0, 0);
709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Constructor for an OverlayFrame
749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param mediaItem The media item owner
769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param overlayId The overlay id
779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param bitmap The bitmap to be used as an overlay. The size of the
789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *      bitmap must equal to the size of the media item to which it is
799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *      added. The bitmap is typically a decoded PNG file.
809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param startTimeMs The overlay start time in milliseconds
819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param durationMs The overlay duration in milliseconds
829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws IllegalArgumentException if the file type is not PNG or the
849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *      startTimeMs and durationMs are incorrect.
859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public OverlayFrame(MediaItem mediaItem, String overlayId, Bitmap bitmap,
879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                        long startTimeMs,long durationMs) {
889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        super(mediaItem, overlayId, startTimeMs, durationMs);
899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mBitmap = bitmap;
909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mFilename = null;
919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mBitmapFileName = null;
9263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        mResizedRGBWidth = 0;
9363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        mResizedRGBHeight = 0;
949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Constructor for an OverlayFrame. This constructor can be used to
989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * restore the overlay after it was saved internally by the video editor.
999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param mediaItem The media item owner
1019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param overlayId The overlay id
1029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param filename The file name that contains the overlay.
1039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param startTimeMs The overlay start time in milliseconds
1049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param durationMs The overlay duration in milliseconds
1059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws IllegalArgumentException if the file type is not PNG or the
1079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *      startTimeMs and durationMs are incorrect.
1089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    OverlayFrame(MediaItem mediaItem, String overlayId, String filename,
1109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava                 long startTimeMs,long durationMs) {
1119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        super(mediaItem, overlayId, startTimeMs, durationMs);
1129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mBitmapFileName = filename;
1139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mBitmap = BitmapFactory.decodeFile(mBitmapFileName);
1149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mFilename = null;
11563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        mResizedRGBWidth = 0;
11663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        mResizedRGBHeight = 0;
1179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the overlay bitmap.
1219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return Get the overlay bitmap
1239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public Bitmap getBitmap() {
1259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mBitmap;
1269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the overlay bitmap.
1309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return Get the overlay bitmap as png file.
1329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    String getBitmapImageFileName() {
1349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mBitmapFileName;
1359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Set the overlay bitmap.
1389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param bitmap The overlay bitmap.
1409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public void setBitmap(Bitmap bitmap) {
1422bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        getMediaItem().getNativeContext().setGeneratePreview(true);
1432bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
1442bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        invalidate();
1452bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
1469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mBitmap = bitmap;
1479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mFilename != null) {
1489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            /**
1499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava             *  Delete the file
1509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava             */
1519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            new File(mFilename).delete();
1529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            /**
1539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava             *  Invalidate the filename
1549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava             */
1559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mFilename = null;
1569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
1579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        /**
1599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         *  Invalidate the transitions if necessary
1609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         */
1619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        getMediaItem().invalidateTransitions(mStartTimeMs, mDurationMs);
1629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the file name of this overlay
1669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    String getFilename() {
1689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mFilename;
1699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /*
1729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Set the file name of this overlay
1739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    void setFilename(String filename) {
1759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mFilename = filename;
1769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Save the overlay to the project folder
1799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param path The path where the overlay will be saved
1819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The filename
1839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws FileNotFoundException if the bitmap cannot be saved
1849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws IOException if the bitmap file cannot be saved
1859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    String save(String path) throws FileNotFoundException, IOException {
1879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mFilename != null) {
1889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return mFilename;
1899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
1909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        // Create the compressed PNG file
1929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mBitmapFileName = path + "/" + "Overlay" + getId() + ".png";
1939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (!(new File(mBitmapFileName).exists())) {
1949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            final FileOutputStream out = new FileOutputStream (mBitmapFileName);
1959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mBitmap.compress(CompressFormat.PNG, 100, out);
1969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            out.flush();
1979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            out.close();
1989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
1999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mOFWidth = mBitmap.getWidth();
2019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mOFHeight = mBitmap.getHeight();
2029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mFilename = path + "/" + "Overlay" + getId() + ".rgb";
2049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
20563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        /* resize and save rgb as per project aspect ratio */
20663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        MediaArtistNativeHelper nativeHelper = (super.getMediaItem()).getNativeContext();
20763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
20863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        /* get height and width for story board aspect ratio */
20963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        final Pair<Integer, Integer> maxResolution;
21063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        final Pair<Integer, Integer>[] resolutions;
21163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        resolutions = MediaProperties.getSupportedResolutions(nativeHelper.nativeHelperGetAspectRatio());
21263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
21363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        // Get the highest resolution
21463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        maxResolution = resolutions[resolutions.length - 1];
21563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
21663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        /* Generate the rgb file with rendering mode */
21763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        generateOverlayWithRenderingMode (super.getMediaItem(), this,
21863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                maxResolution.second /* max Height */ ,
21963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                maxResolution.first /* max Width */);
2209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mFilename;
2229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
2239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
2259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the OverlayFrame Height
2269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
2279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     int getOverlayFrameHeight() {
2289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         return mOFHeight;
2299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     }
2309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     /**
2329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the OverlayFrame Width
2339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
2349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     int getOverlayFrameWidth() {
2359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         return mOFWidth;
2369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     }
2379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /*
2399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Set the OverlayFrame Height
2409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
2419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     void setOverlayFrameHeight(int height) {
2429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         mOFHeight = height;
2439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     }
2449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /*
2469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Set the OverlayFrame Width
2479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
2489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     void setOverlayFrameWidth(int width) {
2499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava         mOFWidth = width;
2509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     }
25163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
25263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    /*
25363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     * Set the resized RGB widht and height
25463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     */
25563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     void setResizedRGBSize(int width, int height) {
25663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        mResizedRGBWidth = width;
25763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        mResizedRGBHeight = height;
25863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     }
25963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
26063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    /*
26163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     * Get the resized RGB Height
26263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     */
26363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     int getResizedRGBSizeHeight() {
26463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava         return mResizedRGBHeight;
26563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     }
26663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
26763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    /*
26863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     * Get the resized RGB Width
26963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     */
27063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     int getResizedRGBSizeWidth() {
27163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava         return mResizedRGBWidth;
27263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     }
27363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
27463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
2759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
27673f376cf6446c607b6f0355ad8282dd47608346dSantosh Madhava     * Delete the overlay files
2779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
2789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    void invalidate() {
2792bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        if (mBitmap != null) {
2802bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mBitmap.recycle();
2812bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi            mBitmap = null;
2822bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        }
2832bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
2849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mFilename != null) {
2859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            new File(mFilename).delete();
2869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            mFilename = null;
2879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
2882bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
28973f376cf6446c607b6f0355ad8282dd47608346dSantosh Madhava        if (mBitmapFileName != null) {
29073f376cf6446c607b6f0355ad8282dd47608346dSantosh Madhava            new File(mBitmapFileName).delete();
29173f376cf6446c607b6f0355ad8282dd47608346dSantosh Madhava            mBitmapFileName = null;
29273f376cf6446c607b6f0355ad8282dd47608346dSantosh Madhava        }
2939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
29463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
29563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     /**
29663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     * Delete the overlay related files
29763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava     */
29863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    void invalidateGeneratedFiles() {
29963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        if (mFilename != null) {
30063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            new File(mFilename).delete();
30163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            mFilename = null;
30263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        }
30363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
30463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        if (mBitmapFileName != null) {
30563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            new File(mBitmapFileName).delete();
30663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            mBitmapFileName = null;
30763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        }
30863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    }
30963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
31063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    void generateOverlayWithRenderingMode (MediaItem mediaItemsList, OverlayFrame overlay, int height , int width)
31163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        throws FileNotFoundException, IOException {
31263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
31363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        final MediaItem t = mediaItemsList;
31463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
31563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        /* get the rendering mode */
31663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        int renderMode = t.getRenderingMode();
31763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
31863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        Bitmap overlayBitmap = ((OverlayFrame)overlay).getBitmap();
31963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
32063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        /*
32163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava         * Check if the resize of Overlay is needed with rendering mode applied
32263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava         * because of change in export dimensions
32363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava         */
32463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        int resizedRGBFileHeight = ((OverlayFrame)overlay).getResizedRGBSizeHeight();
32563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        int resizedRGBFileWidth = ((OverlayFrame)overlay).getResizedRGBSizeWidth();
32663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
32763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        /* Get original bitmap width if it is not resized */
32863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        if(resizedRGBFileWidth == 0) {
32963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            resizedRGBFileWidth = overlayBitmap.getWidth();
33063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        }
33163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        /* Get original bitmap height if it is not resized */
33263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        if(resizedRGBFileHeight == 0) {
33363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            resizedRGBFileHeight = overlayBitmap.getHeight();
33463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        }
33563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
33663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        if (resizedRGBFileWidth != width || resizedRGBFileHeight != height
33763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            || (!(new File(((OverlayFrame)overlay).getFilename()).exists()))) {
33863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            /*
33963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             *  Create the canvas bitmap
34063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             */
34163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            final Bitmap destBitmap = Bitmap.createBitmap((int)width,
34263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                                      (int)height,
34363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                                      Bitmap.Config.ARGB_8888);
34463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            final Canvas overlayCanvas = new Canvas(destBitmap);
34563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            final Rect destRect;
34663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            final Rect srcRect;
34763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
34863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            switch (renderMode) {
34963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                case MediaItem.RENDERING_MODE_STRETCH: {
35063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    destRect = new Rect(0, 0, overlayCanvas.getWidth(),
35163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                             overlayCanvas.getHeight());
35263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    srcRect = new Rect(0, 0, overlayBitmap.getWidth(),
35363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                             overlayBitmap.getHeight());
35463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    break;
35563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                }
35663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
35763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                case MediaItem.RENDERING_MODE_BLACK_BORDER: {
35863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    int left, right, top, bottom;
35963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    float aROverlayImage, aRCanvas;
36063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    aROverlayImage = (float)(overlayBitmap.getWidth()) /
36163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                     (float)(overlayBitmap.getHeight());
36263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
36363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    aRCanvas = (float)(overlayCanvas.getWidth()) /
36463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                     (float)(overlayCanvas.getHeight());
36563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
36663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    if (aROverlayImage > aRCanvas) {
36763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        int newHeight = ((overlayCanvas.getWidth() * overlayBitmap.getHeight())
36863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                         / overlayBitmap.getWidth());
36963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        left = 0;
37063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        top  = (overlayCanvas.getHeight() - newHeight) / 2;
37163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        right = overlayCanvas.getWidth();
37263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        bottom = top + newHeight;
37363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    } else {
37463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        int newWidth = ((overlayCanvas.getHeight() * overlayBitmap.getWidth())
37563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                            / overlayBitmap.getHeight());
37663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        left = (overlayCanvas.getWidth() - newWidth) / 2;
37763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        top  = 0;
37863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        right = left + newWidth;
37963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        bottom = overlayCanvas.getHeight();
38063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    }
38163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
38263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    destRect = new Rect(left, top, right, bottom);
38363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    srcRect = new Rect(0, 0, overlayBitmap.getWidth(), overlayBitmap.getHeight());
38463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    break;
38563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                }
38663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
38763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                case MediaItem.RENDERING_MODE_CROPPING: {
38863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    // Calculate the source rect
38963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    int left, right, top, bottom;
39063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    float aROverlayImage, aRCanvas;
39163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    aROverlayImage = (float)(overlayBitmap.getWidth()) /
39263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                     (float)(overlayBitmap.getHeight());
39363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    aRCanvas = (float)(overlayCanvas.getWidth()) /
39463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                    (float)(overlayCanvas.getHeight());
39563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    if (aROverlayImage < aRCanvas) {
39663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        int newHeight = ((overlayBitmap.getWidth() * overlayCanvas.getHeight())
39763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                   / overlayCanvas.getWidth());
39863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
39963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        left = 0;
40063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        top  = (overlayBitmap.getHeight() - newHeight) / 2;
40163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        right = overlayBitmap.getWidth();
40263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        bottom = top + newHeight;
40363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    } else {
40463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        int newWidth = ((overlayBitmap.getHeight() * overlayCanvas.getWidth())
40563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                                    / overlayCanvas.getHeight());
40663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        left = (overlayBitmap.getWidth() - newWidth) / 2;
40763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        top  = 0;
40863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        right = left + newWidth;
40963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                        bottom = overlayBitmap.getHeight();
41063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    }
41163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
41263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    srcRect = new Rect(left, top, right, bottom);
41363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    destRect = new Rect(0, 0, overlayCanvas.getWidth(), overlayCanvas.getHeight());
41463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    break;
41563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                }
41663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
41763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                default: {
41863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                    throw new IllegalStateException("Rendering mode: " + renderMode);
41963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                }
42063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            }
42163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
42263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            overlayCanvas.drawBitmap(overlayBitmap, srcRect, destRect, sResizePaint);
4236311d0a079702b29984c0d31937345be105e1a5eDianne Hackborn            overlayCanvas.setBitmap(null);
42463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
42563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            /*
42663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             * Write to the dest file
42763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             */
42863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            String outFileName = ((OverlayFrame)overlay).getFilename();
42963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
43063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            /*
43163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             * Save the image to same rgb file
43263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             */
43363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            if (outFileName != null) {
43463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                new File(outFileName).delete();
43563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            }
43663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
43763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            final FileOutputStream fl = new FileOutputStream(outFileName);
43863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            final DataOutputStream dos = new DataOutputStream(fl);
43963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
44063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            /*
44163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             * Populate the rgb file with bitmap data
44263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             */
44363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            final int [] framingBuffer = new int[width];
44463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            ByteBuffer byteBuffer = ByteBuffer.allocate(framingBuffer.length * 4);
44563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            IntBuffer intBuffer;
44663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
44763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            byte[] array = byteBuffer.array();
44863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            int tmp = 0;
44963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            while(tmp < height) {
45063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                destBitmap.getPixels(framingBuffer,0,width,0,tmp,width,1);
45163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                intBuffer = byteBuffer.asIntBuffer();
45263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                intBuffer.put(framingBuffer,0,width);
45363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                dos.write(array);
45463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava                tmp += 1;
45563298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            }
45663298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            fl.flush();
45763298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            fl.close();
45863298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava
45963298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            /*
46063298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             * Set the resized RGB width and height
46163298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava             */
46263298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava            ((OverlayFrame)overlay).setResizedRGBSize(width, height);
46363298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava        }
46463298a980930c81754ab4fb7849a4ff61088d864Santosh Madhava    }
4659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava}
466