Merge "Fix issue 3408285 Crash while generating KenBurns" into honeycomb
diff --git a/build/phone-hdpi-512-dalvik-heap.mk b/build/phone-hdpi-512-dalvik-heap.mk
index 630cf03..788b686 100644
--- a/build/phone-hdpi-512-dalvik-heap.mk
+++ b/build/phone-hdpi-512-dalvik-heap.mk
@@ -19,5 +19,5 @@
PRODUCT_PROPERTY_OVERRIDES += \
dalvik.vm.heapstartsize=5m \
- dalvik.vm.growthlimit=32m \
+ dalvik.vm.heapgrowthlimit=32m \
dalvik.vm.heapsize=128m
diff --git a/build/tablet-dalvik-heap.mk b/build/tablet-dalvik-heap.mk
index 37c3ec5..826a380 100644
--- a/build/tablet-dalvik-heap.mk
+++ b/build/tablet-dalvik-heap.mk
@@ -18,5 +18,5 @@
PRODUCT_PROPERTY_OVERRIDES += \
dalvik.vm.heapstartsize=5m \
- dalvik.vm.growthlimit=48m \
+ dalvik.vm.heapgrowthlimit=48m \
dalvik.vm.heapsize=256m
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index d3913dc..393412f 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -73,7 +73,6 @@
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
import java.util.WeakHashMap;
/**
@@ -2375,6 +2374,7 @@
})
int mLayerType = LAYER_TYPE_NONE;
Paint mLayerPaint;
+ Rect mLocalDirtyRect;
/**
* Simple constructor to use when creating a view from code.
@@ -8173,7 +8173,9 @@
}
mLayerType = layerType;
- mLayerPaint = mLayerType == LAYER_TYPE_NONE ? null : (paint == null ? new Paint() : paint);
+ final boolean layerDisabled = mLayerType == LAYER_TYPE_NONE;
+ mLayerPaint = layerDisabled ? null : (paint == null ? new Paint() : paint);
+ mLocalDirtyRect = layerDisabled ? null : new Rect();
invalidateParentCaches();
invalidate(true);
@@ -8228,8 +8230,7 @@
mAttachInfo.mHardwareCanvas = canvas;
try {
canvas.setViewport(width, height);
- // TODO: We should pass the dirty rect
- canvas.onPreDraw(null);
+ canvas.onPreDraw(mLocalDirtyRect);
final int restoreCount = canvas.save();
@@ -8251,6 +8252,7 @@
canvas.onPostDraw();
mHardwareLayer.end(currentCanvas);
mAttachInfo.mHardwareCanvas = currentCanvas;
+ mLocalDirtyRect.setEmpty();
}
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index edfef769..09e1d89 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -3487,16 +3487,19 @@
if (child.mLayerType != LAYER_TYPE_NONE) {
mPrivateFlags |= INVALIDATED;
mPrivateFlags &= ~DRAWING_CACHE_VALID;
+ child.mLocalDirtyRect.setEmpty();
}
do {
View view = null;
if (parent instanceof View) {
view = (View) parent;
- if (view.mLayerType != LAYER_TYPE_NONE &&
- view.getParent() instanceof View) {
- final View grandParent = (View) view.getParent();
- grandParent.mPrivateFlags |= INVALIDATED;
- grandParent.mPrivateFlags &= ~DRAWING_CACHE_VALID;
+ if (view.mLayerType != LAYER_TYPE_NONE) {
+ view.mLocalDirtyRect.setEmpty();
+ if (view.getParent() instanceof View) {
+ final View grandParent = (View) view.getParent();
+ grandParent.mPrivateFlags |= INVALIDATED;
+ grandParent.mPrivateFlags &= ~DRAWING_CACHE_VALID;
+ }
}
if ((view.mPrivateFlags & DIRTY_MASK) != 0) {
// already marked dirty - we're done
@@ -3534,6 +3537,12 @@
// Make sure we do not set both flags at the same time
int opaqueFlag = isOpaque ? DIRTY_OPAQUE : DIRTY;
+ if (child.mLayerType != LAYER_TYPE_NONE) {
+ mPrivateFlags |= INVALIDATED;
+ mPrivateFlags &= ~DRAWING_CACHE_VALID;
+ child.mLocalDirtyRect.union(dirty);
+ }
+
final int[] location = attachInfo.mInvalidateChildLocation;
location[CHILD_LEFT_INDEX] = child.mLeft;
location[CHILD_TOP_INDEX] = child.mTop;
@@ -3547,10 +3556,6 @@
(int) (boundingRect.bottom + 0.5f));
}
- if (child.mLayerType != LAYER_TYPE_NONE) {
- mPrivateFlags |= INVALIDATED;
- mPrivateFlags &= ~DRAWING_CACHE_VALID;
- }
do {
View view = null;
if (parent instanceof View) {
@@ -3631,6 +3636,10 @@
location[CHILD_LEFT_INDEX] = left;
location[CHILD_TOP_INDEX] = top;
+ if (mLayerType != LAYER_TYPE_NONE) {
+ mLocalDirtyRect.union(dirty);
+ }
+
return mParent;
}
} else {
@@ -3639,8 +3648,11 @@
location[CHILD_LEFT_INDEX] = mLeft;
location[CHILD_TOP_INDEX] = mTop;
- dirty.set(0, 0, mRight - location[CHILD_LEFT_INDEX],
- mBottom - location[CHILD_TOP_INDEX]);
+ dirty.set(0, 0, mRight - mLeft, mBottom - mTop);
+
+ if (mLayerType != LAYER_TYPE_NONE) {
+ mLocalDirtyRect.union(dirty);
+ }
return mParent;
}
diff --git a/core/res/res/drawable-hdpi/ic_emergency.png b/core/res/res/drawable-hdpi/ic_emergency.png
index b4465ff..89c05e3 100644
--- a/core/res/res/drawable-hdpi/ic_emergency.png
+++ b/core/res/res/drawable-hdpi/ic_emergency.png
Binary files differ
diff --git a/data/sounds/alarms/ogg/Cesium.ogg b/data/sounds/alarms/ogg/Cesium.ogg
index 76eca08..a8c379a 100644
--- a/data/sounds/alarms/ogg/Cesium.ogg
+++ b/data/sounds/alarms/ogg/Cesium.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/LowBattery.ogg b/data/sounds/effects/ogg/LowBattery.ogg
index c21218c..dfb5d88 100644
--- a/data/sounds/effects/ogg/LowBattery.ogg
+++ b/data/sounds/effects/ogg/LowBattery.ogg
Binary files differ
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index 691f649..7379b63 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -16,8 +16,11 @@
#define LOG_TAG "OpenGLRenderer"
+#include <ui/Rect.h>
+
#include "LayerRenderer.h"
#include "Properties.h"
+#include "Rect.h"
namespace android {
namespace uirenderer {
@@ -30,12 +33,25 @@
LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->fbo);
#if RENDER_LAYERS_AS_REGIONS
- mLayer->region.clear();
+ Rect dirty(left, top, right, bottom);
+ if (dirty.isEmpty() || (dirty.left <= 0 && dirty.top <= 0 &&
+ dirty.right >= mLayer->width && dirty.bottom >= mLayer->height)) {
+ mLayer->region.clear();
+ dirty.set(0.0f, 0.0f, mLayer->width, mLayer->height);
+ } else {
+ dirty.intersect(0.0f, 0.0f, mLayer->width, mLayer->height);
+ android::Rect r(dirty.left, dirty.top, dirty.right, dirty.bottom);
+ mLayer->region.subtractSelf(r);
+ }
#endif
glBindFramebuffer(GL_FRAMEBUFFER, mLayer->fbo);
+#if RENDER_LAYERS_AS_REGIONS
+ OpenGLRenderer::prepareDirty(dirty.left, dirty.top, dirty.right, dirty.bottom, opaque);
+#else
OpenGLRenderer::prepareDirty(0.0f, 0.0f, mLayer->width, mLayer->height, opaque);
+#endif
}
void LayerRenderer::finish() {
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 2960395..90d6ea1 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -671,25 +671,7 @@
finishDrawTexture();
#if DEBUG_LAYERS_AS_REGIONS
- uint32_t colors[] = {
- 0x7fff0000, 0x7f00ff00,
- 0x7f0000ff, 0x7fff00ff,
- };
-
- int offset = 0;
- int32_t top = rects[0].top;
- int i = 0;
-
- for (size_t i = 0; i < count; i++) {
- if (top != rects[i].top) {
- offset ^= 0x2;
- top = rects[i].top;
- }
-
- Rect r(rects[i].left, rects[i].top, rects[i].right, rects[i].bottom);
- drawColorRect(r.left, r.top, r.right, r.bottom, colors[offset + (i & 0x1)],
- SkXfermode::kSrcOver_Mode);
- }
+ drawRegionRects(layer->region);
#endif
layer->region.clear();
@@ -699,6 +681,32 @@
#endif
}
+void OpenGLRenderer::drawRegionRects(const Region& region) {
+#if DEBUG_LAYERS_AS_REGIONS
+ size_t count;
+ const android::Rect* rects = region.getArray(&count);
+
+ uint32_t colors[] = {
+ 0x7fff0000, 0x7f00ff00,
+ 0x7f0000ff, 0x7fff00ff,
+ };
+
+ int offset = 0;
+ int32_t top = rects[0].top;
+
+ for (size_t i = 0; i < count; i++) {
+ if (top != rects[i].top) {
+ offset ^= 0x2;
+ top = rects[i].top;
+ }
+
+ Rect r(rects[i].left, rects[i].top, rects[i].right, rects[i].bottom);
+ drawColorRect(r.left, r.top, r.right, r.bottom, colors[offset + (i & 0x1)],
+ SkXfermode::kSrcOver_Mode);
+ }
+#endif
+}
+
void OpenGLRenderer::dirtyLayer(const float left, const float top,
const float right, const float bottom, const mat4 transform) {
#if RENDER_LAYERS_AS_REGIONS
@@ -1626,6 +1634,10 @@
GL_UNSIGNED_SHORT, layer->meshIndices);
finishDrawTexture();
+
+#if DEBUG_LAYERS_AS_REGIONS
+ drawRegionRects(layer->region);
+#endif
}
}
#else
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 64def03..7bbf034 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -455,6 +455,8 @@
void setupDrawMesh(GLvoid* vertices, GLvoid* texCoords = NULL, GLuint vbo = 0);
void finishDrawTexture();
+ void drawRegionRects(const Region& region);
+
/**
* Should be invoked every time the glScissor is modified.
*/
diff --git a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
index b8d1ca7..b9105cb 100644
--- a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
+++ b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
@@ -2064,6 +2064,20 @@
effectSettings.alphaBlendingFadeInTimePercent = 100;
effectSettings.alphaBlendingFadeOutTimePercent = 100;
effectSettings.framingBuffer = null;
+
+ /*
+ * Set the resized RGB file dimensions
+ */
+ effectSettings.width = overlay.getResizedRGBSizeWidth();
+ if(effectSettings.width == 0) {
+ effectSettings.width = bitmap.getWidth();
+ }
+
+ effectSettings.height = overlay.getResizedRGBSizeHeight();
+ if(effectSettings.height == 0) {
+ effectSettings.height = bitmap.getHeight();
+ }
+
}
effectSettings.topLeftX = 0;
@@ -2098,6 +2112,11 @@
return effectSettings;
}
+ /* get Video Editor aspect ratio */
+ int nativeHelperGetAspectRatio() {
+ return mVideoEditor.getAspectRatio();
+ }
+
/**
* Sets the audio regenerate flag
*
diff --git a/media/java/android/media/videoeditor/MediaItem.java b/media/java/android/media/videoeditor/MediaItem.java
index e3ef599..dfe0bae 100755
--- a/media/java/android/media/videoeditor/MediaItem.java
+++ b/media/java/android/media/videoeditor/MediaItem.java
@@ -187,6 +187,10 @@
if (mEndTransition != null) {
mEndTransition.invalidate();
}
+
+ for (Overlay overlay : mOverlays) {
+ ((OverlayFrame)overlay).invalidateGeneratedFiles();
+ }
}
/**
diff --git a/media/java/android/media/videoeditor/OverlayFrame.java b/media/java/android/media/videoeditor/OverlayFrame.java
index 2bb9a1c..131f5f0 100755
--- a/media/java/android/media/videoeditor/OverlayFrame.java
+++ b/media/java/android/media/videoeditor/OverlayFrame.java
@@ -21,15 +21,19 @@
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Bitmap.CompressFormat;
-
import java.io.DataOutputStream;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Bitmap.CompressFormat;
+import android.util.Pair;
+
+
/**
* This class is used to overlay an image on top of a media item.
* {@hide}
@@ -46,6 +50,17 @@
private int mOFHeight;
/**
+ * resized RGB Image dimensions
+ */
+ private int mResizedRGBWidth;
+ private int mResizedRGBHeight;
+
+ /**
+ * The resize paint
+ */
+ private static final Paint sResizePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
+
+ /**
* An object of this type cannot be instantiated by using the default
* constructor
*/
@@ -74,6 +89,8 @@
mBitmap = bitmap;
mFilename = null;
mBitmapFileName = null;
+ mResizedRGBWidth = 0;
+ mResizedRGBHeight = 0;
}
/**
@@ -95,6 +112,8 @@
mBitmapFileName = filename;
mBitmap = BitmapFactory.decodeFile(mBitmapFileName);
mFilename = null;
+ mResizedRGBWidth = 0;
+ mResizedRGBHeight = 0;
}
/**
@@ -182,32 +201,23 @@
mOFHeight = mBitmap.getHeight();
mFilename = path + "/" + "Overlay" + getId() + ".rgb";
- if (!(new File(mFilename).exists())) {
- /**
- * Save the image to a file ; as a rgb
- */
- final FileOutputStream fl = new FileOutputStream(mFilename);
- final DataOutputStream dos = new DataOutputStream(fl);
- /**
- * populate the rgb file with bitmap data
- */
- final int [] framingBuffer = new int[mOFWidth];
- ByteBuffer byteBuffer = ByteBuffer.allocate(framingBuffer.length * 4);
- IntBuffer intBuffer;
+ /* resize and save rgb as per project aspect ratio */
+ MediaArtistNativeHelper nativeHelper = (super.getMediaItem()).getNativeContext();
- byte[] array = byteBuffer.array();
- int tmp = 0;
- while(tmp < mOFHeight) {
- mBitmap.getPixels(framingBuffer,0,mOFWidth,0,tmp,mOFWidth,1);
- intBuffer = byteBuffer.asIntBuffer();
- intBuffer.put(framingBuffer,0,mOFWidth);
- dos.write(array);
- tmp += 1;
- }
- fl.flush();
- fl.close();
- }
+ /* get height and width for story board aspect ratio */
+ final Pair<Integer, Integer> maxResolution;
+ final Pair<Integer, Integer>[] resolutions;
+ resolutions = MediaProperties.getSupportedResolutions(nativeHelper.nativeHelperGetAspectRatio());
+
+ // Get the highest resolution
+ maxResolution = resolutions[resolutions.length - 1];
+
+ /* Generate the rgb file with rendering mode */
+ generateOverlayWithRenderingMode (super.getMediaItem(), this,
+ maxResolution.second /* max Height */ ,
+ maxResolution.first /* max Width */);
+
return mFilename;
}
@@ -238,6 +248,30 @@
void setOverlayFrameWidth(int width) {
mOFWidth = width;
}
+
+ /*
+ * Set the resized RGB widht and height
+ */
+ void setResizedRGBSize(int width, int height) {
+ mResizedRGBWidth = width;
+ mResizedRGBHeight = height;
+ }
+
+ /*
+ * Get the resized RGB Height
+ */
+ int getResizedRGBSizeHeight() {
+ return mResizedRGBHeight;
+ }
+
+ /*
+ * Get the resized RGB Width
+ */
+ int getResizedRGBSizeWidth() {
+ return mResizedRGBWidth;
+ }
+
+
/**
* Delete the overlay files
*/
@@ -257,4 +291,174 @@
mBitmapFileName = null;
}
}
+
+ /**
+ * Delete the overlay related files
+ */
+ void invalidateGeneratedFiles() {
+ if (mFilename != null) {
+ new File(mFilename).delete();
+ mFilename = null;
+ }
+
+ if (mBitmapFileName != null) {
+ new File(mBitmapFileName).delete();
+ mBitmapFileName = null;
+ }
+ }
+
+ void generateOverlayWithRenderingMode (MediaItem mediaItemsList, OverlayFrame overlay, int height , int width)
+ throws FileNotFoundException, IOException {
+
+ final MediaItem t = mediaItemsList;
+
+ /* get the rendering mode */
+ int renderMode = t.getRenderingMode();
+
+ Bitmap overlayBitmap = ((OverlayFrame)overlay).getBitmap();
+
+ /*
+ * Check if the resize of Overlay is needed with rendering mode applied
+ * because of change in export dimensions
+ */
+ int resizedRGBFileHeight = ((OverlayFrame)overlay).getResizedRGBSizeHeight();
+ int resizedRGBFileWidth = ((OverlayFrame)overlay).getResizedRGBSizeWidth();
+
+ /* Get original bitmap width if it is not resized */
+ if(resizedRGBFileWidth == 0) {
+ resizedRGBFileWidth = overlayBitmap.getWidth();
+ }
+ /* Get original bitmap height if it is not resized */
+ if(resizedRGBFileHeight == 0) {
+ resizedRGBFileHeight = overlayBitmap.getHeight();
+ }
+
+ if (resizedRGBFileWidth != width || resizedRGBFileHeight != height
+ || (!(new File(((OverlayFrame)overlay).getFilename()).exists()))) {
+ /*
+ * Create the canvas bitmap
+ */
+ final Bitmap destBitmap = Bitmap.createBitmap((int)width,
+ (int)height,
+ Bitmap.Config.ARGB_8888);
+ final Canvas overlayCanvas = new Canvas(destBitmap);
+ final Rect destRect;
+ final Rect srcRect;
+
+ switch (renderMode) {
+ case MediaItem.RENDERING_MODE_STRETCH: {
+ destRect = new Rect(0, 0, overlayCanvas.getWidth(),
+ overlayCanvas.getHeight());
+ srcRect = new Rect(0, 0, overlayBitmap.getWidth(),
+ overlayBitmap.getHeight());
+ break;
+ }
+
+ case MediaItem.RENDERING_MODE_BLACK_BORDER: {
+ int left, right, top, bottom;
+ float aROverlayImage, aRCanvas;
+ aROverlayImage = (float)(overlayBitmap.getWidth()) /
+ (float)(overlayBitmap.getHeight());
+
+ aRCanvas = (float)(overlayCanvas.getWidth()) /
+ (float)(overlayCanvas.getHeight());
+
+ if (aROverlayImage > aRCanvas) {
+ int newHeight = ((overlayCanvas.getWidth() * overlayBitmap.getHeight())
+ / overlayBitmap.getWidth());
+ left = 0;
+ top = (overlayCanvas.getHeight() - newHeight) / 2;
+ right = overlayCanvas.getWidth();
+ bottom = top + newHeight;
+ } else {
+ int newWidth = ((overlayCanvas.getHeight() * overlayBitmap.getWidth())
+ / overlayBitmap.getHeight());
+ left = (overlayCanvas.getWidth() - newWidth) / 2;
+ top = 0;
+ right = left + newWidth;
+ bottom = overlayCanvas.getHeight();
+ }
+
+ destRect = new Rect(left, top, right, bottom);
+ srcRect = new Rect(0, 0, overlayBitmap.getWidth(), overlayBitmap.getHeight());
+ break;
+ }
+
+ case MediaItem.RENDERING_MODE_CROPPING: {
+ // Calculate the source rect
+ int left, right, top, bottom;
+ float aROverlayImage, aRCanvas;
+ aROverlayImage = (float)(overlayBitmap.getWidth()) /
+ (float)(overlayBitmap.getHeight());
+ aRCanvas = (float)(overlayCanvas.getWidth()) /
+ (float)(overlayCanvas.getHeight());
+ if (aROverlayImage < aRCanvas) {
+ int newHeight = ((overlayBitmap.getWidth() * overlayCanvas.getHeight())
+ / overlayCanvas.getWidth());
+
+ left = 0;
+ top = (overlayBitmap.getHeight() - newHeight) / 2;
+ right = overlayBitmap.getWidth();
+ bottom = top + newHeight;
+ } else {
+ int newWidth = ((overlayBitmap.getHeight() * overlayCanvas.getWidth())
+ / overlayCanvas.getHeight());
+ left = (overlayBitmap.getWidth() - newWidth) / 2;
+ top = 0;
+ right = left + newWidth;
+ bottom = overlayBitmap.getHeight();
+ }
+
+ srcRect = new Rect(left, top, right, bottom);
+ destRect = new Rect(0, 0, overlayCanvas.getWidth(), overlayCanvas.getHeight());
+ break;
+ }
+
+ default: {
+ throw new IllegalStateException("Rendering mode: " + renderMode);
+ }
+ }
+
+ overlayCanvas.drawBitmap(overlayBitmap, srcRect, destRect, sResizePaint);
+
+ /*
+ * Write to the dest file
+ */
+ String outFileName = ((OverlayFrame)overlay).getFilename();
+
+ /*
+ * Save the image to same rgb file
+ */
+ if (outFileName != null) {
+ new File(outFileName).delete();
+ }
+
+ final FileOutputStream fl = new FileOutputStream(outFileName);
+ final DataOutputStream dos = new DataOutputStream(fl);
+
+ /*
+ * Populate the rgb file with bitmap data
+ */
+ final int [] framingBuffer = new int[width];
+ ByteBuffer byteBuffer = ByteBuffer.allocate(framingBuffer.length * 4);
+ IntBuffer intBuffer;
+
+ byte[] array = byteBuffer.array();
+ int tmp = 0;
+ while(tmp < height) {
+ destBitmap.getPixels(framingBuffer,0,width,0,tmp,width,1);
+ intBuffer = byteBuffer.asIntBuffer();
+ intBuffer.put(framingBuffer,0,width);
+ dos.write(array);
+ tmp += 1;
+ }
+ fl.flush();
+ fl.close();
+
+ /*
+ * Set the resized RGB width and height
+ */
+ ((OverlayFrame)overlay).setResizedRGBSize(width, height);
+ }
+ }
}
diff --git a/media/java/android/media/videoeditor/VideoEditorImpl.java b/media/java/android/media/videoeditor/VideoEditorImpl.java
index 8bbd8e8..7608c05 100755
--- a/media/java/android/media/videoeditor/VideoEditorImpl.java
+++ b/media/java/android/media/videoeditor/VideoEditorImpl.java
@@ -109,6 +109,8 @@
private static final String ATTR_OVERLAY_RGB_FILENAME = "overlay_rgb_filename";
private static final String ATTR_OVERLAY_FRAME_WIDTH = "overlay_frame_width";
private static final String ATTR_OVERLAY_FRAME_HEIGHT = "overlay_frame_height";
+ private static final String ATTR_OVERLAY_RESIZED_RGB_FRAME_WIDTH = "resized_RGBframe_width";
+ private static final String ATTR_OVERLAY_RESIZED_RGB_FRAME_HEIGHT = "resized_RGBframe_height";
/*
* Instance variables
@@ -867,7 +869,6 @@
mMANativeHelper.unlock();
}
}
-Log.i("VE_IMPL","renderPreviewFrame <--");
return result;
}
@@ -1154,6 +1155,15 @@
((OverlayFrame)overlay).setOverlayFrameWidth(overlayFrameWidth);
((OverlayFrame)overlay).setOverlayFrameHeight(overlayFrameHeight);
+
+ final int resizedRGBFrameWidth =
+ Integer.parseInt(parser.getAttributeValue("",
+ ATTR_OVERLAY_RESIZED_RGB_FRAME_WIDTH));
+ final int resizedRGBFrameHeight =
+ Integer.parseInt(parser.getAttributeValue("",
+ ATTR_OVERLAY_RESIZED_RGB_FRAME_HEIGHT));
+
+ ((OverlayFrame)overlay).setResizedRGBSize(resizedRGBFrameWidth, resizedRGBFrameHeight);
}
return overlay;
@@ -1340,6 +1350,11 @@
Integer.toString(overlayFrame.getOverlayFrameWidth()));
serializer.attribute("", ATTR_OVERLAY_FRAME_HEIGHT,
Integer.toString(overlayFrame.getOverlayFrameHeight()));
+ serializer.attribute("", ATTR_OVERLAY_RESIZED_RGB_FRAME_WIDTH,
+ Integer.toString(overlayFrame.getResizedRGBSizeWidth()));
+ serializer.attribute("", ATTR_OVERLAY_RESIZED_RGB_FRAME_HEIGHT,
+ Integer.toString(overlayFrame.getResizedRGBSizeHeight()));
+
}
}
@@ -1524,6 +1539,17 @@
for (Transition transition : mTransitions) {
transition.invalidate();
}
+
+ final Iterator<MediaItem> it = mMediaItems.iterator();
+
+ while (it.hasNext()) {
+ final MediaItem t = it.next();
+ List<Overlay> overlayList = t.getAllOverlays();
+ for (Overlay overlay : overlayList) {
+
+ ((OverlayFrame)overlay).invalidateGeneratedFiles();
+ }
+ }
}
/*