upnpavcontroller/upnpavcontrollerhelper/src/upnpdlnautility.cpp
author Sampo Huttunen <sampo.huttunen@nokia.com>
Fri, 05 Nov 2010 18:31:17 +0200
branchIOP_Improvements
changeset 43 9b689d9d3a1c
parent 38 5360b7ddc251
permissions -rw-r--r--
Added signed SIS. Also updated package definition file and did some capitalization corrections to few mmp files.

/*
* Copyright (c) 2007 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:      Utility for working with files in upnp context
*
*/






// INCLUDE FILES
#include <e32std.h>
#include <e32des8.h> 
#include "upnpdlnautility.h"

// CONSTANTS

#define CHARTOVOID(chr) (const void*)chr

/**
 * pointer array for mime types 
 */
const void* const KMimeTypes[]=
    {
    CHARTOVOID("video/mp4"),
    CHARTOVOID("video/3gpp"),
    CHARTOVOID("audio/mpeg"),
    CHARTOVOID("audio/x-ms-wma"),
    CHARTOVOID("audio/3gpp"),
    CHARTOVOID("audio/mp4"),
    CHARTOVOID("audio/vnd.dlna.adts"),
    CHARTOVOID("audio/x-wav"),
    CHARTOVOID("audio/x-aac"),
    CHARTOVOID("audio/aac"),
    CHARTOVOID("audio/x-m4a"),
    CHARTOVOID("image/jpeg"),
    CHARTOVOID("image/png"),
    CHARTOVOID("image/gif"),
    CHARTOVOID("image/bmp")
    };

/**
 * pointer array for dlna types 
 */
const void* const KDlnaTypes[]=
    {
    CHARTOVOID( "AVC_MP4_BL_CIF15_AAC_520" ),
    CHARTOVOID( "MPEG4_H263_3GPP_P3_L10_AMR" ), 
    CHARTOVOID( "MPEG4_P2_3GPP_SP_L0B_AMR" ), 
    CHARTOVOID( "MPEG4_P2_MP4_ASP_AAC" ), 
    CHARTOVOID( "MPEG4_P2_MP4_ASP_HEAAC" ), 
    CHARTOVOID( "MPEG4_P2_MP4_ASP_L4_SO_AAC" ), 
    CHARTOVOID( "MPEG4_P2_MP4_ASP_L4_SO_HEAAC" ), 
    CHARTOVOID( "MPEG4_P2_MP4_SP_VGA_AAC" ), 
    CHARTOVOID( "MPEG4_P2_MP4_SP_VGA_HEAAC" ), 
    CHARTOVOID( "MPEG4_P2_MP4_SP_L2_AAC" ), 
    CHARTOVOID( "MPEG4_P2_MP4_SP_AAC" ),    
    CHARTOVOID( "MPEG4_P2_3GPP_SP_L0B_AAC"),
    CHARTOVOID( "AVC_MP4_BL_CIF15_AAC" ), 
    CHARTOVOID( "AVC_MP4_BL_CIF15_AAC_LTP" ), 
    CHARTOVOID( "AVC_MP4_BL_CIF15_AAC_LTP_520" ), 
    CHARTOVOID( "AVC_MP4_BL_CIF30_AAC_940" ), 
    CHARTOVOID( "AVC_MP4_BL_L12_CIF15_HEAAC" ),
    CHARTOVOID( "AVC_TS_BL_CIF15_AAC" ),   
    CHARTOVOID( "AVC_MP4_MP_HD_720p_AAC" ),
    CHARTOVOID( "AVC_MP4_HP_HD_AAC" ),    
    // Audio profiles that can be played on device 
    CHARTOVOID( "AAC_ISO" ), 
    CHARTOVOID( "AAC_ISO_320" ),
    CHARTOVOID( "AAC_ADTS" ), 
    CHARTOVOID( "AAC_ADTS_320" ), 
    CHARTOVOID( "AAC_MULT5_ISO" ),
    CHARTOVOID( "HEAAC_L2_ISO" ), 
    CHARTOVOID( "HEAAC_L2_ISO_320" ), 
    CHARTOVOID( "HEAAC_L2_ADTS" ), 
    CHARTOVOID( "HEAAC_L2_ADTS_320" ), 
    CHARTOVOID( "HEAAC_MULT5_ISO" ), 
    CHARTOVOID( "HEAAC_L3_ADTS" ), 
    CHARTOVOID( "AMR_3GPP" ), 
    CHARTOVOID( "AMR_WBplus" ), 
    CHARTOVOID( "MP3" ),
    CHARTOVOID( "MP3X" ), 
    CHARTOVOID( "WMABASE" ),
    CHARTOVOID( "WMAFULL" ),    
    // Image profiles that can be played on device 
    CHARTOVOID( "JPEG_LRG" ), 
    CHARTOVOID( "JPEG_MED" ), 
    CHARTOVOID( "JPEG_SM" ),
    CHARTOVOID( "PNG_LRG" ),
    CHARTOVOID( "JPEG_LRG_ICO" ),
    CHARTOVOID( "JPEG_SM_ICO" ),
    CHARTOVOID( "JPEG_TN" ),
    CHARTOVOID( "PNG_TN" ),
    CHARTOVOID( "PNG_SM_ICO" ),
    CHARTOVOID( "PNG_LRG_ICO" )
    };

const TStringTable UPnPDlnaUtility::iMimeTypes = 
    {
    15, 
    KMimeTypes, 
    EFalse
    };

const TStringTable UPnPDlnaUtility::iDlnaTypes = 
    {
    47, 
    KDlnaTypes, 
    EFalse
    };

// ============================ LOCAL FUNCTIONS =============================

// --------------------------------------------------------------------------
// UPnPDlnaUtility::GetSupportedProfilesL
// Returns Supported dlna profiles, Only player mode supported.
// --------------------------------------------------------------------------
EXPORT_C CDesC8Array& UPnPDlnaUtility::GetSupportedProfilesL( 
    const TDlnaMode aMode )
    {
    CDesC8Array* array = new (ELeave) CDesC8ArrayFlat( 10 );
    CleanupStack::PushL( array );
    // At the m
    switch( aMode )
        {         
        case EDMPMode:
            {
            // Video profiles that can be played on device
            
            for ( TInt i(0) ; i < UPnPDlnaUtility::iDlnaTypes.iCount ; ++i )
                {
                array->AppendL( TPtrC8( 
                (const TUint8*)(UPnPDlnaUtility::iDlnaTypes.iTable[i]) ) );
                }
            break;
            }
        case EDMSMode:
        case EDMUMode:      
        case EDMDMode:    
        default:            
            {
            User::Leave( KErrNotSupported );
            break;
            }             
        }
    CleanupStack::Pop( array );        
    return *array;        
    }
    
// --------------------------------------------------------------------------
// UPnPDlnaUtility::IsSupportedMimeType
// Returns ETrue if aMime is such a mime type for which playback on device 
// might be supported.
// -------------------------------------------------------------------------- 
EXPORT_C TBool UPnPDlnaUtility::IsSupportedMimeType( const TDesC8& aMime ) 
    {
    return UPnPDlnaUtility::IsSupported(iMimeTypes,aMime);
    }
    
// --------------------------------------------------------------------------
// UPnPDlnaUtility::IsSupportedDlnaProfile
// Returns ETrue if aProfile is such a DLNA profile for which playback on 
// device might be supported.
// -------------------------------------------------------------------------- 
EXPORT_C TBool UPnPDlnaUtility::IsSupportedDlnaProfile( 
    const TDesC8& aProfile ) 
    {
    return UPnPDlnaUtility::IsSupported(iDlnaTypes,aProfile);  
    }

//---------------------------------------------------------------------------
// IsSupported
//---------------------------------------------------------------------------
TBool UPnPDlnaUtility::IsSupported( const TStringTable& aTable 
                                  , const TDesC8& aType )
    {
    TBool ret( EFalse );
    for ( TInt i(0) ; i < aTable.iCount ; ++i )
        {
        if ( aType == TPtrC8( (const TUint8*)(aTable.iTable[i]) ) )
            {
            ret = ETrue;
            i = aTable.iCount;
            }
        }
    return ret;
    }

// End of file