Merge "VideoEditor:Fix for 3384150 and 3369908" into honeycomb
diff --git a/libvideoeditor/lvpp/PreviewPlayer.cpp b/libvideoeditor/lvpp/PreviewPlayer.cpp
index 4d63a2f..7ad822b 100644
--- a/libvideoeditor/lvpp/PreviewPlayer.cpp
+++ b/libvideoeditor/lvpp/PreviewPlayer.cpp
Binary files differ
diff --git a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
index b76eac6..0b7c3ef 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()
@@ -763,6 +763,7 @@
if(mOutputVideoWidth == 0) {
mOutputVideoWidth = pFrameStr->uiFrameWidth;
}
+
if(mOutputVideoHeight == 0) {
mOutputVideoHeight = pFrameStr->uiFrameHeight;
}
@@ -801,9 +802,9 @@
}
//Provide the overlay Update indication when there is an overlay effect
- if (mCurrentVideoEffect == VIDEO_EFFECT_FRAMING) {
+ if (mCurrentVideoEffect & VIDEO_EFFECT_FRAMING) {
int index;
- mCurrentVideoEffect = VIDEO_EFFECT_NONE; //never apply framing here.
+ mCurrentVideoEffect &= ~VIDEO_EFFECT_FRAMING; //never apply framing here.
// Find the effect in effectSettings array
for (index = 0; index < mNumberEffects; index++) {
@@ -1304,14 +1305,14 @@
mTarget->getBufferYV12(&(postProcessParams.pOutBuffer), &(postProcessParams.outBufferStride));
- err = applyEffectsAndRenderingMode(&postProcessParams, mOutputVideoWidth, mOutputVideoHeight);
+ err = applyEffectsAndRenderingMode(&postProcessParams, videoWidth, videoHeight);
return err;
}
M4OSA_ERR VideoEditorPreviewController::setPreviewFrameRenderingMode(
M4xVSS_MediaRendering mode, M4VIDEOEDITING_VideoFrameSize outputVideoSize) {
- //LOGV("setMediaRenderingMode: outputVideoSize = %d", outputVideoSize);
+ LOGV("setMediaRenderingMode: outputVideoSize = %d", outputVideoSize);
mRenderingMode = mode;
switch(outputVideoSize) {
diff --git a/libvideoeditor/vss/common/inc/VideoEditorResampler.h b/libvideoeditor/vss/common/inc/VideoEditorResampler.h
index 2686212..fe9876c 100755
--- a/libvideoeditor/vss/common/inc/VideoEditorResampler.h
+++ b/libvideoeditor/vss/common/inc/VideoEditorResampler.h
@@ -29,6 +29,7 @@
void LVAudiosetVolume(M4OSA_Int32 resamplerContext, M4OSA_Int16 left, M4OSA_Int16 right) ;
void LVAudioresample_LowQuality(M4OSA_Int16* out, M4OSA_Int16* input,
M4OSA_Int32 outFrameCount, M4OSA_Int32 resamplerContext);
+void LVDestroy(M4OSA_Int32 resamplerContext);
void MonoTo2I_16( const M4OSA_Int16 *src,
M4OSA_Int16 *dst,
diff --git a/libvideoeditor/vss/mcs/src/M4MCS_API.c b/libvideoeditor/vss/mcs/src/M4MCS_API.c
index b2b341e..d04befa 100755
--- a/libvideoeditor/vss/mcs/src/M4MCS_API.c
+++ b/libvideoeditor/vss/mcs/src/M4MCS_API.c
@@ -2212,7 +2212,7 @@
pC->iSsrcNbSamplIn = 0;
pC->iSsrcNbSamplOut = 0;
pC->SsrcScratch = M4OSA_NULL;
-
+ pC->pLVAudioResampler = M4OSA_NULL;
/**
* Audio encoder */
pC->pAudioEncCtxt = M4OSA_NULL;
@@ -3378,6 +3378,12 @@
pC->pSsrcBufferOut = M4OSA_NULL;
}
+ if (pC->pLVAudioResampler != M4OSA_NULL)
+ {
+ LVDestroy((M4OSA_Int32)pC->pLVAudioResampler);
+ pC->pLVAudioResampler = M4OSA_NULL;
+ }
+
/* ----- Free the audio encoder stuff ----- */
if( M4OSA_NULL != pC->pAudioEncCtxt )
diff --git a/libvideoeditor/vss/src/M4VSS3GPP_AudioMixing.c b/libvideoeditor/vss/src/M4VSS3GPP_AudioMixing.c
index 157f200..c943513 100755
--- a/libvideoeditor/vss/src/M4VSS3GPP_AudioMixing.c
+++ b/libvideoeditor/vss/src/M4VSS3GPP_AudioMixing.c
@@ -189,6 +189,7 @@
pC->ewc.pEncContext = M4OSA_NULL;
pC->ewc.pDummyAuBuffer = M4OSA_NULL;
pC->ewc.p3gpWriterContext = M4OSA_NULL;
+ pC->pLVAudioResampler = M4OSA_NULL;
/**
* Set the OSAL filesystem function set */
pC->pOsaFileReadPtr = pFileReadPtrFct;
@@ -592,6 +593,12 @@
pC->pTempBuffer = M4OSA_NULL;
}
+ if (pC->pLVAudioResampler != M4OSA_NULL)
+ {
+ LVDestroy(pC->pLVAudioResampler);
+ pC->pLVAudioResampler = M4OSA_NULL;
+ }
+
/**
* Free the shells interfaces */
M4VSS3GPP_unRegisterAllWriters(&pC->ShellAPI);
diff --git a/libvideoeditor/vss/src/VideoEditorResampler.cpp b/libvideoeditor/vss/src/VideoEditorResampler.cpp
index 82a2423..c4d1a8a 100755
--- a/libvideoeditor/vss/src/VideoEditorResampler.cpp
+++ b/libvideoeditor/vss/src/VideoEditorResampler.cpp
@@ -45,19 +45,27 @@
int16_t* mInput;
int nbChannels;
int nbSamples;
+ M4OSA_Int32 outSamplingRate;
+ M4OSA_Int32 inSamplingRate;
};
+#define MAX_SAMPLEDURATION_FOR_CONVERTION 40 //ms
status_t VideoEditorResampler::getNextBuffer(AudioBufferProvider::Buffer *pBuffer) {
- pBuffer->raw = (void*)(this->mInput);
+ uint32_t dataSize = pBuffer->frameCount * this->nbChannels * sizeof(int16_t);
+ int16_t *pTmpInBuffer = (int16_t*)malloc(dataSize);
+ memcpy(pTmpInBuffer, this->mInput, dataSize);
+ pBuffer->raw = (void*)pTmpInBuffer;
+
return OK;
}
void VideoEditorResampler::releaseBuffer(AudioBufferProvider::Buffer *pBuffer) {
if(pBuffer->raw != NULL) {
+ free(pBuffer->raw);
pBuffer->raw = NULL;
}
pBuffer->frameCount = 0;
@@ -74,9 +82,11 @@
if (context->mResampler == NULL) {
return NO_MEMORY;
}
- context->mResampler->setSampleRate(32000);
+ context->mResampler->setSampleRate(android::VideoEditorResampler::kFreq32000Hz);
context->mResampler->setVolume(0x1000, 0x1000);
context->nbChannels = inChannelCount;
+ context->outSamplingRate = sampleRate;
+ context->mInput = NULL;
return ((M4OSA_Int32)context);
}
@@ -91,9 +101,10 @@
* nbSamples is calculated for 40ms worth of data;hence sample rate
* is used to calculate the nbSamples
*/
- context->nbSamples = inSampleRate / 25;
- context->mInput = (int16_t*)malloc(context->nbSamples *
- context->nbChannels * sizeof(int16_t));
+ context->inSamplingRate = inSampleRate;
+ // Allocate buffer for maximum allowed number of samples.
+ context->mInput = (int16_t*)malloc( (inSampleRate * MAX_SAMPLEDURATION_FOR_CONVERTION *
+ context->nbChannels * sizeof(int16_t)) / 1000);
}
void LVAudiosetVolume(M4OSA_Int32 resamplerContext, M4OSA_Int16 left, M4OSA_Int16 right) {
@@ -103,6 +114,26 @@
context->mResampler->setVolume(left,right);
}
+void LVDestroy(M4OSA_Int32 resamplerContext) {
+
+ VideoEditorResampler *context =
+ (VideoEditorResampler *)resamplerContext;
+
+ if (context->mInput != NULL) {
+ free(context->mInput);
+ context->mInput = NULL;
+ }
+
+ if (context->mResampler != NULL) {
+ delete context->mResampler;
+ context->mResampler = NULL;
+ }
+
+ if (context != NULL) {
+ delete context;
+ context = NULL;
+ }
+}
void LVAudioresample_LowQuality(M4OSA_Int16* out, M4OSA_Int16* input,
M4OSA_Int32 outFrameCount, M4OSA_Int32 resamplerContext) {
@@ -110,7 +141,10 @@
VideoEditorResampler *context =
(VideoEditorResampler *)resamplerContext;
int32_t *pTmpBuffer = NULL;
+
+ context->nbSamples = (context->inSamplingRate * outFrameCount) / context->outSamplingRate;
memcpy(context->mInput,input,(context->nbSamples * context->nbChannels * sizeof(int16_t)));
+
/*
SRC module always gives stereo output, hence 2 for stereo audio
*/