diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconvideoparser.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconvideoparser.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,568 +0,0 @@ -/* -* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "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: -* -* Description: CSConVideoParser implementation -* -*/ - - -#include -#include -#include -#include "sconvideoparser.h" -#include "debug.h" - -_LIT( KMimeType, "MimeType" ); -_LIT8( KImageEncoderMimeType, "image/jpeg" ); -_LIT( KMimeTypeAudio, "audio/*" ); -_LIT( KMimeTypeVideo, "video/*" ); - -const TInt KRequestTimeOut( 20000000 ); // 20 sec. - -// ----------------------------------------------------------------------------- -// CSConVideoParser::CSConVideoParser() -// ----------------------------------------------------------------------------- -// -CSConVideoParser::CSConVideoParser() - { - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::~CSConVideoParser() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConVideoParser::~CSConVideoParser() - { - TRACE_FUNC_ENTRY; - delete iTimeOut; - if ( iVideoClip ) - { - iVideoClip->CancelThumb(); - } - delete iVideoClip; - - if ( iVideoUtil ) - { - iVideoUtil->Close(); - } - delete iVideoUtil; - - if ( iWindow ) - { - iWindow->Close(); - } - delete iWindow; - iRootWindow.Close(); - delete iScreen; - iWsSession.Close(); - - delete iThumbnail; - delete iVideoMimeType; - delete iAudioMimeType; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::NewLC() -// ----------------------------------------------------------------------------- -// -CSConVideoParser* CSConVideoParser::NewLC() - { - CSConVideoParser* self = new (ELeave)CSConVideoParser(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::ConstructL() -// Constructor -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::ConstructL() - { - TRACE_FUNC_ENTRY; - - User::LeaveIfError( iWsSession.Connect() ); - - iScreen = new(ELeave) CWsScreenDevice( iWsSession ); - User::LeaveIfError( iScreen->Construct() ); - - iRootWindow = RWindowGroup(iWsSession); - User::LeaveIfError( iRootWindow.Construct(reinterpret_cast(&iWsSession), EFalse) ); - - iWindow = new(ELeave) RWindow( iWsSession ); - User::LeaveIfError( iWindow->Construct(iRootWindow, reinterpret_cast(&iRootWindow) + 1) ); - - TRect temp(0,0,320,240); // dummy parameter - iVideoUtil = CVideoPlayerUtility::NewL(*this, EMdaPriorityNormal, EMdaPriorityPreferenceNone, iWsSession, *iScreen, *iWindow, temp, temp); - - iTimeOut = CSconTimeOut::NewL( *this ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::OpenFileL( const RFs& aFs, const TDesC& aFileName ) -// Opens video file -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::OpenFileL( const RFs& aFs, const TDesC& aFileName ) - { - TRACE_FUNC_ENTRY; - - iVideoUtilReady = EFalse; - iVideoClipReady = EFalse; - iVideoUtilErr = KErrNone; - iVideoClipErr = KErrNone; - - delete iThumbnail; - iThumbnail = NULL; - delete iVideoMimeType; - iVideoMimeType=NULL; - delete iAudioMimeType; - iAudioMimeType=NULL; - - if ( iVideoClip ) - { - iVideoClip->CancelThumb(); - delete iVideoClip; - iVideoClip = NULL; - } - if ( iVideoUtil ) - { - iVideoUtil->Close(); - } - - TBool fileExist = BaflUtils::FileExists( aFs, aFileName ); - if ( !fileExist ) - { - User::Leave( KErrNotFound ); - } - iAsyncStopCalled = EFalse; - iVideoClip = CTNEVideoClipInfo::NewL( aFileName, *this ); - - iVideoUtil->OpenFileL( aFileName ); - - LOGGER_WRITE("Start timeout"); - iTimeOut->Start( KRequestTimeOut ); - - LOGGER_WRITE("iWait.Start()"); - iWait.Start(); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::Thumbnail() -// returns video thumbnail in jpg format -// ----------------------------------------------------------------------------- -// -const TDesC8& CSConVideoParser::Thumbnail() const - { - TRACE_FUNC; - if ( !iThumbnail ) - { - return KNullDesC8; - } - return *iThumbnail; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::VideoFrameRateL() -// returns video frame rate -// ----------------------------------------------------------------------------- -// -TReal32 CSConVideoParser::VideoFrameRateL() const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->VideoFrameRateL(); - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::VideoFrameSizeL() -// returns video frame size -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::VideoFrameSizeL(TSize& aSize) const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->VideoFrameSizeL( aSize ); - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::VideoFormatMimeTypeL() -// returns video format -// ----------------------------------------------------------------------------- -// -const TDesC8& CSConVideoParser::VideoFormatMimeTypeL() const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->VideoFormatMimeType(); - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::VideoBitRateL() -// returns videostream bitrate -// ----------------------------------------------------------------------------- -// -TInt CSConVideoParser::VideoBitRateL() const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->VideoBitRateL(); - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::AudioBitRateL() -// returns audiostream bitrate -// ----------------------------------------------------------------------------- -// -TInt CSConVideoParser::AudioBitRateL() const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->AudioBitRateL(); - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::DurationL() -// returns video duration in milliseconds -// ----------------------------------------------------------------------------- -// -TInt CSConVideoParser::DurationL() const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->DurationL().Int64()/1000; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::VideoMimeTypeL() -// returns video mime type -// ----------------------------------------------------------------------------- -// -const TDesC& CSConVideoParser::VideoMimeTypeL() - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - delete iVideoMimeType; - iVideoMimeType = NULL; - - TInt metadataEntries = iVideoUtil->NumberOfMetaDataEntriesL(); - LOGGER_WRITE_1( "metadataEntries: %d", metadataEntries); - - for (TInt i=0; i < metadataEntries ; i++) - { - CMMFMetaDataEntry* entry = iVideoUtil->MetaDataEntryL(i); - CleanupStack::PushL( entry ); - if ( entry->Name().Compare( KMimeType ) == 0 ) - { - if ( entry->Value().MatchF( KMimeTypeVideo ) == 0 ) - { - LOGGER_WRITE_1( "video mimetype found: %S", &entry->Value()); - iVideoMimeType = HBufC::NewL(entry->Value().Length()); - TPtr videoMimeTypePtr = iVideoMimeType->Des(); - videoMimeTypePtr.Copy( entry->Value() ); - CleanupStack::PopAndDestroy( entry ); - return *iVideoMimeType; - } - } - CleanupStack::PopAndDestroy( entry ); - } - return KNullDesC; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::AudioMimeTypeL() -// returns audio mime type -// ----------------------------------------------------------------------------- -// -const TDesC& CSConVideoParser::AudioMimeTypeL() - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - delete iAudioMimeType; - iAudioMimeType = NULL; - TInt metadataEntries = iVideoUtil->NumberOfMetaDataEntriesL(); - LOGGER_WRITE_1( "metadataEntries: %d", metadataEntries); - - for (TInt i=0; i < metadataEntries ; i++) - { - CMMFMetaDataEntry* entry = iVideoUtil->MetaDataEntryL(i); - CleanupStack::PushL( entry ); - - if ( entry->Name().Compare( KMimeType ) == 0 ) - { - if ( entry->Value().MatchF( KMimeTypeAudio ) == 0 ) - { - LOGGER_WRITE_1( "video mimetype found: %S", &entry->Value()); - iAudioMimeType = HBufC::NewL(entry->Value().Length()); - TPtr audioMimeTypePtr = iAudioMimeType->Des(); - audioMimeTypePtr.Copy( entry->Value() ); - CleanupStack::PopAndDestroy( entry ); - return *iAudioMimeType; - } - } - CleanupStack::PopAndDestroy( entry ); - } - return KNullDesC; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::MvpuoOpenComplete( TInt aError ) -// MVideoPlayerUtilityObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::MvpuoOpenComplete( TInt aError ) - { - TRACE_FUNC_ENTRY; - if ( iVideoUtilReady ) - { - // already timeout - LOGGER_WRITE("Already timeout"); - return; - } - LOGGER_WRITE_1( "aError: %d", aError ); - if ( aError == KErrNone ) - { - iVideoUtil->Prepare(); - } - else - { - iVideoUtilReady = ETrue; - iVideoUtilErr = aError; - } - - if ( iVideoUtilReady && iVideoClipReady && !iAsyncStopCalled ) - { - iAsyncStopCalled = ETrue; - iTimeOut->Cancel(); - LOGGER_WRITE("AsyncStop"); - iWait.AsyncStop(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::MvpuoPrepareComplete( TInt aError ) -// MVideoPlayerUtilityObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::MvpuoPrepareComplete( TInt aError ) - { - TRACE_FUNC_ENTRY; - if ( iVideoUtilReady ) - { - // already timeout - LOGGER_WRITE("Already timeout"); - return; - } - LOGGER_WRITE_1( "aError: %d", aError ); - - iVideoUtilReady = ETrue; - iVideoUtilErr = aError; - - if ( iVideoUtilReady && iVideoClipReady && !iAsyncStopCalled ) - { - iAsyncStopCalled = ETrue; - iTimeOut->Cancel(); - LOGGER_WRITE("AsyncStop"); - iWait.AsyncStop(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::MvpuoFrameReady() -// MVideoPlayerUtilityObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::MvpuoFrameReady( CFbsBitmap& /*aFrame*/,TInt /*aError*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::MvpuoPlayComplete() -// MVideoPlayerUtilityObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::MvpuoPlayComplete( TInt /*aError*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::MvpuoEvent() -// MVideoPlayerUtilityObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::MvpuoEvent( const TMMFEvent& /*aEvent*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::NotifyVideoClipInfoReady(CTNEVideoClipInfo& aInfo, TInt aError) -// MTNEVideoClipInfoObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::NotifyVideoClipInfoReady(CTNEVideoClipInfo& aInfo, TInt aError) - { - TRACE_FUNC_ENTRY; - if ( iVideoClipReady ) - { - // already timeout - LOGGER_WRITE("Already timeout"); - return; - } - LOGGER_WRITE_1("aError: %d", aError); - if ( aError == KErrNone ) - { - TSize resolution(320,240); - TRAPD( err, aInfo.GetThumbL(*this,KBestThumbIndex, &resolution ) ); - - if ( err ) - { - LOGGER_WRITE_1("aInfo.GetThumbL err: %d", err); - iVideoClipReady = ETrue; - iVideoClipErr = err; - } - } - else - { - iVideoClipReady = ETrue; - iVideoClipErr = aError; - } - - if ( iVideoUtilReady && iVideoClipReady && !iAsyncStopCalled ) - { - iAsyncStopCalled = ETrue; - iTimeOut->Cancel(); - LOGGER_WRITE("AsyncStop"); - iWait.AsyncStop(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::NotifyVideoClipThumbCompleted() -// MTNEVideoClipInfoObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::NotifyVideoClipThumbCompleted(CTNEVideoClipInfo& /*aInfo*/, - TInt aError, - CFbsBitmap* aThumb) - { - TRACE_FUNC_ENTRY; - if ( iVideoClipReady ) - { - // already timeout - LOGGER_WRITE("Already timeout"); - delete aThumb; - return; - } - LOGGER_WRITE_1("aError: %d", aError); - if ( aError == KErrNone) - { - delete iThumbnail; - iThumbnail = NULL; - LOGGER_WRITE("create CImageEncoder"); - CImageEncoder* encoder = NULL; - TRAPD( err, encoder = CImageEncoder::DataNewL( iThumbnail, KImageEncoderMimeType, CImageEncoder::EOptionAlwaysThread ) ); - LOGGER_WRITE_1("err: %d", err ); - if ( err == KErrNone ) - { - LOGGER_WRITE("Start Convert"); - TRequestStatus status; - encoder->Convert( &status, *aThumb, NULL ); - - User::WaitForRequest( status ); - LOGGER_WRITE_1("Convert status: %d", status.Int()); - LOGGER_WRITE_1("buf Length: %d", iThumbnail->Length()); - err = status.Int(); - } - delete encoder; - } - delete aThumb; - iVideoClipReady = ETrue; - iVideoClipErr = aError; - - if ( iVideoUtilReady && iVideoClipReady && !iAsyncStopCalled ) - { - iAsyncStopCalled = ETrue; - iTimeOut->Cancel(); - LOGGER_WRITE("AsyncStop"); - iWait.AsyncStop(); - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::TimeOut() -// Called when timeout has occured, cancels videoclip generation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::TimeOut() - { - TRACE_FUNC_ENTRY; - if ( !iVideoClipReady ) - { - iVideoClip->CancelThumb(); - LOGGER_WRITE("videoclip cancelled"); - iVideoClipReady = ETrue; - iVideoClipErr = KErrCancel; - } - - if ( !iVideoUtilReady ) - { - LOGGER_WRITE("videoUtil cancelled"); - iVideoUtilReady = ETrue; - iVideoUtilErr = KErrCancel; - } - - if ( iVideoUtilReady && iVideoClipReady && !iAsyncStopCalled ) - { - LOGGER_WRITE("AsyncStop"); - iAsyncStopCalled = ETrue; - iWait.AsyncStop(); - } - TRACE_FUNC_EXIT; - }