Fix for ISSUE 3370836 - Overlay optmization.
Change-Id: I9c6657f6fdab0fa815201d8b26b8c90700663c12
diff --git a/libvideoeditor/lvpp/PreviewPlayer.cpp b/libvideoeditor/lvpp/PreviewPlayer.cpp
old mode 100755
new mode 100644
index 4738fdd..4d63a2f
--- a/libvideoeditor/lvpp/PreviewPlayer.cpp
+++ b/libvideoeditor/lvpp/PreviewPlayer.cpp
Binary files differ
diff --git a/libvideoeditor/lvpp/PreviewPlayer.h b/libvideoeditor/lvpp/PreviewPlayer.h
old mode 100755
new mode 100644
index ebbdec8..59448ad
--- a/libvideoeditor/lvpp/PreviewPlayer.h
+++ b/libvideoeditor/lvpp/PreviewPlayer.h
@@ -168,6 +168,7 @@
M4OSA_UInt32 mAudioMixStoryBoardTS;
M4OSA_UInt32 mCurrentMediaBeginCutTime;
M4OSA_UInt32 mCurrentMediaVolumeValue;
+ M4OSA_UInt32 mCurrFramingEffectIndex;
uint32_t mNumberEffects;
uint32_t mPlayBeginTimeMsec;
@@ -179,6 +180,10 @@
uint32_t mNumberDecVideoFrames; // Counter of number of video frames decoded
sp<TimedEventQueue::Event> mProgressCbEvent;
bool mProgressCbEventPending;
+ sp<TimedEventQueue::Event> mOverlayUpdateEvent;
+ bool mOverlayUpdateEventPending;
+ bool mOverlayUpdateEventPosted;
+
MediaBuffer *mResizedVideoBuffer;
bool mVideoResizedOrCropped;
M4xVSS_MediaRendering mRenderingMode;
@@ -205,6 +210,9 @@
void postProgressCallbackEvent_l();
void onProgressCbEvent();
+ void postOverlayUpdateEvent_l();
+ void onUpdateOverlayEvent();
+
status_t setDataSource_l_jpg();
status_t prepare_l();
diff --git a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
index 52aa87e..b76eac6 100755
--- a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
+++ b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
@@ -20,7 +20,7 @@
#include "VideoEditorPreviewController.h"
namespace android {
-
+
#define PREVIEW_THREAD_STACK_SIZE (65536)
VideoEditorPreviewController::VideoEditorPreviewController()
@@ -738,7 +738,9 @@
}
M4OSA_ERR VideoEditorPreviewController::renderPreviewFrame(
- const sp<Surface> &surface, VideoEditor_renderPreviewFrameStr* pFrameInfo) {
+ const sp<Surface> &surface,
+ VideoEditor_renderPreviewFrameStr* pFrameInfo,
+ VideoEditorCurretEditInfo *pCurrEditInfo) {
M4OSA_ERR err = M4NO_ERROR;
M4OSA_UInt32 i = 0, iIncrementedDuration = 0, tnTimeMs=0, framesize =0;
@@ -749,7 +751,9 @@
// Get the Isurface to be passed to renderer
mISurface = surface->getISurface();
-
+ if (pCurrEditInfo != NULL) {
+ pCurrEditInfo->overlaySettingsIndex = -1;
+ }
// Delete previous renderer instance
if(mTarget != NULL) {
delete mTarget;
@@ -796,6 +800,32 @@
}
}
+ //Provide the overlay Update indication when there is an overlay effect
+ if (mCurrentVideoEffect == VIDEO_EFFECT_FRAMING) {
+ int index;
+ mCurrentVideoEffect = VIDEO_EFFECT_NONE; //never apply framing here.
+
+ // Find the effect in effectSettings array
+ for (index = 0; index < mNumberEffects; index++) {
+ if(mEffectsSettings[index].VideoEffectType ==
+ M4xVSS_kVideoEffectType_Framing) {
+
+ if((mEffectsSettings[index].uiStartTime <= pFrameInfo->timeMs) &&
+ ((mEffectsSettings[index].uiStartTime+
+ mEffectsSettings[index].uiDuration) >= pFrameInfo->timeMs))
+ {
+ break;
+ }
+ }
+ }
+ if ((index < mNumberEffects) && (pCurrEditInfo != NULL)) {
+ pCurrEditInfo->overlaySettingsIndex = index;
+ LOGV("Framing index = %d", index);
+ } else {
+ LOGV("No framing effects found");
+ }
+ }
+
if(mCurrentVideoEffect != VIDEO_EFFECT_NONE) {
err = applyVideoEffect((M4OSA_Void *)pFrameStr->pBuffer,
OMX_COLOR_FormatYUV420Planar, pFrameStr->uiFrameWidth,
@@ -958,9 +988,10 @@
}
}
else {
+ M4OSA_UInt32 endArgs = 0;
if(pController->mJniCallback != NULL) {
pController->mJniCallback(
- pController->mJniCookie, MSG_TYPE_PREVIEW_END, 0);
+ pController->mJniCookie, MSG_TYPE_PREVIEW_END, &endArgs);
}
pController->mPlayerState = VePlayerAutoStop;
@@ -1054,6 +1085,7 @@
LOGV("MEDIA_PREPARED");
break;
case MEDIA_PLAYBACK_COMPLETE:
+ {
LOGV("notify:MEDIA_PLAYBACK_COMPLETE");
pController->mPlayerState = VePlayerIdle;
@@ -1069,31 +1101,40 @@
pController->mClipList[pController->mCurrentClipNumber]->uiEndCutTime
- pController->mClipList[pController->mCurrentClipNumber]->uiBeginCutTime;
}
+
+ M4OSA_UInt32 playedDuration = clipDuration+pController->mCurrentPlayedDuration;
pController->mJniCallback(
- pController->mJniCookie, MSG_TYPE_PROGRESS_INDICATION,
- (clipDuration+pController->mCurrentPlayedDuration));
+ pController->mJniCookie, MSG_TYPE_PROGRESS_INDICATION,
+ &playedDuration);
M4OSA_semaphorePost(pController->mSemThreadWait);
break;
- case MEDIA_ERROR:
+ }
+ case MEDIA_ERROR:
+ {
+ int err_val = ext1;
// Always log errors.
// ext1: Media framework error code.
// ext2: Implementation dependant error code.
LOGE("MEDIA_ERROR; error (%d, %d)", ext1, ext2);
if(pController->mJniCallback != NULL) {
pController->mJniCallback(pController->mJniCookie,
- MSG_TYPE_PLAYER_ERROR, ext1);
+ MSG_TYPE_PLAYER_ERROR, &err_val);
}
break;
+ }
case MEDIA_INFO:
+ {
+ int info_val = ext2;
// ext1: Media framework error code.
// ext2: Implementation dependant error code.
//LOGW("MEDIA_INFO; info/warning (%d, %d)", ext1, ext2);
if(pController->mJniCallback != NULL) {
pController->mJniCallback(pController->mJniCookie,
- MSG_TYPE_PROGRESS_INDICATION, ext2);
+ MSG_TYPE_PROGRESS_INDICATION, &info_val);
}
break;
+ }
case MEDIA_SEEK_COMPLETE:
LOGV("MEDIA_SEEK_COMPLETE; Received seek complete");
break;
@@ -1120,6 +1161,30 @@
pController->mCurrentClipNumber+1);
}
break;
+ case 0xBBBBBBBB:
+ {
+ LOGV("VIDEO PLAYBACK, Update Overlay");
+ int overlayIndex = ext2;
+ VideoEditorCurretEditInfo *pEditInfo =
+ (VideoEditorCurretEditInfo*)M4OSA_malloc(sizeof(VideoEditorCurretEditInfo),
+ M4VS, (M4OSA_Char*)"Current Edit info");
+ //ext1 = 1; start the overlay display
+ // = 2; Clear the overlay.
+ pEditInfo->overlaySettingsIndex = ext2;
+ pEditInfo->clipIndex = pController->mCurrentClipNumber;
+ LOGV("pController->mCurrentClipNumber = %d",pController->mCurrentClipNumber);
+ if (pController->mJniCallback != NULL) {
+ if (ext1 == 1) {
+ pController->mJniCallback(pController->mJniCookie,
+ MSG_TYPE_OVERLAY_UPDATE, pEditInfo);
+ } else {
+ pController->mJniCallback(pController->mJniCookie,
+ MSG_TYPE_OVERLAY_CLEAR, pEditInfo);
+ }
+ }
+ M4OSA_free((M4OSA_MemAddr32)pEditInfo);
+ break;
+ }
default:
LOGV("unrecognized message: (%d, %d, %d)", msg, ext1, ext2);
break;
diff --git a/libvideoeditor/lvpp/VideoEditorPreviewController.h b/libvideoeditor/lvpp/VideoEditorPreviewController.h
index 5828c5f..d2a5645 100755
--- a/libvideoeditor/lvpp/VideoEditorPreviewController.h
+++ b/libvideoeditor/lvpp/VideoEditorPreviewController.h
@@ -53,7 +53,8 @@
// Callback mechanism from PreviewController to Jni */
-typedef void (*jni_progress_callback_fct)(void* cookie, M4OSA_UInt32 msgType, M4OSA_UInt32 argc);
+typedef void (*jni_progress_callback_fct)(void* cookie, M4OSA_UInt32 msgType, void *argc);
+
class VideoEditorPreviewController {
@@ -62,26 +63,27 @@
virtual ~VideoEditorPreviewController();
M4OSA_ERR loadEditSettings(M4VSS3GPP_EditSettings* pSettings,
- M4xVSS_AudioMixingSettings* bgmSettings);
+ M4xVSS_AudioMixingSettings* bgmSettings);
M4OSA_ERR setSurface(const sp<Surface> &surface);
M4OSA_ERR startPreview(M4OSA_UInt32 fromMS, M4OSA_Int32 toMs,
- M4OSA_UInt16 callBackAfterFrameCount, M4OSA_Bool loop) ;
+ M4OSA_UInt16 callBackAfterFrameCount, M4OSA_Bool loop) ;
M4OSA_ERR stopPreview();
M4OSA_ERR renderPreviewFrame(const sp<Surface> &surface,
- VideoEditor_renderPreviewFrameStr* pFrameInfo);
+ VideoEditor_renderPreviewFrameStr* pFrameInfo,
+ VideoEditorCurretEditInfo *pCurrEditInfo);
M4OSA_ERR clearSurface(const sp<Surface> &surface,
VideoEditor_renderPreviewFrameStr* pFrameInfo);
M4OSA_Void setJniCallback(void* cookie,
- jni_progress_callback_fct callbackFct);
+ jni_progress_callback_fct callbackFct);
M4OSA_ERR setPreviewFrameRenderingMode(M4xVSS_MediaRendering mode,
- M4VIDEOEDITING_VideoFrameSize outputVideoSize);
+ M4VIDEOEDITING_VideoFrameSize outputVideoSize);
private:
sp<VideoEditorPlayer> mVePlayer[NBPLAYER_INSTANCES];