summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dharmaray Kundargi <dharmaray@google.com> 2011-01-31 19:01:13 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2011-01-31 19:01:13 -0800
commit327549f9961b8cd562d1a92c1455005672aa2b95 (patch)
tree4cf1f7d5235b2b91b8345966f40fc503f40d3f43
parentaece15a89e4aa3bf55a4fad55852ffb6be7b6ad8 (diff)
parenta573b563b3c6a3edc60393543dc9adb7ade4f188 (diff)
Merge "Fix issue 3408285. Fix issue in Thread safe in Java." into honeycomb
-rwxr-xr-xmedia/java/android/media/videoeditor/AudioTrack.java2
-rwxr-xr-xmedia/java/android/media/videoeditor/Effect.java3
-rwxr-xr-xmedia/java/android/media/videoeditor/EffectKenBurns.java30
-rwxr-xr-xmedia/java/android/media/videoeditor/MediaItem.java16
-rwxr-xr-xmedia/java/android/media/videoeditor/VideoEditor.java4
-rwxr-xr-xmedia/java/android/media/videoeditor/VideoEditorImpl.java34
6 files changed, 35 insertions, 54 deletions
diff --git a/media/java/android/media/videoeditor/AudioTrack.java b/media/java/android/media/videoeditor/AudioTrack.java
index eeace133be66..b2f547b0deee 100755
--- a/media/java/android/media/videoeditor/AudioTrack.java
+++ b/media/java/android/media/videoeditor/AudioTrack.java
@@ -402,11 +402,11 @@ public class AudioTrack {
*/
public void enableLoop() {
if (!mLoop) {
- mLoop = true;
/**
* Force update of preview settings
*/
mMANativeHelper.setGeneratePreview(true);
+ mLoop = true;
}
}
diff --git a/media/java/android/media/videoeditor/Effect.java b/media/java/android/media/videoeditor/Effect.java
index c6b0839a4bfa..2f7ae03c7813 100755
--- a/media/java/android/media/videoeditor/Effect.java
+++ b/media/java/android/media/videoeditor/Effect.java
@@ -102,6 +102,8 @@ public abstract class Effect {
throw new IllegalArgumentException("Duration is too large");
}
+ getMediaItem().getNativeContext().setGeneratePreview(true);
+
final long oldDurationMs = mDurationMs;
mDurationMs = durationMs;
@@ -156,6 +158,7 @@ public abstract class Effect {
throw new IllegalArgumentException("Invalid start time or duration");
}
+ getMediaItem().getNativeContext().setGeneratePreview(true);
final long oldStartTimeMs = mStartTimeMs;
final long oldDurationMs = mDurationMs;
diff --git a/media/java/android/media/videoeditor/EffectKenBurns.java b/media/java/android/media/videoeditor/EffectKenBurns.java
index 66c9e86079a3..9ef458b09045 100755
--- a/media/java/android/media/videoeditor/EffectKenBurns.java
+++ b/media/java/android/media/videoeditor/EffectKenBurns.java
@@ -57,21 +57,6 @@ public class EffectKenBurns extends Effect {
mEndRect = endRect;
}
- /**
- * Set the start rectangle.
- *
- * @param startRect The start rectangle
- *
- * @throws IllegalArgumentException if start rectangle is incorrectly set.
- */
- public void setStartRect(Rect startRect) {
- if ( (startRect.left == 0) && (startRect.right == 0)
- && (startRect.bottom == 0) && (startRect.top == 0) ) {
- throw new IllegalArgumentException("Invalid Rectangle");
- }
-
- mStartRect = startRect;
- }
/**
* Get the start rectangle.
@@ -82,21 +67,6 @@ public class EffectKenBurns extends Effect {
return mStartRect;
}
- /**
- * Set the end rectangle.
- *
- * @param endRect The end rectangle
- *
- * @throws IllegalArgumentException if end rectangle is incorrectly set.
- */
- public void setEndRect(Rect endRect) {
- if ( (endRect.left == 0) && (endRect.right == 0)
- && (endRect.bottom == 0) && (endRect.top == 0) ) {
- throw new IllegalArgumentException("Invalid Rectangle");
- }
-
- mEndRect = endRect;
- }
/**
* Get the end rectangle.
diff --git a/media/java/android/media/videoeditor/MediaItem.java b/media/java/android/media/videoeditor/MediaItem.java
index d3ab051fb2e8..e3ef59908e40 100755
--- a/media/java/android/media/videoeditor/MediaItem.java
+++ b/media/java/android/media/videoeditor/MediaItem.java
@@ -295,6 +295,8 @@ public abstract class MediaItem {
"Effect start time + effect duration > media clip duration");
}
+ mMANativeHelper.setGeneratePreview(true);
+
mEffects.add(effect);
invalidateTransitions(effect.getStartTime(), effect.getDuration());
@@ -302,7 +304,6 @@ public abstract class MediaItem {
if (effect instanceof EffectKenBurns) {
mRegenerateClip = true;
}
- mMANativeHelper.setGeneratePreview(true);
}
/**
@@ -424,8 +425,6 @@ public abstract class MediaItem {
throw new IllegalArgumentException("Overlay bitmap not specified");
}
- ((OverlayFrame)overlay).save(mProjectPath);
-
final int scaledWidth, scaledHeight;
if (this instanceof MediaVideoItem) {
scaledWidth = getWidth();
@@ -443,13 +442,16 @@ public abstract class MediaItem {
throw new IllegalArgumentException(
"Bitmap dimensions must match media item dimensions");
}
+
+ mMANativeHelper.setGeneratePreview(true);
+ ((OverlayFrame)overlay).save(mProjectPath);
+
+ mOverlays.add(overlay);
+ invalidateTransitions(overlay.getStartTime(), overlay.getDuration());
+
} else {
throw new IllegalArgumentException("Overlay not supported");
}
-
- mOverlays.add(overlay);
- invalidateTransitions(overlay.getStartTime(), overlay.getDuration());
- mMANativeHelper.setGeneratePreview(true);
}
/**
diff --git a/media/java/android/media/videoeditor/VideoEditor.java b/media/java/android/media/videoeditor/VideoEditor.java
index 9006613b9296..122dc8d4f5d1 100755
--- a/media/java/android/media/videoeditor/VideoEditor.java
+++ b/media/java/android/media/videoeditor/VideoEditor.java
@@ -23,6 +23,7 @@ import java.util.concurrent.CancellationException;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Canvas;
+import android.graphics.Paint;
import android.graphics.Rect;
import android.view.SurfaceHolder;
@@ -153,6 +154,7 @@ public interface VideoEditor {
private Bitmap mOverlayBitmap;
private int mRenderingMode;
private boolean mClear;
+ private static final Paint sResizePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
/**
* Default constructor
@@ -290,7 +292,7 @@ public interface VideoEditor {
}
destBitmap.eraseColor(Color.TRANSPARENT);
- overlayCanvas.drawBitmap(mOverlayBitmap, srcRect, destRect, null);
+ overlayCanvas.drawBitmap(mOverlayBitmap, srcRect, destRect, sResizePaint);
mOverlayBitmap.recycle();
}
diff --git a/media/java/android/media/videoeditor/VideoEditorImpl.java b/media/java/android/media/videoeditor/VideoEditorImpl.java
index cc847ef2692e..25b25ee5919d 100755
--- a/media/java/android/media/videoeditor/VideoEditorImpl.java
+++ b/media/java/android/media/videoeditor/VideoEditorImpl.java
@@ -167,6 +167,8 @@ public class VideoEditorImpl implements VideoEditor {
throw new IllegalArgumentException("No more tracks can be added");
}
+ mMANativeHelper.setGeneratePreview(true);
+
/*
* Add the audio track to AudioTrack list
*/
@@ -185,7 +187,6 @@ public class VideoEditorImpl implements VideoEditor {
mMANativeHelper.setAudioflag(false);
}
- mMANativeHelper.setGeneratePreview(true);
}
/*
@@ -205,6 +206,8 @@ public class VideoEditorImpl implements VideoEditor {
throw new IllegalArgumentException("Media item already exists: " + mediaItem.getId());
}
+ mMANativeHelper.setGeneratePreview(true);
+
/*
* Invalidate the end transition if necessary
*/
@@ -219,7 +222,7 @@ public class VideoEditorImpl implements VideoEditor {
mMediaItems.add(mediaItem);
computeTimelineDuration();
- mMANativeHelper.setGeneratePreview(true);
+
/*
* Generate project thumbnail only from first media Item on storyboard
*/
@@ -258,7 +261,9 @@ public class VideoEditorImpl implements VideoEditor {
if (afterMediaItemIndex != (beforeMediaItemIndex - 1) ) {
throw new IllegalArgumentException("MediaItems are not in sequence");
}
- }
+ }
+
+ mMANativeHelper.setGeneratePreview(true);
mTransitions.add(transition);
/*
@@ -289,7 +294,6 @@ public class VideoEditorImpl implements VideoEditor {
}
computeTimelineDuration();
- mMANativeHelper.setGeneratePreview(true);
}
/*
@@ -542,15 +546,15 @@ public class VideoEditorImpl implements VideoEditor {
}
if (afterAudioTrackId == null) {
- mAudioTracks.add(0, audioTrack);
mMANativeHelper.setGeneratePreview(true);
+ mAudioTracks.add(0, audioTrack);
} else {
final int audioTrackCount = mAudioTracks.size();
for (int i = 0; i < audioTrackCount; i++) {
AudioTrack at = mAudioTracks.get(i);
if (at.getId().equals(afterAudioTrackId)) {
- mAudioTracks.add(i + 1, audioTrack);
mMANativeHelper.setGeneratePreview(true);
+ mAudioTracks.add(i + 1, audioTrack);
return;
}
}
@@ -568,6 +572,7 @@ public class VideoEditorImpl implements VideoEditor {
}
if (afterMediaItemId == null) {
+ mMANativeHelper.setGeneratePreview(true);
if (mMediaItems.size() > 0) {
/**
* Invalidate the transition at the beginning of the timeline
@@ -578,12 +583,12 @@ public class VideoEditorImpl implements VideoEditor {
mMediaItems.add(0, mediaItem);
computeTimelineDuration();
generateProjectThumbnail();
- mMANativeHelper.setGeneratePreview(true);
} else {
final int mediaItemCount = mMediaItems.size();
for (int i = 0; i < mediaItemCount; i++) {
final MediaItem mi = mMediaItems.get(i);
if (mi.getId().equals(afterMediaItemId)) {
+ mMANativeHelper.setGeneratePreview(true);
/**
* Invalidate the transition at this position
*/
@@ -593,7 +598,6 @@ public class VideoEditorImpl implements VideoEditor {
*/
mMediaItems.add(i + 1, mediaItem);
computeTimelineDuration();
- mMANativeHelper.setGeneratePreview(true);
return;
}
}
@@ -620,6 +624,8 @@ public class VideoEditorImpl implements VideoEditor {
if (afterMediaItemId == null) {
if (mMediaItems.size() > 0) {
+ mMANativeHelper.setGeneratePreview(true);
+
/**
* Invalidate adjacent transitions at the insertion point
*/
@@ -630,7 +636,6 @@ public class VideoEditorImpl implements VideoEditor {
*/
mMediaItems.add(0, moveMediaItem);
computeTimelineDuration();
- mMANativeHelper.setGeneratePreview(true);
generateProjectThumbnail();
} else {
@@ -641,6 +646,7 @@ public class VideoEditorImpl implements VideoEditor {
for (int i = 0; i < mediaItemCount; i++) {
final MediaItem mi = mMediaItems.get(i);
if (mi.getId().equals(afterMediaItemId)) {
+ mMANativeHelper.setGeneratePreview(true);
/**
* Invalidate adjacent transitions at the insertion point
*/
@@ -650,7 +656,6 @@ public class VideoEditorImpl implements VideoEditor {
*/
mMediaItems.add(i + 1, moveMediaItem);
computeTimelineDuration();
- mMANativeHelper.setGeneratePreview(true);
return;
}
}
@@ -703,11 +708,11 @@ public class VideoEditorImpl implements VideoEditor {
public synchronized AudioTrack removeAudioTrack(String audioTrackId) {
final AudioTrack audioTrack = getAudioTrack(audioTrackId);
if (audioTrack != null) {
+ mMANativeHelper.setGeneratePreview(true);
mAudioTracks.remove(audioTrack);
audioTrack.invalidate();
mMANativeHelper.invalidatePcmFile();
mMANativeHelper.setAudioflag(true);
- mMANativeHelper.setGeneratePreview(true);
} else {
throw new IllegalArgumentException(" No more audio tracks");
}
@@ -840,7 +845,6 @@ public class VideoEditorImpl implements VideoEditor {
} else if (timeMs > mDurationMs) {
throw new IllegalArgumentException("requested time more than duration");
}
-
long result = 0;
boolean semAcquireDone = false;
@@ -862,7 +866,7 @@ public class VideoEditorImpl implements VideoEditor {
mMANativeHelper.unlock();
}
}
-
+Log.i("VE_IMPL","renderPreviewFrame <--");
return result;
}
@@ -1617,8 +1621,8 @@ public class VideoEditorImpl implements VideoEditor {
while (it.hasNext()) {
Transition t = it.next();
if (t.getBeforeMediaItem() == mediaItem) {
- it.remove();
mMANativeHelper.setGeneratePreview(true);
+ it.remove();
t.invalidate();
mediaItem.setBeginTransition(null);
if (index > 0) {
@@ -1640,8 +1644,8 @@ public class VideoEditorImpl implements VideoEditor {
while (it.hasNext()) {
Transition t = it.next();
if (t.getAfterMediaItem() == mediaItem) {
- it.remove();
mMANativeHelper.setGeneratePreview(true);
+ it.remove();
t.invalidate();
mediaItem.setEndTransition(null);
/**