diff -r 000000000000 -r 951a5db380a0 videoeditorengine/audioeditorengine/src/ProcVisProcessor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/audioeditorengine/src/ProcVisProcessor.cpp Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,464 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - Initial contribution +* +* Contributors: +* Ixonos Plc +* +* Description: +* +*/ + + + + +#include "ProcVisProcessor.h" +#include "audconstants.h" + +#include "ProcMP4InFileHandler.h" +#include "ProcADTSInFileHandler.h" +#include "ProcMP3InFileHandler.h" +#include "ProcAWBInFileHandler.h" +#include "ProcWAVInFileHandler.h" +#include "ProcAMRInFileHandler.h" + + +#include "ProcAMRFrameHandler.h" +#include "ProcAACFrameHandler.h" +#include "ProcMP3FrameHandler.h" +#include "ProcAWBFrameHandler.h" +#include "ProcWAVFrameHandler.h" + +CProcVisProcessor* CProcVisProcessor::NewL() + { + + + CProcVisProcessor* self = new (ELeave) CProcVisProcessor(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CProcVisProcessor* CProcVisProcessor::NewLC() + { + CProcVisProcessor* self = new (ELeave) CProcVisProcessor(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + + +CProcVisProcessor::~CProcVisProcessor() + { + + if (iVisualization != 0) + { + delete[] iVisualization; + } + if (iInFile != 0) + { + delete iInFile; + } + if (iFrameHandler != 0) + { + delete iFrameHandler; + } + + } + +void CProcVisProcessor::VisualizeClipL(const CAudClipInfo* aClipInfo, TInt aSize) + { + + // initialize... + iClipInfo = aClipInfo; + iVisualizationSize = aSize; + iVisualization = new (ELeave) TInt8[iVisualizationSize]; + + + if (aClipInfo->Properties().iFileFormat == EAudFormatAMR) + { + CProcInFileHandler* inFileHandler = CProcAMRInFileHandler::NewL(aClipInfo->FileName(), + aClipInfo->FileHandle(), + 0, 2048); + iInFile = inFileHandler; + iFrameHandler = CProcAMRFrameHandler::NewL(); + TAudFileProperties properties; + inFileHandler->GetPropertiesL(&properties); + inFileHandler->SetPropertiesL(properties); + iFrameAmount = properties.iFrameCount; + inFileHandler->SeekAudioFrame(0); + } + else if (aClipInfo->Properties().iFileFormat == EAudFormatAMRWB) + { + CProcInFileHandler* inFileHandler = CProcAWBInFileHandler::NewL(aClipInfo->FileName(), + aClipInfo->FileHandle(), + 0, 2048); + iInFile = inFileHandler; + iFrameHandler = CProcAWBFrameHandler::NewL(); + TAudFileProperties properties; + inFileHandler->GetPropertiesL(&properties); + inFileHandler->SetPropertiesL(properties); + iFrameAmount = properties.iFrameCount; + inFileHandler->SeekAudioFrame(0); + } + else if (aClipInfo->Properties().iFileFormat == EAudFormatMP3) + { + CProcInFileHandler* inFileHandler = CProcMP3InFileHandler::NewL(aClipInfo->FileName(), + aClipInfo->FileHandle(), + 0, 2048); + iInFile = inFileHandler; + iFrameHandler = CProcMP3FrameHandler::NewL(); + TAudFileProperties properties; + inFileHandler->GetPropertiesL(&properties); + inFileHandler->SetPropertiesL(properties); + iFrameAmount = properties.iFrameCount; + inFileHandler->SeekAudioFrame(0); + } + else if (aClipInfo->Properties().iFileFormat == EAudFormatWAV) + { + CProcInFileHandler* inFileHandler = CProcWAVInFileHandler::NewL(aClipInfo->FileName(), + aClipInfo->FileHandle(), + 0, 8192); + iInFile = inFileHandler; + TAudFileProperties properties; + inFileHandler->GetPropertiesL(&properties); + inFileHandler->SetPropertiesL(properties); + iFrameAmount = properties.iFrameCount; + inFileHandler->SeekAudioFrame(0); + iFrameHandler = CProcWAVFrameHandler::NewL(properties.iNumberOfBitsPerSample); + } + + + else if (aClipInfo->Properties().iFileFormat == EAudFormatMP4 && + aClipInfo->Properties().iAudioType == EAudAAC_MPEG4) + { + + CProcInFileHandler* inFileHandler = CProcMP4InFileHandler::NewL(aClipInfo->FileName(), + aClipInfo->FileHandle(), + 0, 8192); + + iInFile = inFileHandler; + TAudFileProperties properties; + + inFileHandler->GetPropertiesL(&properties); + + inFileHandler->SetPropertiesL(properties); + //inFileHandler->SetPropertiesL(properties); + iFrameAmount = properties.iFrameCount; + inFileHandler->SeekAudioFrame(0); + + TAACFrameHandlerInfo frameInfo; + CProcMP4InFileHandler* MP4inFileHandler = static_cast(inFileHandler); + MP4inFileHandler->GetInfoForFrameHandler(frameInfo); + + iFrameHandler = CProcAACFrameHandler::NewL(frameInfo); + + } + else if (aClipInfo->Properties().iFileFormat == EAudFormatMP4 && + (aClipInfo->Properties().iAudioType == EAudAMR)) + { + + CProcInFileHandler* inFileHandler = CProcMP4InFileHandler::NewL(aClipInfo->FileName(), + aClipInfo->FileHandle(), + 0, 8092); + + iInFile = inFileHandler; + TAudFileProperties properties; + + inFileHandler->GetPropertiesL(&properties); + + inFileHandler->SetPropertiesL(properties); + //inFileHandler->SetPropertiesL(properties); + iFrameAmount = properties.iFrameCount; + inFileHandler->SeekAudioFrame(0); + + iFrameHandler = CProcAMRFrameHandler::NewL(); + + } + else if (aClipInfo->Properties().iFileFormat == EAudFormatMP4 && + (aClipInfo->Properties().iAudioType == EAudAMRWB)) + { + + CProcInFileHandler* inFileHandler = CProcMP4InFileHandler::NewL(aClipInfo->FileName(), + aClipInfo->FileHandle(), + 0, 8092); + + iInFile = inFileHandler; + TAudFileProperties properties; + + inFileHandler->GetPropertiesL(&properties); + + inFileHandler->SetPropertiesL(properties); + //inFileHandler->SetPropertiesL(properties); + iFrameAmount = properties.iFrameCount; + inFileHandler->SeekAudioFrame(0); + + iFrameHandler = CProcAWBFrameHandler::NewL(); + + } + else if (aClipInfo->Properties().iFileFormat == EAudFormatAAC_ADTS && + aClipInfo->Properties().iAudioType == EAudAAC_MPEG4 + ) + { + + CProcInFileHandler* inFileHandler = CProcADTSInFileHandler::NewL(aClipInfo->FileName(), + aClipInfo->FileHandle(), + 0, 8092); + + + + iInFile = inFileHandler; + TAudFileProperties properties; + + inFileHandler->GetPropertiesL(&properties); + + inFileHandler->SetPropertiesL(properties); + iFrameAmount = properties.iFrameCount; + inFileHandler->SeekAudioFrame(0); + + TAACFrameHandlerInfo frameInfo; + CProcADTSInFileHandler* ADTSinFileHandler = static_cast(inFileHandler); + ADTSinFileHandler->GetInfoForFrameHandler(frameInfo); + + iFrameHandler = CProcAACFrameHandler::NewL(frameInfo); + + } + + + } + +TBool CProcVisProcessor::VisualizeClipPieceL(TInt &aProgress) + { + + if (iInFile == 0) + return ETrue; + + if (iVisualizationPos >= iVisualizationSize) + { + if (iInFile != 0) + { + delete iInFile; + iInFile = 0; + } + + if (iFrameHandler != 0) + { + delete iFrameHandler; + iFrameHandler = 0; + } + return ETrue; + } + + HBufC8* point = 0; + TInt siz; + TInt32 tim = 0; + + RArray gains; + + TAudType audType = iClipInfo->Properties().iAudioType; + + + TInt maxGain = 0; + TInt gainAmount = 0; + TInt divider = 0; + for (TInt b = 0 ; b < 2 ; b++) + { + gains.Reset(); + + + TBool decReq = iInFile->DecodingRequired(); + iInFile->SetDecodingRequired(EFalse); + TBool tmp = EFalse; + + if (!iInFile->GetAudioFrameL(point, siz, tim, tmp)) + { + iInFile->SetDecodingRequired(decReq); + + delete iInFile; + iInFile = 0; + delete iFrameHandler; + iFrameHandler = 0; + return ETrue; + + } + iInFile->SetDecodingRequired(decReq); + CleanupStack::PushL(point); + + iFramesProcessed++; + if (siz > 0) + { + + + iFrameHandler->GetGainL(point, gains, maxGain); + + if (point != NULL) + { + CleanupStack::PopAndDestroy(point); + } + + + if (audType == EAudAMR || audType == EAudAMRWB) + { + + for (TInt c = 0 ; c < gains.Count() ; c++) + { + if (gains[c] > gainAmount) + { + gainAmount = gains[c]; + } + + //gainAmount+=gains[c]; + } + } + else if (audType == EAudAAC_MPEG4) + { + for (TInt c = 0 ; c < gains.Count() ; c++) + { + if (gains[c] > gainAmount) + { + gainAmount = gains[c]; + } + + //gainAmount+=gains[c]; + } + } + else if (audType == EAudMP3) + { + for (TInt c = 0 ; c < gains.Count() ; c++) + { + + gainAmount+=gains[c]; + divider++; + } + //gainAmount /= gains.Count(); + } + else if (audType == EAudWAV) + { + for (TInt c = 0 ; c < gains.Count() ; c++) + { + + gainAmount+=gains[c]; + divider++; + } + //gainAmount /= gains.Count(); + } + + } + + else + { + CleanupStack::PopAndDestroy(point); + // silent frame + gains.Append(0); + gains.Append(0); + maxGain = 1; + } + } + + + if (audType == EAudMP3 && divider > 0) gainAmount/= divider; + if (audType == EAudWAV && divider > 0) gainAmount/= divider; + + + + iVisualizationProcessed = (iFramesProcessed*KAedMaxVisualizationResolution)/iFrameAmount; + + + while (iVisualizationWritten <= iVisualizationProcessed) + { + if (iVisualizationPos >= iVisualizationSize) + { + break; + } + + if (audType == EAudAAC_MPEG4) + { + + TReal ga(gainAmount-100); + TReal exponent= ga/36; + TReal visResult(0); + Math::Pow(visResult, 10, exponent); + + TInt16 visR = 0; + TInt err = Math::Int(visR, visResult); + + if (visR > 127) visR = 127; + + if (err == KErrNone) + { + iVisualization[iVisualizationPos] = static_cast(visR); + } + else + { + iVisualization[iVisualizationPos] = 0; + + } + + } + else + { + TInt visValue = (127*gainAmount)/maxGain; + + if (visValue < 0) + { + visValue = 0; + } + else if (visValue > KMaxTInt8) + { + visValue = KMaxTInt8; + } + + iVisualization[iVisualizationPos] = static_cast(visValue); + } + iVisualizationPos++; + iVisualizationWritten = (KAedMaxVisualizationResolution*iVisualizationPos)/iVisualizationSize; + } + + + gains.Reset(); + aProgress = iVisualizationWritten/(KAedMaxVisualizationResolution/100); // convert resolution to percentages + return EFalse; + + + } + +void CProcVisProcessor::GetFinalVisualizationL(TInt8*& aVisualization, TInt& aSize) + { + + if (iVisualization == 0) + { + User::Leave(KErrNotReady); + } + + aVisualization = new (ELeave) TInt8[iVisualizationSize]; + + for (TInt a = 0 ; a < iVisualizationSize ; a++) + { + aVisualization[a] = iVisualization[a]; + } + aSize = iVisualizationSize; + + delete[] iVisualization; + iVisualization = 0; + + } + + +void CProcVisProcessor::ConstructL() + { + + } + +CProcVisProcessor::CProcVisProcessor() + { + + } +