camappengine/Engine/Src/CaeVideoQualityLevels.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:23:23 +0100
branchRCL_3
changeset 34 27fe719c32e6
parent 0 9b3e960ffc8a
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201031 Kit: 201035

/*
* Copyright (c) 2002 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:  Camera Application Engine video quality level and container
*
*/



// INCLUDE FILES

#include "CaeVideoQualityLevels.h"

#include "CaeEngineImp.h"       // For LOGTEXT

// CONSTANTS
const TInt KQualityLevelArrayGranularity = 3;



// ============================ MEMBER FUNCTIONS ===============================


// -----------------------------------------------------------------------------
// CCaeVideoQualityLevelsCont::CCaeVideoQualityLevelsCont
// Default constructor.
// -----------------------------------------------------------------------------
//
CCaeVideoQualityLevelsCont::CCaeVideoQualityLevelsCont()
: iQltyLevelCountSdKey( KCaeVideoQltyLevelCount )
    {
    }


// -----------------------------------------------------------------------------
// CCaeVideoQualityLevelsCont::~CCaeVideoQualityLevelsCont
// Destructor.
// -----------------------------------------------------------------------------
//
CCaeVideoQualityLevelsCont::~CCaeVideoQualityLevelsCont()
    {
    delete iQualityLevels;
    }


// -----------------------------------------------------------------------------
// CCaeVideoQualityLevelsCont::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CCaeVideoQualityLevelsCont::ConstructL()
    {
    LOGTEXT( _L( "Cae: CCaeVideoQualityLevelsCont::ConstructL() entering" ) );

    iQualityLevels = new( ELeave ) CArrayFixFlat<CVideoQualityLevel>( KQualityLevelArrayGranularity );

    LOGTEXT( _L( "Cae: CCaeVideoQualityLevelsCont::ConstructL() returning" ) );
    }



// -----------------------------------------------------------------------------
// CCaeVideoQualityLevelsCont::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CCaeVideoQualityLevelsCont* CCaeVideoQualityLevelsCont::NewL()
    {
    LOGTEXT( _L( "Cae: CCaeVideoQualityLevelsCont::NewL() entering" ) );

    CCaeVideoQualityLevelsCont* self = new( ELeave ) CCaeVideoQualityLevelsCont;

    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );

    LOGTEXT( _L( "Cae: CCaeVideoQualityLevelsCont::NewL() returning" ) );

    return self;
    }
    

// -----------------------------------------------------------------------------
// CCaeVideoQualityLevelsCont::InitDefaultsL
// Sets hardcoded default parameters for default video quality levels that 
// are created.
// -----------------------------------------------------------------------------
//
TInt CCaeVideoQualityLevelsCont::InitDefaultsL()
    {
    LOGTEXT( _L( "Cae: CCaeVideoQualityLevelsCont::InitL() entering" ) );

    // Delete all elements from the array and 
    // free the memory allocated to the array buffer.
    iQualityLevels->Reset();

    // Initialize hardcoded default quality levels.

    TSize size;

    CVideoQualityLevel* videoQualityLevel = new( ELeave ) CVideoQualityLevel;
    CleanupStack::PushL( videoQualityLevel );
    
    // Level 0:
    size.SetSize( KImgWidthQCIF, KImgHeightQCIF );
    videoQualityLevel->iFrameSize    = size;
    videoQualityLevel->iFrameRate    = 15.0;  // Frames per second. Basically HW dependent.
    videoQualityLevel->iBitRate      = 64000; // Bits per second. Basically HW dependent.
    videoQualityLevel->iAudioEnabled = EFalse;
    videoQualityLevel->iAudioBitRate = 12200; // Bits per second. Basically HW dependent.
    videoQualityLevel->iMimeType.Copy( KVideoMimeType );
    videoQualityLevel->iPreferredSupplier.Copy( KPreferredSupplier );
    videoQualityLevel->iVideoType.Copy( KVideoType );
    videoQualityLevel->iAudioType.Copy( KAudioType );
    videoQualityLevel->iStorageRate = 78000;  // That many bits per second to store. Estimate only
    videoQualityLevel->iKey = KCaeVideoQltyLevel0;

    iQualityLevels->AppendL( *videoQualityLevel );

    // Level 1:
    size.SetSize( KImgWidthSubQCIF, KImgHeightSubQCIF );
    videoQualityLevel->iFrameSize    = size;
    videoQualityLevel->iFrameRate    = 15.0;  // Frames per second. Basically HW dependent.
    videoQualityLevel->iBitRate      = 60000; // Bits per second. Basically HW dependent.
    videoQualityLevel->iAudioEnabled = EFalse;
    videoQualityLevel->iAudioBitRate = 6700;  // Bits per second. Basically HW dependent.
    videoQualityLevel->iMimeType.Copy( KVideoMimeType );
    videoQualityLevel->iPreferredSupplier.Copy( KPreferredSupplier );
    videoQualityLevel->iVideoType.Copy( KVideoType );
    videoQualityLevel->iAudioType.Copy( KAudioType );
    videoQualityLevel->iStorageRate = 68000;  // That many bits per second to store. Estimate only
    videoQualityLevel->iKey = KCaeVideoQltyLevel1;

    iQualityLevels->AppendL( *videoQualityLevel );

    // Level 2:
    size.SetSize( KImgWidthSubQCIF, KImgHeightSubQCIF );
    videoQualityLevel->iFrameSize    = size;
    videoQualityLevel->iFrameRate    = 5.0;   // Frames per second. Basically HW dependent.
    videoQualityLevel->iBitRate      = 40000; // Bits per second. Basically HW dependent.
    videoQualityLevel->iAudioEnabled = EFalse;
    videoQualityLevel->iAudioBitRate = 5150;  // Bits per second. Basically HW dependent.
    videoQualityLevel->iMimeType.Copy( KVideoMimeType );
    videoQualityLevel->iPreferredSupplier.Copy( KPreferredSupplier );
    videoQualityLevel->iVideoType.Copy( KVideoType );
    videoQualityLevel->iAudioType.Copy( KAudioType );
    videoQualityLevel->iStorageRate = 47000;  // That many bits per second to store. Estimate only
    videoQualityLevel->iKey = KCaeVideoQltyLevel2;

    iQualityLevels->AppendL( *videoQualityLevel );

    CleanupStack::PopAndDestroy( videoQualityLevel );

    LOGTEXT( _L( "Cae: CCaeVideoQualityLevelsCont::InitL() returning" ) );

    return iQualityLevels->Count();
    }


// -----------------------------------------------------------------------------
// CCaeVideoQualityLevelsCont::Count
// -----------------------------------------------------------------------------
//
TInt CCaeVideoQualityLevelsCont::Count() const
    {
    return iQualityLevels->Count();
    }

        
// -----------------------------------------------------------------------------
// CCaeVideoQualityLevelsCont::At
// -----------------------------------------------------------------------------
//
CVideoQualityLevel& CCaeVideoQualityLevelsCont::At( 
    TInt aIndex ) const
    {
    return iQualityLevels->At( aIndex );
    }


// -----------------------------------------------------------------------------
// CCaeVideoQualityLevelsCont::Key
// -----------------------------------------------------------------------------
//
const TDes& CCaeVideoQualityLevelsCont::Key( 
    TInt aIndex ) const
    {
    return iQualityLevels->At( aIndex ).iKey;
    }


// -----------------------------------------------------------------------------
// CCaeVideoQualityLevelsCont::ResizeL
// -----------------------------------------------------------------------------
//
void CCaeVideoQualityLevelsCont::ResizeL( 
    TInt aQualityLevelCount )
    {
    iQualityLevels->ResizeL( aQualityLevelCount );
    }


// -----------------------------------------------------------------------------
// CCaeVideoQualityLevelsCont::QltyLevelCountSdKey
// -----------------------------------------------------------------------------
//
const TDesC& CCaeVideoQualityLevelsCont::QltyLevelCountSdKey() const
    {
    return iQltyLevelCountSdKey;
    }


/////////////////////////////
// CVideoQualityLevel methods 
/////////////////////////////


// -----------------------------------------------------------------------------
// CVideoQualityLevel::CVideoQualityLevel
// Default constructor.
// -----------------------------------------------------------------------------
//
CVideoQualityLevel::CVideoQualityLevel()
:CQualityLevel()
    {
    }


// -----------------------------------------------------------------------------
// CVideoQualityLevel::~CVideoQualityLevel
// Destructor.
// -----------------------------------------------------------------------------
//
CVideoQualityLevel::~CVideoQualityLevel()
    {
    }


//  End of File