641 // |
643 // |
642 void CEDIDHandler::FillCommonHdmiDviTimings( THdmiDviTimings& aTimings ) const |
644 void CEDIDHandler::FillCommonHdmiDviTimings( THdmiDviTimings& aTimings ) const |
643 { |
645 { |
644 FUNC_LOG; |
646 FUNC_LOG; |
645 |
647 |
646 aTimings.iTvPhysicalImageWidthMm = iEdidParserPtr->GetHorizontalScreenSize() * 10; |
|
647 aTimings.iTvPhysicalImageHeightMm = iEdidParserPtr->GetVerticalScreenSize() * 10; |
|
648 aTimings.iTvPhysicalImageAspectRatioNumerator = 0; |
648 aTimings.iTvPhysicalImageAspectRatioNumerator = 0; |
649 aTimings.iTvPhysicalImageAspectRatioDenominator = 0; |
649 aTimings.iTvPhysicalImageAspectRatioDenominator = 0; |
650 aTimings.iHorizontalBorderPixels = 0; |
650 aTimings.iHorizontalBorderPixels = 0; |
651 aTimings.iVerticalBorderLinesField1 = 0; |
651 aTimings.iVerticalBorderLinesField1 = 0; |
652 aTimings.iVerticalBorderLinesField2 = 0; |
652 aTimings.iVerticalBorderLinesField2 = 0; |
653 aTimings.iLeftBorderPixels = 0; |
653 aTimings.iLeftBorderPixels = 0; |
654 aTimings.iRightBorderPixels = 0; |
654 aTimings.iRightBorderPixels = 0; |
655 aTimings.iUnderscanEnabled = EFalse; |
|
656 |
655 |
657 if( iExtensionParserPtr ) |
656 if( iExtensionParserPtr ) |
658 { |
657 { |
|
658 INFO("==CEA Extension Exists"); |
659 aTimings.iUnderscanEnabled = iExtensionParserPtr->Underscan(); |
659 aTimings.iUnderscanEnabled = iExtensionParserPtr->Underscan(); |
660 } |
660 } |
|
661 else |
|
662 { |
|
663 INFO("==No CEA Extension"); |
|
664 // No CEA Extension so it should be DVI |
|
665 // Underscan supported always |
|
666 aTimings.iTvPhysicalImageAspectRatioNumerator = 4; |
|
667 aTimings.iTvPhysicalImageAspectRatioDenominator = 3; |
|
668 aTimings.iUnderscanEnabled = ETrue; |
|
669 } |
661 |
670 |
662 if( aTimings.iUnderscanEnabled ) |
671 if( aTimings.iUnderscanEnabled ) |
663 { |
672 { |
|
673 INFO("==Underscan Enabled"); |
664 // Underscan |
674 // Underscan |
665 aTimings.iLeftTopCorner.iX = 0; |
675 aTimings.iLeftTopCorner.iX = 0; |
666 aTimings.iLeftTopCorner.iY = 0; |
676 aTimings.iLeftTopCorner.iY = 0; |
667 aTimings.iRightBottomCorner.iX = aTimings.iHorizontalActivePixels; |
677 aTimings.iRightBottomCorner.iX = aTimings.iHorizontalActivePixels; |
668 aTimings.iRightBottomCorner.iY = aTimings.iVerticalActiveLines; |
678 aTimings.iRightBottomCorner.iY = aTimings.iVerticalActiveLines; |
669 } |
679 } |
670 else |
680 else |
671 { |
681 { |
|
682 INFO("==Underscan Disabled"); |
672 // Calculate overscan |
683 // Calculate overscan |
673 CalculateOverscan( aTimings.iLeftTopCorner, |
684 CalculateOverscan( aTimings.iLeftTopCorner, |
674 aTimings.iRightBottomCorner ); |
685 aTimings.iRightBottomCorner ); |
675 } |
686 } |
676 aTimings.iTvPhysicalImageAspectRatioNumerator = iEdidParserPtr->GetAspectRatioLandscape(); |
|
677 aTimings.iTvPhysicalImageAspectRatioDenominator = iEdidParserPtr->GetAspectRatioPortrait(); |
|
678 aTimings.iConnector = TTvSettings::EHDMI; |
687 aTimings.iConnector = TTvSettings::EHDMI; |
679 aTimings.iTvColorCoordinates.iRed.iX = iEdidParserPtr->GetColorCoordinatesRedX(); |
688 |
680 aTimings.iTvColorCoordinates.iRed.iY = iEdidParserPtr->GetColorCoordinatesRedY(); |
689 if( iEdidParserPtr ) |
681 aTimings.iTvColorCoordinates.iGreen.iX = iEdidParserPtr->GetColorCoordinatesGreenX(); |
690 { |
682 aTimings.iTvColorCoordinates.iGreen.iY = iEdidParserPtr->GetColorCoordinatesGreenY(); |
691 aTimings.iTvPhysicalImageWidthMm = iEdidParserPtr->GetHorizontalScreenSize() * 10; |
683 aTimings.iTvColorCoordinates.iBlue.iX = iEdidParserPtr->GetColorCoordinatesBlueX(); |
692 aTimings.iTvPhysicalImageHeightMm = iEdidParserPtr->GetVerticalScreenSize() * 10; |
684 aTimings.iTvColorCoordinates.iBlue.iY = iEdidParserPtr->GetColorCoordinatesBlueY(); |
693 aTimings.iTvPhysicalImageAspectRatioNumerator = iEdidParserPtr->GetAspectRatioLandscape(); |
685 aTimings.iTvColorCoordinates.iWhite.iX = iEdidParserPtr->GetColorCoordinatesWhiteX(); |
694 aTimings.iTvPhysicalImageAspectRatioDenominator = iEdidParserPtr->GetAspectRatioPortrait(); |
686 aTimings.iTvColorCoordinates.iWhite.iY = iEdidParserPtr->GetColorCoordinatesWhiteY(); |
695 aTimings.iTvColorCoordinates.iRed.iX = iEdidParserPtr->GetColorCoordinatesRedX(); |
687 aTimings.iTvHdmiVersion = iEdidParserPtr->GetVersion(); |
696 aTimings.iTvColorCoordinates.iRed.iY = iEdidParserPtr->GetColorCoordinatesRedY(); |
688 aTimings.iTvHdmiRevision = iEdidParserPtr->GetRevision(); |
697 aTimings.iTvColorCoordinates.iGreen.iX = iEdidParserPtr->GetColorCoordinatesGreenX(); |
|
698 aTimings.iTvColorCoordinates.iGreen.iY = iEdidParserPtr->GetColorCoordinatesGreenY(); |
|
699 aTimings.iTvColorCoordinates.iBlue.iX = iEdidParserPtr->GetColorCoordinatesBlueX(); |
|
700 aTimings.iTvColorCoordinates.iBlue.iY = iEdidParserPtr->GetColorCoordinatesBlueY(); |
|
701 aTimings.iTvColorCoordinates.iWhite.iX = iEdidParserPtr->GetColorCoordinatesWhiteX(); |
|
702 aTimings.iTvColorCoordinates.iWhite.iY = iEdidParserPtr->GetColorCoordinatesWhiteY(); |
|
703 aTimings.iTvHdmiVersion = iEdidParserPtr->GetVersion(); |
|
704 aTimings.iTvHdmiRevision = iEdidParserPtr->GetRevision(); |
|
705 } |
689 Mem::FillZ( ( TAny* )&aTimings.iProductName, ( sizeof( TChar ) * KProductNameChars ) ); |
706 Mem::FillZ( ( TAny* )&aTimings.iProductName, ( sizeof( TChar ) * KProductNameChars ) ); |
690 Mem::FillZ( ( TAny* )&aTimings.iProductDescription, ( sizeof( TChar ) * KProductDescriptorsChars ) ); |
707 Mem::FillZ( ( TAny* )&aTimings.iProductDescription, ( sizeof( TChar ) * KProductDescriptorsChars ) ); |
691 aTimings.iSourceType = THdmiDviTimings::ESourceTypeUnknown; |
708 aTimings.iSourceType = THdmiDviTimings::ESourceTypeUnknown; |
692 } |
709 } |
693 |
710 |
859 TInt CEDIDHandler::SetDmtModes( RArray<THdmiDviTimings>& aTimings ) const |
876 TInt CEDIDHandler::SetDmtModes( RArray<THdmiDviTimings>& aTimings ) const |
860 { |
877 { |
861 FUNC_LOG; |
878 FUNC_LOG; |
862 |
879 |
863 TInt retVal(KErrNone); |
880 TInt retVal(KErrNone); |
864 |
881 |
865 // Check established timings 1 and 2 |
882 if( iDataBlockPtr ) |
866 retVal = SetDmtModesFromEstablishedTimings( aTimings ); |
883 { |
867 |
884 // Check established timings 1 and 2 |
868 if( KErrNone == retVal ) |
885 retVal = SetDmtModesFromEstablishedTimings( aTimings ); |
869 { |
886 |
870 // Check standard timings |
887 if( KErrNone == retVal ) |
871 retVal = SetDmtModesFromStandardTimings( aTimings ); |
888 { |
872 |
889 // Check standard timings |
873 if( KErrNone == retVal ) |
890 retVal = SetDmtModesFromStandardTimings( aTimings ); |
874 { |
891 |
875 // Check timing descriptors |
892 if( KErrNone == retVal ) |
876 retVal = SetDmtModesFromTimingDescriptors( aTimings ); |
893 { |
877 } |
894 // Check timing descriptors |
878 } |
895 retVal = SetDmtModesFromTimingDescriptors( aTimings ); |
|
896 } |
|
897 } |
|
898 } |
|
899 else |
|
900 { |
|
901 INFO( "==No EDID available from the Sink. Setting DMT 4" ); |
|
902 // No EDID data available from the sink |
|
903 // Default VGA resolution should be selected |
|
904 THdmiDviTimings timings; |
|
905 const TTimingItem* item = TimingByIndex( KDefaultDMTModeIndex, ETimingModeDMT ); |
|
906 if( item ) |
|
907 { |
|
908 Mem::FillZ( ( TAny* )&timings, sizeof( timings ) ); |
|
909 FillHdmiDviTimings( *item, timings ); |
|
910 retVal = aTimings.Append( timings ); |
|
911 ERROR_1( retVal, "Failed to append DMT timing: %S in array", item->iTimingName ); |
|
912 } |
|
913 else |
|
914 { |
|
915 ERROR_1( KErrArgument, "DMT timing item not found for VIC mode: %d", KDefaultDMTModeIndex ); |
|
916 retVal = KErrNotFound; |
|
917 } |
|
918 } |
879 |
919 |
880 return retVal; |
920 return retVal; |
881 } |
921 } |
882 |
922 |
883 //------------------------------------------------------------------------------ |
923 //------------------------------------------------------------------------------ |