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