Skip to content

Commit 613ed4c

Browse files
Hong TengAndroid (Google) Code Review
authored andcommitted
Merge "Fixd for 5490443 Native crash while exporting a video - Add new onError callback to PreviewProgressListener, which is used to indicate video editor application for the error that has occurred during priviewing. With this modification, the application must implement the onError method, and then VideoEditorPreviewTest.java is changed accordingly." into ics-mr1
2 parents e21dabf + 63149c8 commit 613ed4c

File tree

4 files changed

+51
-6
lines changed

4 files changed

+51
-6
lines changed

media/java/android/media/videoeditor/MediaArtistNativeHelper.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1845,7 +1845,7 @@ private void onProgressUpdate(int taskId, int progress) {
18451845

18461846
@SuppressWarnings("unused")
18471847
private void onPreviewProgressUpdate(int progress, boolean isFinished,
1848-
boolean updateOverlay, String filename, int renderingMode) {
1848+
boolean updateOverlay, String filename, int renderingMode, int error) {
18491849
if (mPreviewProgressListener != null) {
18501850
if (mIsFirstProgress) {
18511851
mPreviewProgressListener.onStart(mVideoEditor);
@@ -1870,6 +1870,8 @@ private void onPreviewProgressUpdate(int progress, boolean isFinished,
18701870

18711871
if (isFinished) {
18721872
mPreviewProgressListener.onStop(mVideoEditor);
1873+
} else if (error != 0) {
1874+
mPreviewProgressListener.onError(mVideoEditor, error);
18731875
} else {
18741876
mPreviewProgressListener.onProgress(mVideoEditor, progress, overlayData);
18751877
}

media/java/android/media/videoeditor/VideoEditor.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,17 @@ public void onProgress(VideoEditor videoEditor, long timeMs,
107107
* @param videoEditor The VideoEditor instance
108108
*/
109109
public void onStop(VideoEditor videoEditor);
110+
111+
/**
112+
* This method notifies the listener when error has occurred during
113+
* previewing a project.
114+
*
115+
* @param videoEditor The VideoEditor instance
116+
* @param error The error that has occurred
117+
* FIXME: We should pass well-defined error code to the application;
118+
* but for now, we just pass whatever error code reported by the native layer.
119+
*/
120+
public void onError(VideoEditor videoEditor, int error);
110121
}
111122

112123
/**

media/jni/mediaeditor/VideoEditorMain.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ static void jniPreviewProgressCallback (void* cookie, M4OSA_UInt32 msgType,
477477
pEnv->CallVoidMethod(pContext->engine,
478478
pContext->onPreviewProgressUpdateMethodId,
479479
currentMs,isFinished, pContext->mIsUpdateOverlay,
480-
tmpFileName, pContext->mOverlayRenderingMode);
480+
tmpFileName, pContext->mOverlayRenderingMode, error);
481481

482482
if (pContext->mIsUpdateOverlay) {
483483
pContext->mIsUpdateOverlay = false;
@@ -1630,7 +1630,7 @@ videoEditor_populateSettings(
16301630
"not initialized");
16311631

16321632
pContext->onPreviewProgressUpdateMethodId = pEnv->GetMethodID(engineClass,
1633-
"onPreviewProgressUpdate", "(IZZLjava/lang/String;I)V");
1633+
"onPreviewProgressUpdate", "(IZZLjava/lang/String;II)V");
16341634
// Check if the context is valid (required because the context is dereferenced).
16351635
if (needToBeLoaded) {
16361636
// Make sure that we are in a correct state.

media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ public void handleMessage(Message msg)
9393

9494
private boolean previewStart;
9595
private boolean previewStop;
96+
private boolean previewError;
9697

9798
/* Minimum waiting time for Semaphore to wait for release */
9899
private final long minWaitingTime = 3000;
@@ -141,14 +142,17 @@ protected void setPreviewStart() {
141142
protected void setPreviewStop() {
142143
previewStop = true;
143144
}
144-
145+
protected void setPreviewError() {
146+
previewError = true;
147+
}
145148
protected void validatePreviewProgress(int startMs, int endMs,
146149
boolean loop, long duration) throws Exception {
147150

148151
final int[] progressUpdate = new int[100];
149152
final Semaphore blockTillPreviewCompletes = new Semaphore(1);
150153
previewStart = false;
151154
previewStop = false;
155+
previewError = false;
152156
mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
153157
int i = 0;
154158
public void onProgress(Object item, int action, int progress) {
@@ -187,6 +191,10 @@ public void onStop(VideoEditor videoEditor) {
187191
setPreviewStop();
188192
blockTillPreviewCompletes.release();
189193
}
194+
public void onError(VideoEditor videoEditor, int error) {
195+
setPreviewError();
196+
blockTillPreviewCompletes.release();
197+
}
190198
});
191199
} catch (Exception e) {
192200
blockTillPreviewCompletes.release();
@@ -196,6 +204,7 @@ public void onStop(VideoEditor videoEditor) {
196204
mVideoEditor.stopPreview();
197205
assertTrue("Preview Failed to start", previewStart);
198206
assertTrue("Preview Failed to stop", previewStop);
207+
assertFalse("Preview Error occurred", previewError);
199208

200209
blockTillPreviewCompletes.release();
201210
}
@@ -399,6 +408,7 @@ public void testPreviewWithTransition() throws Exception {
399408
"TransitionSpiral_QVGA.jpg";
400409
previewStart = false;
401410
previewStop = false;
411+
previewError = false;
402412

403413
final Semaphore blockTillPreviewCompletes = new Semaphore(1);
404414

@@ -490,6 +500,10 @@ public void onStop(VideoEditor videoEditor) {
490500
setPreviewStop();
491501
blockTillPreviewCompletes.release();
492502
}
503+
public void onError(VideoEditor videoEditor, int error) {
504+
setPreviewError();
505+
blockTillPreviewCompletes.release();
506+
}
493507
});
494508
} catch (Exception e) {
495509
blockTillPreviewCompletes.release();
@@ -499,6 +513,7 @@ public void onStop(VideoEditor videoEditor) {
499513
blockTillPreviewCompletes.release();
500514
assertTrue("Preview Failed to start", previewStart);
501515
assertTrue("Preview Failed to stop", previewStop);
516+
assertFalse("Preview Error occurred", previewError);
502517

503518
assertEquals("Removing Transition " + transition1And2CrossFade.getId(),
504519
transition1And2CrossFade,
@@ -677,6 +692,7 @@ public void testPreviewDuringExport() throws Exception {
677692
final Semaphore blockTillPreviewCompletes = new Semaphore(1);
678693
previewStart = false;
679694
previewStop = false;
695+
previewError = false;
680696

681697
final MediaVideoItem mediaVideoItem1 =
682698
mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
@@ -727,6 +743,10 @@ public void onStop(VideoEditor videoEditor) {
727743
setPreviewStop();
728744
blockTillPreviewCompletes.release();
729745
}
746+
public void onError(VideoEditor videoEditor, int error) {
747+
setPreviewError();
748+
blockTillPreviewCompletes.release();
749+
}
730750
});
731751

732752
} catch (Exception e) {
@@ -736,6 +756,8 @@ public void onStop(VideoEditor videoEditor) {
736756
mVideoEditor.stopPreview();
737757
assertTrue("Preview Failed to start", previewStart);
738758
assertTrue("Preview Failed to stop", previewStop);
759+
assertFalse("Preview Error occurred", previewError);
760+
739761
blockTillPreviewCompletes.release();
740762
}
741763

@@ -784,6 +806,10 @@ public void onStop(VideoEditor videoEditor) {
784806
setPreviewStop();
785807
blockTillPreviewCompletes.release();
786808
}
809+
public void onError(VideoEditor videoEditor, int error) {
810+
setPreviewError();
811+
blockTillPreviewCompletes.release();
812+
}
787813
});
788814

789815
} catch (IllegalArgumentException e) {
@@ -1023,7 +1049,10 @@ public void onStart(VideoEditor videoEditor) {
10231049
}
10241050
public void onStop(VideoEditor videoEditor) {
10251051
setPreviewStop();
1026-
}
1052+
}
1053+
public void onError(VideoEditor videoEditor, int error) {
1054+
setPreviewError();
1055+
}
10271056
});
10281057
}catch (IllegalArgumentException e) {
10291058
flagForException = true;
@@ -1089,7 +1118,10 @@ public void onStart(VideoEditor videoEditor) {
10891118
}
10901119
public void onStop(VideoEditor videoEditor) {
10911120
setPreviewStop();
1092-
}
1121+
}
1122+
public void onError(VideoEditor videoEditor, int error) {
1123+
setPreviewError();
1124+
}
10931125
});
10941126
}catch (IllegalArgumentException e) {
10951127
flagForException = true;

0 commit comments

Comments
 (0)