diff options
author | Dharmaray Kundargi <dharmaray@google.com> | 2011-01-26 12:51:58 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-01-26 12:51:58 -0800 |
commit | 5af2ce4c5fd45250943fa62ad5dc194ca5e3de51 (patch) | |
tree | 753d07150e028991712aaf74d95fe09e6a42e2ea /media/jni | |
parent | a135040311415a92e9544c377168fc6478a50bdc (diff) | |
parent | 81bebad0f1fa0bda5a74e4e78b43bd94bd94bf40 (diff) | |
download | frameworks_base-5af2ce4c5fd45250943fa62ad5dc194ca5e3de51.zip frameworks_base-5af2ce4c5fd45250943fa62ad5dc194ca5e3de51.tar.gz frameworks_base-5af2ce4c5fd45250943fa62ad5dc194ca5e3de51.tar.bz2 |
am 81bebad0: am ecebf173: Merge "Fix for Issue 3370836 : JNI files for Overlay optmization." into honeycomb
* commit '81bebad0f1fa0bda5a74e4e78b43bd94bd94bf40':
Fix for Issue 3370836 : JNI files for Overlay optmization.
Diffstat (limited to 'media/jni')
-rwxr-xr-x | media/jni/mediaeditor/VideoEditorClasses.cpp | 2 | ||||
-rwxr-xr-x | media/jni/mediaeditor/VideoEditorMain.cpp | 150 | ||||
-rwxr-xr-x | media/jni/mediaeditor/VideoEditorMain.h | 13 |
3 files changed, 142 insertions, 23 deletions
diff --git a/media/jni/mediaeditor/VideoEditorClasses.cpp b/media/jni/mediaeditor/VideoEditorClasses.cpp index 52e032a..369faa9 100755 --- a/media/jni/mediaeditor/VideoEditorClasses.cpp +++ b/media/jni/mediaeditor/VideoEditorClasses.cpp @@ -2481,7 +2481,7 @@ videoEditClasses_getEffectSettings( pSettings->xVSS.width = pSettings->xVSS.pFramingBuffer->u_width; pSettings->xVSS.height = pSettings->xVSS.pFramingBuffer->u_height; - pSettings->xVSS.rgbType = M4VSS3GPP_kRGB888; + pSettings->xVSS.rgbType = M4VSS3GPP_kRGB565; VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "pFramingBuffer u_width %d ", pSettings->xVSS.pFramingBuffer->u_width); diff --git a/media/jni/mediaeditor/VideoEditorMain.cpp b/media/jni/mediaeditor/VideoEditorMain.cpp index 8ce788b..4149bc9 100755 --- a/media/jni/mediaeditor/VideoEditorMain.cpp +++ b/media/jni/mediaeditor/VideoEditorMain.cpp @@ -86,6 +86,7 @@ typedef struct jmethodID onWarningMethodId; jmethodID onProgressUpdateMethodId; jmethodID onPreviewProgressUpdateMethodId; + jmethodID previewFrameEditInfoId; M4xVSS_InitParams initParams; void* pTextRendererHandle; M4xVSS_getTextRgbBufferFct pTextRendererFunction; @@ -102,6 +103,9 @@ typedef struct M4OSA_Bool bSkipState; jmethodID onAudioGraphProgressUpdateMethodId; Mutex mLock; + bool mIsUpdateOverlay; + char *mOverlayFileName; + int mOverlayRenderingMode; } ManualEditContext; extern "C" M4OSA_ERR M4MCS_open_normalMode( @@ -224,7 +228,7 @@ static int videoEditor_registerManualEditMethods( JNIEnv* pEnv); static void jniPreviewProgressCallback(void* cookie, M4OSA_UInt32 msgType, - M4OSA_UInt32 argc); + void *argc); static int videoEditor_renderMediaItemPreviewFrame(JNIEnv* pEnv, jobject thiz, @@ -374,35 +378,105 @@ getClipSetting( } static void jniPreviewProgressCallback (void* cookie, M4OSA_UInt32 msgType, - M4OSA_UInt32 argc) + void *argc) { ManualEditContext *pContext = (ManualEditContext *)cookie; JNIEnv* pEnv = NULL; bool isFinished = false; int currentMs = 0; int error = M4NO_ERROR; + bool isUpdateOverlay = false; + int overlayEffectIndex; + char *extPos; + bool isSendProgress = true; + jstring tmpFileName; + VideoEditorCurretEditInfo *pCurrEditInfo; // Attach the current thread. pContext->pVM->AttachCurrentThread(&pEnv, NULL); switch(msgType) { case MSG_TYPE_PROGRESS_INDICATION: - currentMs = argc; + currentMs = *(int*)argc; break; case MSG_TYPE_PLAYER_ERROR: currentMs = -1; - error = argc; + error = *(int*)argc; break; case MSG_TYPE_PREVIEW_END: isFinished = true; break; + case MSG_TYPE_OVERLAY_UPDATE: + { + int overlayFileNameLen = 0; + isSendProgress = false; + pContext->mIsUpdateOverlay = true; + pCurrEditInfo = (VideoEditorCurretEditInfo*)argc; + overlayEffectIndex = pCurrEditInfo->overlaySettingsIndex; + LOGV("MSG_TYPE_OVERLAY_UPDATE"); + + if (pContext->mOverlayFileName != NULL) { + M4OSA_free((M4OSA_MemAddr32)pContext->mOverlayFileName); + pContext->mOverlayFileName = NULL; + } + + overlayFileNameLen = + strlen((const char*)pContext->pEditSettings->Effects[overlayEffectIndex].xVSS.pFramingFilePath); + + pContext->mOverlayFileName = + (char*)M4OSA_malloc(overlayFileNameLen+1, + M4VS, (M4OSA_Char*)"videoEdito JNI overlayFile"); + if (pContext->mOverlayFileName != NULL) { + strncpy (pContext->mOverlayFileName, + (const char*)pContext->pEditSettings->\ + Effects[overlayEffectIndex].xVSS.pFramingFilePath, overlayFileNameLen); + //Change the name to png file + extPos = strstr(pContext->mOverlayFileName, ".rgb"); + if (extPos != NULL) { + *extPos = '\0'; + } else { + LOGE("ERROR the overlay file is incorrect"); + } + + strcat(pContext->mOverlayFileName, ".png"); + LOGV("Conv string is %s", pContext->mOverlayFileName); + LOGV("Current Clip index = %d", pCurrEditInfo->clipIndex); + + pContext->mOverlayRenderingMode = pContext->pEditSettings->\ + pClipList[pCurrEditInfo->clipIndex]->xVSS.MediaRendering; + LOGI("rendering mode %d ", pContext->mOverlayRenderingMode); + + } + + break; + } + + case MSG_TYPE_OVERLAY_CLEAR: + isSendProgress = false; + pContext->mOverlayFileName = NULL; + LOGI("MSG_TYPE_OVERLAY_CLEAR"); + //argc is not used + pContext->mIsUpdateOverlay = true; + break; default: break; } - pEnv->CallVoidMethod(pContext->engine, - pContext->onPreviewProgressUpdateMethodId, - currentMs,isFinished); + if (isSendProgress) { + tmpFileName = pEnv->NewStringUTF(pContext->mOverlayFileName); + pEnv->CallVoidMethod(pContext->engine, + pContext->onPreviewProgressUpdateMethodId, + currentMs,isFinished, pContext->mIsUpdateOverlay, + tmpFileName, pContext->mOverlayRenderingMode); + + if (pContext->mIsUpdateOverlay) { + pContext->mIsUpdateOverlay = false; + } + + if (tmpFileName) { + pEnv->DeleteLocalRef(tmpFileName); + } + } // Detach the current thread. pContext->pVM->DetachCurrentThread(); @@ -422,6 +496,11 @@ static void videoEditor_stopPreview(JNIEnv* pEnv, (M4OSA_NULL == pContext), "not initialized"); pContext->mPreviewController->stopPreview(); + + if (pContext->mOverlayFileName != NULL) { + M4OSA_free((M4OSA_MemAddr32)pContext->mOverlayFileName); + pContext->mOverlayFileName = NULL; + } } static void videoEditor_clearSurface(JNIEnv* pEnv, @@ -507,6 +586,7 @@ static int videoEditor_renderPreviewFrame(JNIEnv* pEnv, M4OSA_Context tnContext = M4OSA_NULL; const char* pMessage = NULL; M4VIFI_ImagePlane *yuvPlane = NULL; + VideoEditorCurretEditInfo currEditInfo; VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "surfaceWidth = %d",surfaceWidth); @@ -770,9 +850,36 @@ static int videoEditor_renderPreviewFrame(JNIEnv* pEnv, pContext->pEditSettings->\ pClipList[iCurrentClipIndex]->xVSS.MediaRendering, pContext->pEditSettings->xVSS.outputVideoSize); - result = pContext->mPreviewController->renderPreviewFrame(previewSurface, - &frameStr); + &frameStr, &currEditInfo); + + if (currEditInfo.overlaySettingsIndex != -1) { + char tmpOverlayFilename[100]; + char *extPos = NULL; + jstring tmpOverlayString; + int tmpRenderingMode = 0; + + strncpy (tmpOverlayFilename, + (const char*)pContext->pEditSettings->Effects[currEditInfo.overlaySettingsIndex].xVSS.pFramingFilePath, 99); + + //Change the name to png file + extPos = strstr(tmpOverlayFilename, ".rgb"); + if (extPos != NULL) { + *extPos = '\0'; + } else { + LOGE("ERROR the overlay file is incorrect"); + } + + strcat(tmpOverlayFilename, ".png"); + + tmpRenderingMode = pContext->pEditSettings->pClipList[iCurrentClipIndex]->xVSS.MediaRendering; + tmpOverlayString = pEnv->NewStringUTF(tmpOverlayFilename); + pEnv->CallVoidMethod(pContext->engine, + pContext->previewFrameEditInfoId, + tmpOverlayString, tmpRenderingMode); + + } + videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, (M4NO_ERROR != result), result); @@ -937,7 +1044,7 @@ static int videoEditor_renderMediaItemPreviewFrame(JNIEnv* pEnv, /* pContext->mPreviewController->setPreviewFrameRenderingMode(M4xVSS_kBlackBorders, (M4VIDEOEDITING_VideoFrameSize)(M4VIDEOEDITING_kHD960+1));*/ result - = pContext->mPreviewController->renderPreviewFrame(previewSurface,&frameStr); + = pContext->mPreviewController->renderPreviewFrame(previewSurface,&frameStr, NULL); videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, (M4NO_ERROR != result), result); @@ -1325,7 +1432,7 @@ videoEditor_populateSettings( "not initialized"); pContext->onPreviewProgressUpdateMethodId = pEnv->GetMethodID(engineClass, - "onPreviewProgressUpdate", "(IZ)V"); + "onPreviewProgressUpdate", "(IZZLjava/lang/String;I)V"); // Check if the context is valid (required because the context is dereferenced). if (needToBeLoaded) { // Make sure that we are in a correct state. @@ -1342,6 +1449,9 @@ videoEditor_populateSettings( } M4OSA_TRACE1_0("videoEditorC_getEditSettings done"); + pContext->previewFrameEditInfoId = pEnv->GetMethodID(engineClass, + "previewFrameEditInfo", "(Ljava/lang/String;I)V"); + if ( pContext->pEditSettings != NULL ) { // Check if the edit settings could be retrieved. @@ -1440,22 +1550,22 @@ videoEditor_populateSettings( width = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width; height = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height; - pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_stride = width*3; + //RGB 565 + pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_stride = width*2; - //for RGB888 + //for RGB565 pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_topleft = 0; - pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->pac_data = - (M4VIFI_UInt8 *)M4OSA_malloc(width*height*3, - 0x00,(M4OSA_Char *)"pac_data buffer"); + (M4VIFI_UInt8 *)M4OSA_malloc(width*height*2, + 0x00,(M4OSA_Char *)"pac_data buffer"); M4OSA_memcpy((M4OSA_Int8 *)&pContext->pEditSettings->\ Effects[j].xVSS.pFramingBuffer->\ - pac_data[0],(M4OSA_Int8 *)&aFramingCtx->FramingRgb->pac_data[0],(width*height*3)); + pac_data[0],(M4OSA_Int8 *)&aFramingCtx->FramingRgb->pac_data[0],(width*height*2)); - //As of now rgb type is always rgb888, can be changed in future for rgb 565 + //As of now rgb type is 565 pContext->pEditSettings->Effects[j].xVSS.rgbType = - (M4VSS3GPP_RGBType)M4VSS3GPP_kRGB888; //M4VSS3GPP_kRGB565; + (M4VSS3GPP_RGBType) M4VSS3GPP_kRGB565; if (aFramingCtx->FramingYuv != M4OSA_NULL ) { @@ -2153,6 +2263,8 @@ videoEditor_init( M4OSA_chrNCat((M4OSA_Char*)pContext->initParams.pTempPath, tmpString, M4OSA_chrLength(tmpString)); M4OSA_chrNCat((M4OSA_Char*)pContext->initParams.pTempPath, (M4OSA_Char*)"/", 1); M4OSA_free((M4OSA_MemAddr32)tmpString); + pContext->mIsUpdateOverlay = false; + pContext->mOverlayFileName = NULL; } // Check if the initialization succeeded diff --git a/media/jni/mediaeditor/VideoEditorMain.h b/media/jni/mediaeditor/VideoEditorMain.h index b73913a..ca4a945 100755 --- a/media/jni/mediaeditor/VideoEditorMain.h +++ b/media/jni/mediaeditor/VideoEditorMain.h @@ -21,11 +21,18 @@ typedef enum { - MSG_TYPE_PROGRESS_INDICATION, /* Playback progress indication event*/ - MSG_TYPE_PLAYER_ERROR, /* Playback error*/ - MSG_TYPE_PREVIEW_END, /* Preview of clips is complete */ + MSG_TYPE_PROGRESS_INDICATION, // Playback progress indication event + MSG_TYPE_PLAYER_ERROR, // Playback error + MSG_TYPE_PREVIEW_END, // Preview of clips is complete + MSG_TYPE_OVERLAY_UPDATE, // update overlay during preview + MSG_TYPE_OVERLAY_CLEAR, // clear the overlay } progress_callback_msg_type; +typedef struct { + int overlaySettingsIndex; + int clipIndex; +} VideoEditorCurretEditInfo; + typedef struct { M4OSA_Void *pFile; /** PCM file path */ |