diff -r 000000000000 -r 4e1aa6a622a0 accessoryservices/pluggeddisplay/edidparser/inc/traceediddata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/accessoryservices/pluggeddisplay/edidparser/inc/traceediddata.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,538 @@ +/* + * Copyright (c) 2009 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: + * + */ + +#ifndef TRACEEDIDDATA_H +#define TRACEEDIDDATA_H + +// SYSTEM INCLUDE FILES +#include + +// USER INCLUDE FILES +#include "ediddatatypes.h" +#include "cea861ediddatatypes.h" +#include "videotimings.h" + +// FORWARD DECLARATIONS +static void LogEdidBaseDataL( CEdidParserBase& aSelf ); +static void LogEdidBaseData( CEdidParserBase& aSelf ); +static void LogCea861ExtensionL( CEdidParserBase& aSelf ); + +// DATA TYPES + +// Audio format code literals +_LIT( KAudioFormatNA, "N/A" ); +_LIT( KAudioFormatPCM, "PCM" ); +_LIT( KAudioFormatAC3, "AC-3" ); +_LIT( KAudioFormatMPEG1, "MPEG-1" ); +_LIT( KAudioFormatMP3, "MP3" ); +_LIT( KAudioFormatMPEG2, "MPEG-2" ); +_LIT( KAudioFormatAACLC, "AAC LC" ); +_LIT( KAudioFormatDTS, "DTS" ); +_LIT( KAudioFormatATRAC, "ATRAC" ); +_LIT( KAudioFormatDSD, "DSD" ); +_LIT( KAudioFormatEAC3, "E-AC-3" ); +_LIT( KAudioFormatDTSHD, "DTS-HD" ); +_LIT( KAudioFormatMLP, "MLP" ); +_LIT( KAudioFormatDST, "DST" ); +_LIT( KAudioFormatWMAPRO, "WMA Pro" ); + +// Macro which disables tracing in release builds +#ifdef _DEBUG + + #define TRACE_EDID_DATA( aSelf )\ + {\ + LogEdidBaseData( aSelf );\ + } + + #define TRACE_TIMINGS( aTiming )\ + {\ + LogTiming( aTiming );\ + } + +#else + + #define TRACE_EDID_DATA( aSelf ) + #define TRACE_TIMINGS( aTiming ) + +#endif + + + +// LOCAL FUNCTIONS + +static TPtrC AudioCodeAsDesC( TInt aCode ) + { + TPtrC code( KNullDesC ); + switch( aCode ) + { + case KAudioFormatCodeNA: + { + code.Set( KAudioFormatNA ); + break; + } + case KAudioFormatCodePCM: + { + code.Set( KAudioFormatPCM ); + break; + } + case KAudioFormatCodeAC3: + { + code.Set( KAudioFormatAC3 ); + break; + } + case KAudioFormatCodeMPEG1: + { + code.Set( KAudioFormatMPEG1 ); + break; + } + case KAudioFormatCodeMP3: + { + code.Set( KAudioFormatMP3 ); + break; + } + case KAudioFormatCodeMPEG2: + { + code.Set( KAudioFormatMPEG2 ); + break; + } + case KAudioFormatCodeAACLC: + { + code.Set( KAudioFormatAACLC ); + break; + } + case KAudioFormatCodeDTS: + { + code.Set( KAudioFormatDTS ); + break; + } + case KAudioFormatCodeATRAC: + { + code.Set( KAudioFormatATRAC ); + break; + } + case KAudioFormatCodeDSD: + { + code.Set( KAudioFormatDSD ); + break; + } + case KAudioFormatCodeEAC3: + { + code.Set( KAudioFormatEAC3 ); + break; + } + case KAudioFormatCodeDTSHD: + { + code.Set( KAudioFormatDTSHD ); + break; + } + case KAudioFormatCodeMLP: + { + code.Set( KAudioFormatMLP ); + break; + } + case KAudioFormatCodeDST: + { + code.Set( KAudioFormatDST ); + break; + } + case KAudioFormatCodeWMAPRO: + { + code.Set( KAudioFormatWMAPRO ); + break; + } + default: + { + code.Set( KAudioFormatNA ); + break; + } + } + return code; + } + +// Trace edid base content - cannot leave +static void LogEdidBaseData( CEdidParserBase& aSelf ) + { + TRAP_IGNORE( LogEdidBaseDataL( aSelf ) ); + } + +// Trace edid base content +static void LogEdidBaseDataL( CEdidParserBase& aSelf ) + { + // Edid base + INFO( "--------------------------------------------------------------------" ); + INFO( "EDID BASE DATA:" ); + INFO( "--------------------------------------------------------------------" ); + + // Manufacturer code + TBuf manufacturerCode( KNullDesC ); + aSelf.GetManufacturerCode( manufacturerCode ); + INFO_1( "## Manufacturer code: %S", &manufacturerCode ); + + // Product ID + TBuf productId( KNullDesC ); + aSelf.GetProductId( productId ); + INFO_1( "## Product ID: %S", &productId ); + + // Manufacturer year and week + INFO_2( "## Manufacturer Year: %d, Week: %d", + aSelf.GetManufactureWeek(), aSelf.GetManufactureWeek() ); + + // Version and revision + INFO_2( "## Version: %d.%d", aSelf.GetVersion(), aSelf.GetRevision() ); + + // Video input definition + INFO_1( "## Video input definition: %d", aSelf.GetVideoInputDefinition() ); + + // Screen size + INFO_2( "## Screen size: %d x %d", + aSelf.GetHorizontalScreenSize(), aSelf.GetVerticalScreenSize() ); + + // Is aspect ratio used + INFO_1( "## Aspect ratio used: %d", aSelf.IsAspectRatioUsed() ); + + // Display transfer charasteristic + INFO_1( "## Display transfer characteristics: %d", + aSelf.DisplayTransferCharacteristics() ); + + // Established timings 1 + INFO( "## Established timings 1:" ); + TUint8 timings = aSelf.GetEstablishedTimings1(); + if( timings & E800x600_60Hz ) + { + INFO( "###### 800x600 60Hz" ); + } + if( timings & E800x600_56Hz ) + { + INFO( "###### 800x600 56Hz" ); + } + if( timings & E640x480_75Hz ) + { + INFO( "###### 640x480 75Hz" ); + } + if( timings & E640x480_72Hz ) + { + INFO( "###### 640x480 72Hz" ); + } + if( timings & E640x480_67Hz ) + { + INFO( "###### 640x480 67Hz" ); + } + if( timings & E640x480_60Hz ) + { + INFO( "###### 640x480 60Hz" ); + } + if( timings & E720x400_88Hz ) + { + INFO( "###### 720x400 88Hz" ); + } + if( timings & E720x400_70Hz ) + { + INFO( "###### 720x400 70Hz" ); + } + + // Established timings 2 + INFO( "## Established timings 2:" ); + timings = aSelf.GetEstablishedTimings2(); + if( timings & E1280x1024_75Hz ) + { + INFO( "###### 1280x1024 75Hz" ); + } + if( timings & E1024x768_75Hz ) + { + INFO( "###### 1024x768 75Hz" ); + } + if( timings & E1024x768_70Hz ) + { + INFO( "###### 1024x768 70Hz" ); + } + if( timings & E1024x768_60Hz ) + { + INFO( "###### 1024x768 60Hz" ); + } + if( timings & E1024x768_87Hz ) + { + INFO( "###### 1024x768 87Hz" ); + } + if( timings & E832x624_75Hz ) + { + INFO( "###### 832x624 75Hz" ); + } + if( timings & E800x600_75Hz ) + { + INFO( "###### 800x600 75Hz" ); + } + if( timings & E800x600_72Hz ) + { + INFO( "###### 800x600 72Hz" ); + } + + // Color coordinates + INFO( "## Color coordinates: " ); + INFO_1( "###### Red X: %d", aSelf.GetColorCoordinatesRedX() ); + INFO_1( "###### Red Y: %d", aSelf.GetColorCoordinatesRedY() ); + INFO_1( "###### Green X: %d", aSelf.GetColorCoordinatesGreenX() ); + INFO_1( "###### Green Y: %d", aSelf.GetColorCoordinatesGreenY() ); + INFO_1( "###### Blue X: %d", aSelf.GetColorCoordinatesBlueX() ); + INFO_1( "###### Blue Y: %d", aSelf.GetColorCoordinatesBlueY() ); + INFO_1( "###### White X: %d", aSelf.GetColorCoordinatesWhiteX() ); + INFO_1( "###### White Y: %d", aSelf.GetColorCoordinatesWhiteY() ); + + // Extensions + TInt numOfExtensions = aSelf.GetNumberOfExtensions(); + INFO_1( "## Number of extensions found: %d", numOfExtensions ); + INFO( "--------------------------------------------------------------------" ); + TEdidExtensionTagCode extensionCode = EUnknownExt; + for( TInt i = 0; i < numOfExtensions; i++ ) + { + extensionCode = aSelf.GetExtensionType( i + 1 ); + switch( extensionCode ) + { + case ECea861Ext: + { + LogCea861ExtensionL( aSelf ); + break; + } + case EVTBExt: + { + INFO( "VTB EXTENSION DATA: Not supported" ); + INFO( "--------------------------------------------------------------------" ); + break; + } + case EEDID20: + { + INFO( "EDID 2.0 EXTENSION DATA: Not supported" ); + INFO( "--------------------------------------------------------------------" ); + break; + } + case EDIExt: + { + INFO( "DI EXTENSION DATA: Not supported" ); + INFO( "--------------------------------------------------------------------" ); + break; + } + case ELSExt: + { + INFO( "LS EXTENSION DATA: Not supported" ); + INFO( "--------------------------------------------------------------------" ); + break; + } + case EDPVLExt: + { + INFO( "DPVL EXTENSION DATA: Not supported" ); + INFO( "--------------------------------------------------------------------" ); + break; + } + default: + { + INFO_1( "UNKNOWN EXTENSION DATA [0x%x]: Not supported", extensionCode ); + INFO( "--------------------------------------------------------------------" ); + break; + } + } + } + } + +// Trace CEA 861 extension +static void LogCea861ExtensionL( CEdidParserBase& aSelf ) + { + CCea861EdidParser* extParser = aSelf.CreateCea861ExtensionParserL( 1 ); + CleanupStack::PushL( extParser ); + if( extParser->IsExtensionBlockParsed() ) + { + // CEA 861 extension + INFO( "CEA-861 EXTENSION DATA: Supported" ); + INFO( "--------------------------------------------------------------------" ); + + // Underscan + INFO_1( "## Underscan supported: %d", extParser->Underscan() ); + + // Basic audio + INFO_1( "## Basic audio supported: %d", extParser->BasicAudio() ); + + // YCbCr444 + INFO_1( "## YCbCr444 supported: %d", extParser->YCbCr444() ); + + // YCbCr422 + INFO_1( "## YCbCr422 supported: %d", extParser->YCbCr422() ); + + // Number of native formats supported + INFO_1( "## Number of native formats supported: %d", extParser->TotalNumberOfNativeFormats() ); + + // Video data block + TBool videoDataBlockSupported = extParser->IsVideoDataBlockSupported(); + INFO_1( "## Video data block supported: %d", videoDataBlockSupported ); + if( videoDataBlockSupported ) + { + TInt count = 0; + CCea861ExtEdidInformation* parsedInfo = extParser->GetParsedInformation(); + TCEA861VideoDataBlock* cur = parsedInfo->iShortVideoDescriptors; + while( cur ) + { + count++; + INFO_2( "###### VIC: %d, Native: %d", cur->iVIC, cur->iNative ); + cur = cur->iNext; + } + INFO_1( "###### Number of DTV formats supported: %d", count ); + } + + // Audio data block + TBool audioDataBlockSupported = extParser->IsAudioDataBlockSupported(); + INFO_1( "## Audio data block supported: %d", audioDataBlockSupported ); + if( audioDataBlockSupported ) + { + CCea861ExtEdidInformation* parsedInfo = extParser->GetParsedInformation(); + TCEA861AudioDataBlock* cur = parsedInfo->iShortAudioDescriptors; + while( cur ) + { + TPtrC audioFormatCode( AudioCodeAsDesC( cur->iAudioFormatCode ) ); + INFO_2( "###### Audio format code: 0x%x [%S]", cur->iAudioFormatCode, &audioFormatCode ); + INFO_1( "###### Supports 192kHz: %d", cur->iSupport192kHz ); + INFO_1( "###### Supports 176kHz: %d", cur->iSupport176kHz ); + INFO_1( "###### Supports 96kHz: %d", cur->iSupport96kHz ); + INFO_1( "###### Supports 88kHz: %d", cur->iSupport88kHz ); + INFO_1( "###### Supports 48kHz: %d", cur->iSupport48kHz ); + INFO_1( "###### Supports 44kHz: %d", cur->iSupport44kHz ); + INFO_1( "###### Supports 32kHz: %d", cur->iSupport32kHz ); + INFO_1( "###### Maximum channels: %d", cur->iMaxChannels ); + + TBool bitDataSupported = cur->BitDataSupported(); + INFO_1( "###### Bit data supported: %d", bitDataSupported ); + if( bitDataSupported ) + { + INFO_1( "###### Supports 24-bit rate: %d", cur->iSupport24Bit ); + INFO_1( "###### Supports 20-bit rate: %d", cur->iSupport20Bit ); + INFO_1( "###### Supports 16-bit rate: %d", cur->iSupport16Bit ); + } + TBool maxBitRateValueSupported = cur->MaximumBitRateValueSupported(); + INFO_1( "###### Maximum bit data supported: %d", maxBitRateValueSupported ); + if( maxBitRateValueSupported ) + { + INFO_1( "###### Maximum bit rate: %d", cur->iMaxBitrate ); + } + TBool audioFormatCodeExtSupported = cur->AudioFormatCodeExtensionSupported(); + INFO_1( "###### Audio format code extension supported: %d", audioFormatCodeExtSupported ); + if( audioFormatCodeExtSupported ) + { + INFO_1( "###### Audio format code ext: 0x%x", cur->iAudioFormatCodeExtension ); + } + cur = cur->iNext; + } + } + + // Vendor specific data block + TBool vendorDataBlockSupported = extParser->IsVendorSpecificDataBlockSupported(); + INFO_1( "## Vendor specific data block supported: %d", vendorDataBlockSupported ); + if( vendorDataBlockSupported ) + { + TUint8 latency = extParser->GetVideoLatency(); + INFO_1( "###### Video latency (p): %d ms", latency ); + latency = extParser->GetAudioLatency(); + INFO_1( "###### Audio latency (p): %d ms", latency ); + latency = extParser->GetInterlacedVideoLatency(); + INFO_1( "###### Video latency (i): %d ms", latency ); + latency = extParser->GetInterlacedAudioLatency(); + INFO_1( "###### Audio latency (i): %d ms", latency ); + } + + // Speaker allocation data block + TBool speakerAllocationDataBlockSupported = extParser->IsSpeakerAllocationDataBlockSupported(); + INFO_1( "## Speaker allocation data block supported: %d", speakerAllocationDataBlockSupported ); + if( speakerAllocationDataBlockSupported ) + { + CCea861ExtEdidInformation* parsedInfo = extParser->GetParsedInformation(); + INFO_1( "###### FLW_FRW: %d", parsedInfo->iSpeakerAllocationData.FLW_FRW() ); + INFO_1( "###### RLC_RRC: %d", parsedInfo->iSpeakerAllocationData.RLC_RRC() ); + INFO_1( "###### FLC_FRC: %d", parsedInfo->iSpeakerAllocationData.FLC_FRC() ); + INFO_1( "###### RC: %d", parsedInfo->iSpeakerAllocationData.RC() ); + INFO_1( "###### RL_RR: %d", parsedInfo->iSpeakerAllocationData.RL_RR() ); + INFO_1( "###### FC: %d", parsedInfo->iSpeakerAllocationData.FC() ); + INFO_1( "###### LFE: %d", parsedInfo->iSpeakerAllocationData.LFE() ); + INFO_1( "###### FL_FR: %d", parsedInfo->iSpeakerAllocationData.FL_FR() ); + INFO_1( "###### TC: %d", parsedInfo->iSpeakerAllocationData.TC() ); + INFO_1( "###### FLH_FRH: %d", parsedInfo->iSpeakerAllocationData.FLH_FRH() ); + } + INFO( "--------------------------------------------------------------------" ); + } + CleanupStack::PopAndDestroy( extParser ); + } + +// Log timing item +static void LogTiming( const THdmiDviTimings& aTiming ) + { + INFO( "--------------------------------------------------------------------" ); + if( aTiming.iCeaMode ) + { + INFO_1( "Mode: CEA, Id: %d", aTiming.iCeaMode ); + } + else if( aTiming.iDmtMode ) + { + INFO_1( "Mode: DMT, Id: %d", aTiming.iDmtMode ); + } + else + { + INFO( "Mode: Unknown, Id: Not set" ); + } + INFO_1( "Interlaced: %d", aTiming.iInterlaced ); + INFO_1( "Width: %d", aTiming.iHorizontalActivePixels ); + INFO_1( "Height: %d", aTiming.iVerticalActiveLines ); + INFO_1( "DOT clock: %d [kHz]", aTiming.iPixelClockKHz ); + INFO_1( "Pixel repeat: %d", aTiming.iPixelRepeat ); + if( aTiming.iImageAspectRatio == TTvSettings::E4d3 ) + { + INFO( "Aspect ratio: 4:3" ); + } + else if( aTiming.iImageAspectRatio == TTvSettings::E16d9 ) + { + INFO( "Aspect ratio: 16:9" ); + } + else + { + INFO( "Aspect ratio: Undefined" ); + } + INFO_1( "Pixel Aspect Ratio Numerator: %d", aTiming.iPixelAspectRatioNumerator ); + INFO_1( "Pixel Aspect Ratio Denominator: %d", aTiming.iPixelAspectRatioDenominator ); + INFO_1( "Horizontal front porch: %d", aTiming.iHorizontalSyncOffsetPixels ); + INFO_1( "Horizontal sync: %d", aTiming.iHorizontalSyncOffsetPixels ); + INFO_1( "Horizontal blanking: %d", aTiming.iHorizontalBlankingPixels ); + INFO_1( "Horizontal active lines: %d", aTiming.iHorizontalActivePixels ); + INFO_1( "Vertical 1st front porch: %d", aTiming.iVerticalSyncOffsetLinesField1 ); + INFO_1( "Vertical 1st sync: %d", aTiming.iVerticalSyncPulseWidthLinesField1 ); + INFO_1( "Vertical 1st blanking: %d", aTiming.iVerticalBlankingLines ); + INFO_1( "Vertical 1st active lines: %d", aTiming.iVerticalActiveLines ); + INFO_1( "Vertical 2nd front porch: %d", aTiming.iVerticalSyncOffsetLinesField2 ); + INFO_1( "Vertical 2nd sync: %d", aTiming.iVerticalSyncPulseWidthLinesField2 ); + INFO_1( "Vertical 2nd blanking: %d", aTiming.iVerticalBlankingLines ); + INFO_1( "Vertical 2nd active lines: %d", aTiming.iVerticalActiveLines ); + if( !aTiming.iHorizontalSyncPolarity ) + { + INFO( "Horizontal sync polarity: Negative" ); + } + else + { + INFO( "Horizontal sync polarity: Positive" ); + } + if( !aTiming.iVerticalSyncPolarity ) + { + INFO( "Vertical sync polarity: Negative" ); + } + else + { + INFO( "Vertical sync polarity: Positive" ); + } + } + +#endif // TRACEEDIDDATA_H